封装mp4恒定帧率(CFR)变动态帧率(VFR)?最神奇的一集
本帖最后由 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封装需要覆写时间码
废话不多说,直接上脚本(非常简陋的脚本,仅供能运行起来)
脚本依赖 mp4box 和 mp4fpsmod
::2024.12.14
@echo off
color 70&title 封装mp4
echo 用法: 先用 MKVToolNix 对文件进行标准封装,例如改好轨道名、改好轨道语言、封入章节……
echo 然后运行此脚本将封装好的mkv文件转为mp4文件
echo.
set /p in=输入文件路径名:
set in="%in:"=%"
set /p o=输出文件路径名:
set o="%o:"=%"
if not "%o:~-5%==".mp4" (
set o=%o:~0,-1%.mp4"
)
set fps=24000/1001
set /p fps=输入帧率(分数,默认值为'%fps%',直接回车则使用默认值):
@echo on
mp4box -add %in% -new %o:~0,-1%.temp.mp4"
mp4fpsmod -r 0:%fps% -o %o% %o:~0,-1%.temp.mp4"
@echo off
if exist %o:~0,-1%.temp.mp4" (del /q %o:~0,-1%.temp.mp4")
choice /c e
如果复制这个脚本,需要保存为GB编码,用记事本保存的话,保存为ANSI(系统默认编码),这样才能支持非ASCII字符
注意:之前的脚本存在bug,会导致关键帧信息丢失,使视频失去随机跳转能力,现在已经修改脚本
页:
[1]