小编典典

我可以在Java中添加任何独立的两个mp4文件,而不会造成任何损坏或数据丢失吗?[重复]

jsp

我正在尝试使用ffmpeg连接两个mp4文件。我需要这是一个自动过程,因此为什么选择ffmpeg。我将两个文件转换为.ts文件,然后将它们串联,然后尝试对该简明的.ts文件进行编码。这些文件是h264和aac编码的,我希望尽可能保持质量不变或接近原始质量。

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文件连接在一起并使它正常工作。


阅读 348

收藏
2020-06-10

共1个答案

小编典典

我最终使用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
2020-06-10