我想合并每批 20 个视频。我正在运行一台 Linux 机器。视频为 mp4 格式,质量中等。有些甚至缺少音频流。到目前为止,我已经尝试了、和ffmpeg
。mencoder
我想编写一个命令行脚本来实现这一点,因为我正在进行批处理。cvlc/vlc
MP4Box
主要问题是,我尝试过的一些解决方案对两个视频很有效,一些对带有音频流的视频很有效,而另一些对我的视频集的其他子集也很有效。然而,我还没有找到一个全面的解决方案来完成这项任务。
答案1
我使用mkvmerge
将多个 MP4 文件合并为一个:
mkvmerge -o outfile.mkv infile_01.mp4 + infile_02.mp4 + infile_03.mp4
答案2
答案3
创建一个文件 files.txt,其中包含您想要以以下形式连接的所有文件(以 # 开头的行将被忽略):
# this is a comment
file 'file1.mp4'
file '/path/to/file2.mp4'
file 'file3.mp4'
请注意,这些可以是相对路径,也可以是绝对路径。然后,您可以流式复制或重新编码文件:
ffmpeg -f concat -safe 0 -i files.txt -c copy output.mp4
答案4
我编写了一个小型 shell 脚本来使用 ffmpeg 连接 MP4,而无需转码。
for f in $(ls *.MP4); do
ffmpeg -i $f -c copy -bsf:v h264_mp4toannexb -f mpegts $f.ts
done
CONCAT=$(echo $(ls *.ts) | sed -e "s/ /|/g")
ffmpeg -i "concat:$CONCAT" -c copy -bsf:a aac_adtstoasc output.mp4
rm *.ts
这会在 MPEG 容器中创建中间文件,然后将它们连接成 MP4。