我有一个非常简单的用例: 我想从相机中寻找 mpeg 视频 (h264 (高) (HDMV / 0x564D4448), yuv420p(顶部优先), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 25 fps, 50 tbr, 9 万太亿) 然后我想将它们连接到一个文件中 我想从脚本自动完成(这就是我使用 ffmpeg 的原因) 我不想重新编码视频
然后我遇到一个问题: 输出文件的时间戳存在巨大的不连续性(例如 10 秒),导致文件无法读取。
这是我在Linux中的命令行,ffmpeg版本n6.1.1-16-g33efa50fa4:
ffmpeg -y -i 00071.MTS -ss 2.000 -to 10.000 -c copy -f mpegts 00071_cut.MTS
ffmpeg -y -i 00072.MTS -ss 0.000 -to 10.000 -c copy -f mpegts 00072_cut.MTS
ffmpeg -y -i 00073.MTS -ss 15.000 -to 25.000 -c copy -f mpegts 00073_cut.MTS
ffmpeg -y -i 00074.MTS -ss 28.000 -to 38.000 -c copy -f mpegts 00074_cut.MTS
ffmpeg -y -f mpegts -i "concat:00071_cut.MTS|00072_cut.MTS|00073_cut.MTS|00074_cut.MTS" -c copy output.MTS
在 concat 命令期间,当我使用 *_cut.MTS 文件时出现此错误,但当我使用原始文件时则不会出现此错误:
timestamp discontinuity (stream id=257): -9976000, new offset= 25480000
我所有的 *_cut.MTS 文件的第一个 pts_time 都在 1.4 到 2.0 秒之间。
我刚刚意识到,只有当我使用 -to ou -t 选项剪切文件末尾时才会出现问题
不连续性似乎取决于视频的持续时间...当我使用以下值更改 -t 选项时: 20; 20; 11; 11; 10; 10; 9; 9; 8; 8; 7; 7; 6; 6; 5; 5; 4; 4; 并连接所有这些视频。
然后我绘制输出文件的所有数据包的 pts_time 差异: dts差异图
我知道这种问题在网上出现过很多次,我找了几个小时但没有找到任何明确的答案。
谢谢您的帮助!
您需要
concat
使用列表文件。这个串联过滤器几乎永远不会起作用。 我从来没有成功使用过。
创建一个文件,list.txt,格式如下:
file '/path/to/00071_cut.MTS'
file '/path/to/00072_cut.MTS'
file '/path/to/00073_cut.MTS'
添加所有文件,然后使用:
ffmpeg -f concat -safe 0 -i list.txt -c copy -avoid_negative_ts make_zero -movflags +faststart concat_final_mux.mkv