首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用FFmpeg连接两个MP4文件?

如何使用FFmpeg连接两个MP4文件?
EN

Stack Overflow用户
提问于 2011-09-07 19:40:01
回答 17查看 651.4K关注 0票数 689

我正在尝试使用FMPEG键连接两个mp4文件。我需要一个自动的过程,所以我选择了ffmpeg。我将这两个文件转换为.ts文件,然后将它们连接起来,然后尝试对连接后的.ts文件进行编码。这些文件是h264aac编码的,我希望保持相同的质量或尽可能接近原始质量。

ffmpeg -i part1.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part1.ts
ffmpeg -i part2.mp4 -vcodec copy -vbsf h264_mp4toannexb -acodec copy part2.ts
cat part1.ts part2.ts > parts.ts
ffmpeg -y -i parts.ts -acodec copy -ar 44100 -ab 96k -coder ac -vbsf h264_mp4toannexb parts.mp4

不幸的是,在编码过程中,我从ffmpeg返回了以下错误消息:

[h264 @ 0x1012600]sps_id out of range
[h264 @ 0x1012600]non-existing SPS 0 referenced in buffering period
[h264 @ 0x1012600]sps_id out of range
[h264 @ 0x1012600]non-existing SPS 0 referenced in buffering period
[NULL @ 0x101d600]error, non monotone timestamps 13779431 >= 13779431kbits/s    
av_interleaved_write_frame(): Error while opening file

这发生在编码的中途,这让我认为你不能将两个.ts文件连接在一起并让它工作。

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2011-09-07 19:53:46

我最终使用了mpg作为中间格式,并且它起作用了(注意这是一个危险的例子,-qscale 0将重新编码视频...)

ffmpeg -i 1.mp4 -qscale 0 1.mpg
ffmpeg -i 2.mp4 -qscale 0 2.mpg
cat 1.mpg 2.mpg | ffmpeg -f mpeg -i - -qscale 0 -vcodec mpeg4 output.mp4
票数 38
EN

Stack Overflow用户

发布于 2014-03-27 20:44:57

这是一种快速(不到1分钟)且无损的方法,无需中间文件即可完成:

ls Movie_Part_1.mp4 Movie_Part_2.mp4 | \
perl -ne 'print "file $_"' | \
ffmpeg -f concat -i - -c copy Movie_Joined.mp4

"ls“包含要连接的文件。"perl”动态地将连接文件创建到管道中,"-i -“部分告诉ffmpeg从管道中读取。

(注意-我的文件中没有空格或奇怪的东西-如果你想用“硬”文件实现这个想法,你需要适当的shell转义)。

票数 64
EN

Stack Overflow用户

发布于 2018-11-13 04:23:37

在我接受的答案中,当我使用选项3在Mac上连接几个MP4s时,我发现管道操作符不起作用。

以下一行程序适用于bash (Mac、Linux),不需要中间文件:

ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4

在这里,<()语法实际上创建了一个“后台”临时文件

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7333232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档