我们正在尝试建立一个流程,使用户可以将多个视频中的片段合并在一起。我们的流程设置为使用ffmpeg为每个片段制作单独的mp4文件,然后使用ffmpeg concat demuxer流程将其加入。在生成段mp4文件时,我们尝试使它们在编解码器,尺寸等方面都相同,以便串联成功。这是创建段mp4之一的调用示例。
ffmpeg -ss 0.5 -t 299.5 -i /tmp/vid1.mp4 -c:v libx264 -c:a aac -framerate 29.97 -b:v 540k -maxrate 540k -minrate 540k -bufsize 540k -vf scale=640:480,fade=t=out:st=294.5:d=5 /tmp/vid1_new.mp4
此过程在某些情况下有效,但在另一些情况下,加入的文件将正确播放第一个片段,但随后的片段有时会冻结视频,或加快音频速度。有人对如何使上述ffmpeg命令更“防弹”有任何建议,以便所有文件都兼容吗?
我们用来连接文件的命令是:
/var/ffmpg/bin/ffmpeg -f concat -safe 0 -i /tmp/files.txt -c copy /tmp/combined.mp4
一个文件的ffprobe
输出为:
{
"format": {
"filename": "vid2.mp4",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "1004.944000",
"size": "109489681",
"bit_rate": "871608",
"probe_score": 100,
"tags": {
"major_brand": "isom",
"minor_version": "512",
"compatible_brands": "isomiso2avc1mp41",
"encoder": "Lavf54.63.103"
}
}
}
第二个文件的ffprobe
输出:
{
"format": {
"filename": "vid1.mp4",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "1159.164000",
"size": "63903454",
"bit_rate": "441031",
"probe_score": 100,
"tags": {
"major_brand": "isom",
"minor_version": "512",
"compatible_brands": "isomiso2avc1mp41",
"encoder": "Lavf56.40.100"
}
}
}