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

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

  • TA的每日心情
    慵懒
    17 小时前
  • 签到天数: 282 天

    [LV.8]以坛为家I

    12

    主题

    49

    回帖

    0

    VC币

    荣誉会员

    Rank: 14Rank: 14Rank: 14Rank: 14

    积分
    103870
    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,会导致关键帧信息丢失,使视频失去随机跳转能力,现在已经修改脚本
    回复

    使用道具 举报

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

    本版积分规则

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