如何在 Ubuntu 上合并多个(两个以上)视频?

如何在 Ubuntu 上合并多个(两个以上)视频?

我想合并每批 20 个视频。我正在运行一台 Linux 机器。视频为 mp4 格式,质量中等。有些甚至缺少音频流。到目前为止,我已经尝试了、和ffmpegmencoder我想编写一个命令行脚本来实现这一点,因为我正在进行批处理。cvlc/vlcMP4Box

主要问题是,我尝试过的一些解决方案对两个视频很有效,一些对带有音频流的视频很有效,而另一些对我的视频集的其他子集也很有效。然而,我还没有找到一个全面的解决方案来完成这项任务。

答案1

我使用mkvmerge将多个 MP4 文件合并为一个:

mkvmerge -o outfile.mkv infile_01.mp4 + infile_02.mp4 + infile_03.mp4

答案2

您可以使用以下方法进行操作ffmpeg

ffmpeg -i concat:"input1.mp4|input2.mp4" output.mp4

参考和更多信息

答案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。

相关内容