使用 ffmpeg,完成多个 mp4 文件合并

使用 ffmpeg,完成多个 mp4 文件合并
Qi将多个 MP4 文件合并为一个大文件的方法
在使用 FFmpeg 工具将多个 MP4 小文件合并为一个大文件时,有两种常见的拼接方法:MPEG 拼接和TS 拼接(推荐)。
在Linux上安装FFmpeg
首先需要安装FFmpeg。你可以通过以下命令在终端中安装FFmpeg:
bash
1 | sudo apt update |
MPEG 拼接
此方法需要将小 MP4 文件转码为 MPEG 文件,然后将 MPEG 文件拼接,最后再转码回 MP4 文件。
步骤如下:
- 将小 MP4 文件转码为 MPEG 文件: bash
1
2ffmpeg -i a1.mp4 -qscale 4 a1.mpg
ffmpeg -i a2.mp4 -qscale 4 a2.mpg - 将 MPEG 文件拼接并转码回 MP4 文件: bash
1
cat a1.mpg a2.mpg | ffmpeg -f mpeg -i - -qscale 6 -vcodec mpeg4 output.mp4
缺点:
- 速度较慢,操作用时超过 1 分钟。
- 文件增大明显。例如,6 个小 MP4 文件总计 240MB,最终生成的 MP4 文件会变成 640MB 左右。
由于上述缺点,我们通常不推荐使用此方案。
TS 拼接(推荐)
此方法先将 MP4 文件封装为 TS 格式,然后直接拼接 TS 文件,最后再转化为 MP4 文件。
步骤如下:
- 将 MP4 文件封装为 TS 格式: bash
1
2
3
4
5
ffmpeg -i a1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i a2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i a3.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 3.ts
ffmpeg -i a4.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 4.ts - 拼接 TS 文件并导出为 MP4 文件: bash
1
ffmpeg -i "concat:1.ts|2.ts|3.ts|4.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4
- 删除过程中生成的 TS 文件: bash
1
rm *.ts
优点:
- 速度快,整个操作用时约 10 秒。
- 文件大小基本等同于原始小文件的总和。例如,6 个小 MP4 文件总计 240MB,最终生成的 MP4 文件仍为 240MB 左右。
具体操作方案
- 使用以下脚本按照文件修改时间顺序批量重命名MP4文件: 将此脚本保存为bash
1
2
3
4
5
6
i=1
for file in $(ls -tr *.mp4); do
mv "$file" "a$i.mp4"
i=$((i + 1))
donerename.sh
,并在MP4文件所在目录中运行:bash1
bash rename.sh
- 编辑上述拼接脚本,并将其保存到MP4文件所在的目录内,命名为
concat.sh
; - 打开终端,cd 到MP4文件所在的目录,执行
bash concat.sh
并等待操作完成; - 最终生成合并好的
output.mp4
文件。
评论
匿名评论隐私政策