如何通过avconv合并video?

我在文件夹中有几个块。

0001.mp4 0002.mp4 0003.mp4 ... 0112.mp4 

我想合并成full.mp4

我试着用:

 avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \ -c copy /root/test/full.mp4 

未知input格式:'concat'

 avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \ -c copy /root/test/full.mp4 

未知input格式:'concat'

 avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \ -c:v copy -c:a copy /root/test/full.mp4 

在上一版中,只有一个input文件被捕获输出。

如何将文件夹中的所有块合并到完整video中?

我不想使用ffmpeg或其他。 只有Avconv。

 avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4 

我不知道是否适用于任何容器types(用AVI )。

mp4文件不能简单地连接,因为“接受”的答案build议。

如果你只运行那个,那么你只能得到只有file1.mp4内容的file1.mp4

也就是说,只要将原始文件正确拆分为mpegstream,您在原始问题中所要做的就可以完成。

以下命令会将input.mp4分割成3x 60秒段,文件[1-3] .ts:

 avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \ -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file1.ts avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \ -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file2.ts avconv -ss 0 -i input.mp4 -t 60 -vcodec libx264 -acodec aac \ -bsf:v h264_mp4toannexb -f mpegts -strict experimental -y file3.ts 

然后你可以把它们放在一起,就像另一个答案所示:

 avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \ -bsf:a aac_adtstoasc -y full.mp4 

我使用这个过程来创build一个可扩展的并行转码器,如下所述:

对于mp4,我发现的唯一工作解决scheme是使用gpac软件包中的MP4Box

 #!/bin/bash filesList="" for file in $(ls *.mp4|sort -n);do filesList="$filesList -cat $file" done MP4Box $filesList -new merged_files_$(date +%Y%m%d_%H%M%S).mp4 

或命令是

 MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4 

与mencoder和avconv我不能让它的工作:-(

这工作

 avconv -i 1.mp4 1.mpeg avconv -i 2.mp4 2.mpeg avconv -i 3.mp4 3.mpeg cat 1.mpeg 2.mpeg 3.mpeg | avconv -f mpeg -i - -vcodec mpeg4 -strict experimental output.mp4 

上面的作品,如果你只有avconv – 但ffmpeg已添加function…引用:

“上面的avconv步骤做了不必要的额外的有损编码步骤,这很慢并且降低了输出质量。我build议使用concat demuxer(附加信息)或者concat filter来代替,但是avconv缺lessFFmpeg中ffmpeg提供的那些function。 LordNeckbeard

  SEE https://trac.ffmpeg.org/wiki/Concatenate 

如果您使用的是支持命名pipe道的系统,则可以使用这些命令来避免创build中间文件 – 这会将stderr(ffmpeg将所有写入的数据发送到)发送到/ dev / null,以避免混淆命令行:

 mkfifo temp1 temp2 ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp1 2> /dev/null & \ ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts temp2 2> /dev/null & \ ffmpeg -f mpegts -i "concat:temp1|temp2" -c copy -bsf:a aac_adtstoasc output.mp4 

这个为我工作:

 avconv -i "concat:001.mp4|002.mp4|003.mp4" -c copy full.mp4 

只需将所有文件连接成一个mp4,而不用重新编码它们。

这个方法只会对原始的* .avi文件进行拼接,我猜想。 但是由于许多愿意joinAVI文件的人最终会看到这个问题,所以我会在这里发表我的答案:

 cat *.avi > out_tmp.avi avconv -i out_tmp.avi -c copy output.avi 

再一次:仅适用于未压缩的* .avi文件。

我用avidemux (gtk工具)做到了这一点 。 它可以在大多数linux下使用,也可以在Windows和Mac上使用。 我只是打开第一个文件。 然后我按顺序添加了下一个。 最后,我使用audio和video副本以及mp4格式保存了连接的video。

它工作得很好!

我正在使用ffmpeg命令来执行此操作。 这里是例子:

 ffmpeg -i concat:/dev/null|file1.ts|file2.ts -c copy -bsf:a aac_adtstoasc -y output.mp4 

看看这个分布式并行videotrascoding github项目