.mp4 容器格式支持一项名为“编辑列表”(又名“编辑原子”或edts
)的功能,该功能可以在不修改比特流的情况下更改播放行为。是否有办法使用 ffmpeg 或其他工具查看、导出和/或修改这些编辑列表中的原始数据?
答案1
要查看媒体文件的编辑列表,您可以使用ffprobe
增加了loglevel
. 1
$ ffprobe -loglevel trace trimmed.mp4 2>&1 | grep edit
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f895a40f580] track[0].edit_count = 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f895a40f580] Processing st: 0, edit list 0 - media time: 120770, duration: 299786
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f895a40f580] track[1].edit_count = 1
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f895a40f580] Processing st: 1, edit list 0 - media time: 702, duration: 440685
在这种情况下,第一个索引是视频轨道,第二个索引是音轨。
据我了解,该值media time
定义了每个段的开始时间和duration
持续时间。将它们相乘time_base
应该会得到以秒为单位的值。
$ ffprobe -v error -i trimmed.mp4 -show_entries stream=index,duration,time_base
[STREAM]
index=0
time_base=1/30000
duration=9.992867
[/STREAM]
[STREAM]
index=1
time_base=1/44100
duration=9.992857
[/STREAM]
因此,此示例文件有大约四秒的视频被跳过(如果播放器尊重编辑列表)。
>>> 120770*1/30000
4.025666666666667
>>> 299786*1/30000
9.992866666666666
>>> 702*1/44100
0.015918367346938776
>>> 440685*1/44100
9.992857142857142
1. 你可能不想解析这个,但可能有一些方法可以导出稳定的机器可读格式