找回密码
 立即注册
查看: 1072|回复: 0

封装mp4恒定帧率(CFR)变动态帧率(VFR)?最神奇的一集

20

主题

164

回帖

20

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
244783
op200 发表于 2024-12-5 01:07:23 | 显示全部楼层 |阅读模式
本帖最后由 op200 于 2024-12-17 21:08 编辑

恒定帧率的mkv源

帧率模式 :恒定帧率 (CFR)
帧率 :23.976 (24000/1001) FPS



重封装成mp4,会神奇地变成VFR

帧率模式 :动态帧率 (VFR)
帧率 :23.976 (24000/1001) FPS
最低帧率 :23.810 FPS
最高帧率 :24.390 FPS



起初我以为是mp4封装器的原因,今天我在论坛查了下其他网u的结论,是mkv的时间码计算方式和mp4不同,所以从某种角度来说是mkv的时间码出问题了,而不是mp4

所以mkv转mp4封装需要覆写时间码


废话不多说,直接上脚本(非常简陋的脚本,仅供能运行起来)
脚本依赖 mp4boxmp4fpsmod


  1. ::2024.12.14

  2. [url=home.php?mod=space&uid=30159]@echo[/url] off
  3. color 70&title 封装mp4


  4. echo 用法:    先用 MKVToolNix 对文件进行标准封装,例如改好轨道名、改好轨道语言、封入章节……
  5. echo     然后运行此脚本将封装好的mkv文件转为mp4文件
  6. echo.


  7. set /p in=输入文件路径名:
  8. set in="%in:"=%"

  9. set /p o=输出文件路径名:
  10. set o="%o:"=%"

  11. if not "%o:~-5%==".mp4" (
  12.     set o=%o:~0,-1%.mp4"
  13. )


  14. set fps=24000/1001
  15. set /p fps=输入帧率(分数,默认值为'%fps%',直接回车则使用默认值):




  16. @echo on
  17. mp4box -add %in% -new %o:~0,-1%.temp.mp4"
  18. mp4fpsmod -r 0:%fps% -o %o% %o:~0,-1%.temp.mp4"
  19. @echo off


  20. if exist %o:~0,-1%.temp.mp4" (del /q %o:~0,-1%.temp.mp4")

  21. choice /c e
复制代码


如果复制这个脚本,需要保存为GB编码,用记事本保存的话,保存为ANSI(系统默认编码),这样才能支持非ASCII字符


注意:之前的脚本存在bug,会导致关键帧信息丢失,使视频失去随机跳转能力,现在已经修改脚本
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表