我在文件夹中有几个块.
0001.mp4
0002.mp4
0003.mp4
...
0112.mp4
Run Code Online (Sandbox Code Playgroud)
我想将它们合并到full.mp4中
我试着用:
avconv -f concat -i <(printf "file '%s'\n" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
Run Code Online (Sandbox Code Playgroud)
未知输入格式:'concat'
avconv -f concat -i <(printf "%s|" /root/chunk/*.mp4) -y \
-c copy /root/test/full.mp4
Run Code Online (Sandbox Code Playgroud)
未知输入格式:'concat'
avconv -i concat:`ls -ltr /root/chunk/*.mp4 | awk 'BEGIN {ORS="|"} { print $9 }'` \
-c:v copy -c:a copy /root/test/full.mp4
Run Code Online (Sandbox Code Playgroud)
在上一版中,只有一个输入文件被输出.
如何将文件夹中的所有块合并为完整视频?
我不想使用ffmpeg或其他.仅限Avconv.
Dus*_*and 35
mp4 文件不能简单地连接,因为"接受"的答案表明.
如果你运行它,那就是那个,你最终output.mp4只会得到的内容file1.mp4.
也就是说,只要您正确地将原始文件拆分为mpeg流,您在原始问题中要做的事情实际上可以完成.
以下命令将分为input.mp43x 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
Run Code Online (Sandbox Code Playgroud)
然后你可以把它们重新组合在一起,就像另一个答案所示:
avconv -i concat:"file1.ts|file2.ts|file3.ts" -c copy \
-bsf:a aac_adtstoasc -y full.mp4
Run Code Online (Sandbox Code Playgroud)
我使用此过程创建了一个可伸缩的并行转码器,如下所述:
小智 19
avconv -i concat:file1.mp4\|file2.mp4 -c copy output.mp4
Run Code Online (Sandbox Code Playgroud)
我不知道是否适用于任何容器的类型(为我工作AVI).
Pip*_*ipo 10
对于mp4,我发现的唯一可行解决方案是使用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
Run Code Online (Sandbox Code Playgroud)
或命令是
MP4Box -cat file1.mp4 -cat file2.mp4 -new mergedFile.mp4
Run Code Online (Sandbox Code Playgroud)
与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
Run Code Online (Sandbox Code Playgroud)
以上工作如果您只有avconv - 但ffmpeg添加了函数...引用:
"以上avconv步骤执行了不必要的额外有损编码步骤,这些步骤很慢并且降低了输出质量.我建议使用concat demuxer(附加信息)或concat过滤器,但avconv缺少FFmpeg的ffmpeg中提供的那些功能" - @ LordNeckbeard
SEE https://trac.ffmpeg.org/wiki/Concatenate
Run Code Online (Sandbox Code Playgroud)
如果您正在使用支持命名管道的系统,您可以使用它们来避免创建中间文件 - 这会将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
Run Code Online (Sandbox Code Playgroud)