如何使用FFmpeg合并多个MP4视频(短剧分集合成完整版)
在追剧或整理视频素材时,经常需要将多个分集的MP4视频合并成一个完整视频。本文将详细介绍如何使用FFmpeg实现无损合并,并解决常见问题。
目录
准备工作
安装FFmpeg
Windows:
# 从官网下载后解压,并添加bin目录到PATH
https://ffmpeg.org/download.html
Linux/macOS:
sudo apt install ffmpeg # Ubuntu/Debian
brew install ffmpeg # macOS
检查视频文件
确保所有MP4文件:
- 编码格式相同(如H.264/AAC)
- 文件名按顺序排列
基础合并方法
步骤
- 创建
list.txt
文件:file '1.mp4' file '2.mp4' ... file '40.mp4'
- 执行合并命令:
ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4
按数字顺序合并
Windows(PowerShell)
Get-ChildItem "*.mp4" |
Sort-Object { [int]($_.Name -replace '[^\d]', '') } |
ForEach-Object { "file '$($_.Name)'" } |
Out-File "list.txt" -Encoding UTF8NoBOM
Linux/macOS
for f in $(ls *.mp4 | sort -V); do
echo "file '$f'";
done > list.txt
常见问题解决
错误:unknown keyword 'file'
- 原因:BOM头或格式错误
- 解决:
- 用Notepad++转为UTF-8(无BOM)
- 确保格式为
file '文件名.mp4'
错误:Invalid data found
- 原因:编码不一致
- 解决:
ffprobe input.mp4 # 检查编码 # 不一致时先转码 ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4
进阶技巧
添加片头/片尾
echo "file 'intro.mp4'" > list.txt
Get-ChildItem "*.mp4" | Sort-Object >> list.txt
echo "file 'outro.mp4'" >> list.txt
添加转场效果
ffmpeg -f concat -safe 0 -i list.txt -vf "fade=in:0:30" output.mp4
总结
需求 | 解决方案 |
---|---|
快速合并 | ffmpeg -f concat -i list.txt -c copy output.mp4 |
数字排序 | Sort-Object { [int]($_.Name -replace '[^\d]', '') } |
中文路径 | 使用单引号包裹 |
编码错误 | 检查并统一编码格式 |
提示:合并前建议备份原文件,FFmpeg版本建议使用最新稳定版。