我一直在尝试使用此处记录的 FFMPEG concat 协议来连接多个 MP4 剪辑(h264、aac)。剪辑连接成功,但日志中存在多个错误,包括:
此外,随着添加更多剪辑,音频和视频似乎略有不同步 - 尽管在某些播放器(Quicktime 和 Chrome HTML5)上更明显。
这是我正在使用的代码,任何提示将不胜感激!
将每个视频转换为临时文件
ffmpeg -y -i <input file> -vcodec libx264 -acodec aac -f mpegts -bsf:v h264_mp4toannexb -mpegts_copyts 1 <temp file>
连接临时文件
ffmpeg -i concat <input1|input2 ...> -map 0 -vcodec copy -aprofile aac_low -acodec aac -strict experimental -cutoff 15000 -vbsf aac_adtstoasc -b:a 32k <output file>
由于您要对音频和视频进行编码,因此只需使用 concat demuxer:
创建一个包含要加入的文件列表的文本文件
file 'input1'
file 'input2'
file 'input3'
...
然后运行
ffmpeg -f concat -i textfile -map 0 \
-vcodec libx264 \
-aprofile aac_low -acodec aac -strict experimental -cutoff 15000 -b:a 32k <output file>
-尝试
-filter_complex
重置 pts 并避免创建 mpeg 文件,根据我的经验,这会破坏任何同步。
示例:
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v]trim=start=770:end=1843.6,scale=768x432,setsar=1/1,setdar=16/9,setpts=PTS-STARTPTS[v0];[0:a]atrim=start=770:end=1843.6,asetpts=PTS-STARTPTS[a0];[1:v]trim=start=58:end=1795.5,scale=768x432,setsar=1/1,setdar=16/9,setpts=PTS-STARTPTS[v1];[1:a]atrim=start=58:end=1795.5,asetpts=PTS-STARTPTS[a1];[v0][a0][v1][a1]concat=n=2:v=1:a=1[outv][outa]" -map [outv] -map [outa] -map_chapters -1 -map_metadata -1 -c:v libx265 -c:a libmp3lame -q:a 8 -ar 44100 -r 24 11.mp4
其中
start
和 end
(以秒为单位)对应于文件编码的开始和结束时间(而不是持续时间)
如果您有很多文件,请阅读我的答案。