FFmpeg 将多个 WMV 文件转换并合并成一个 MP4 文件
步骤
准备输入文件列表
FFmpeg 支持通过一个文本文件指定要合并的视频文件。创建一个名为 filelist.txt 的文本文件,内容如下:
file 'a-1.wmv'
file 'a-2.wmv'
file 'a-3.wmv'
file 'a-4.wmv'
确保这些 WMV 文件位于同一目录下,并且路径正确。如果文件不在当前目录,需要在 filelist.txt 中提供文件的完整路径,例如 file '/path/to/a-1.wmv'。
使用 FFmpeg 转换并合并
使用以下 FFmpeg 命令将 WMV 文件转换为 MP4 格式并合并为一个文件:
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -c:a aac -movflags +faststart output.mp4
命令参数说明
-f concat: 指定使用 FFmpeg 的 concat demuxer,用于合并多个文件。
-safe 0: 允许处理非标准或相对路径的文件名(如果文件路径有特殊字符或不在当前目录)。
-i filelist.txt: 指定输入文件列表。
-c:v libx264: 使用 H.264 视频编码器将视频转换为 MP4 兼容的格式。
-c:a aac: 使用 AAC 音频编码器,MP4 格式通常使用 AAC 音频。
-movflags +faststart: 优化 MP4 文件,使其在流式播放时更快加载。
output.mp4: 输出文件名。
注意事项
确保 FFmpeg 已安装
如果尚未安装 FFmpeg,请先安装:
- 在 Windows 上,可以从 FFmpeg 官网下载并配置环境变量。
- 在 Linux 上,使用包管理器安装,例如:
sudo apt install ffmpeg(Ubuntu/Debian)。
- 在 macOS 上,使用 Homebrew:
brew install ffmpeg。
文件编码兼容性
如果 WMV 文件的视频或音频编码不兼容(例如某些旧的 WMV 文件),FFmpeg 会自动尝试转码。如果需要特定的视频或音频参数(例如比特率、分辨率等),可以添加额外参数,例如:
-b:v 2M: 设置视频比特率为 2Mbps。
-vf scale=1280:720: 调整分辨率为 1280x720。
验证文件路径
确保 filelist.txt 中的文件路径正确,且文件存在。如果文件路径有空格或特殊字符,建议使用双引号,例如 file "path with spaces/a-1.wmv"。
合并时的格式一致性
如果 WMV 文件的分辨率、帧率或音频采样率不一致,FFmpeg 可能会报错。可以在命令中添加滤镜统一格式,例如:
ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -c:a aac -vf "scale=1280:720,setsar=1,fps=30" -ar 44100 -movflags +faststart output.mp4
-vf "scale=1280:720,setsar=1,fps=30": 统一分辨率为 1280x720,设置帧率为 30fps。
-ar 44100: 统一音频采样率为 44.1kHz。
错误排查
如果遇到错误,检查 FFmpeg 的日志输出。通常的问题包括:
- 文件路径错误:确认
filelist.txt 中的路径。
- 编码不支持:某些 WMV 文件可能使用旧的编解码器,尝试单独转换一个文件测试(例如
ffmpeg -i a-1.wmv a-1.mp4)。
- 内存不足:如果文件较大,确保系统有足够内存和磁盘空间。
示例
假设你的文件位于 /home/user/videos/ 目录下,filelist.txt 内容如下:
file '/home/user/videos/a-1.wmv'
file '/home/user/videos/a-2.wmv'
file '/home/user/videos/a-3.wmv'
file '/home/user/videos/a-4.wmv'
运行以下命令:
ffmpeg -f concat -safe 0 -i /home/user/videos/filelist.txt -c:v libx264 -c:a aac -movflags +faststart /home/user/videos/output.mp4
完成后,/home/user/videos/output.mp4 将包含所有 WMV 文件合并后的内容。
如果需要单独转换再合并
如果 WMV 文件格式复杂或不兼容,可以先将每个 WMV 文件转换为 MP4,然后再合并:
- 转换 WMV 到 MP4:
for i in *.wmv; do ffmpeg -i "$i" -c:v libx264 -c:a aac "${i%.*}.mp4"; done
- 创建新的
filelist.txt,列出转换后的 MP4 文件:
file 'a-1.mp4'
file 'a-2.mp4'
file 'a-3.mp4'
file 'a-4.mp4'
- 合并 MP4 文件:
ffmpeg -f concat -safe 0 -i filelist.txt -c copy -movflags +faststart output.mp4
这里使用 -c copy 以避免重新编码,直接复制视频和音频流,速度更快。