2. 视频格式转换

任务目标

使用 FFmpeg 将 MP4 视频文件转换为 AVI 容器格式,同时保持原始视频的画面质量与音频质量。本案例以最小可复现命令完成格式封装转换,不涉及重新编码(转码),因此转换速度快且画质无损。

核心原理

MP4 与 AVI 均为容器格式。当视频编码(如 H.264)与音频编码(如 AAC)在 AVI 容器中被广泛支持时,可通过 -c copy 参数直接复制编码数据流,仅更换封装容器,从而在数秒内完成转换且不损失任何画质与音质。若源文件编码不被 AVI 支持(如 H.265/HEVC),则需改用重新编码方案,本案例聚焦于最常见的 H.264/AAC 源文件场景。

环境依赖

  • FFmpeg 4.0+(建议使用最新稳定版)
  • 操作系统:Windows / macOS / Linux 均可
  • 输入文件:一个 MP4 视频(编码建议为 H.264 + AAC)

完整实现代码

以下为完整的转换命令,直接复制到终端执行即可:

# 基本转换命令(保持原始质量)
ffmpeg -i input.mp4 -c copy output.avi

# 若源文件包含字幕流且 AVI 不支持,可显式丢弃字幕流:
ffmpeg -i input.mp4 -c copy -sn output.avi

# 若源文件包含 AVI 不支持的音频编码(如 Opus),可仅复制视频并重编码音频为 MP3:
ffmpeg -i input.mp4 -c:v copy -c:a libmp3lame -q:a 2 output.avi

第一条命令为最常用方案,适用于绝大多数 H.264/AAC 编码的 MP4 文件。第二条命令在遇到字幕流兼容性问题时使用。第三条命令仅在音频编码不被 AVI 支持时作为备选方案。

运行与验证方法

  1. 准备输入文件:将待转换的 MP4 文件命名为 input.mp4 并置于当前目录,或替换命令中的文件名为实际路径。
  2. 执行转换:在终端中运行上述第一条命令。
  3. 观察输出:转换完成后,当前目录下应生成 output.avi 文件。
  4. 验证文件完整性:执行以下命令检查输出文件的编码信息与输入是否一致:
# 查看输入文件编码信息
ffprobe -v error -show_entries stream=codec_type,codec_name -of default=noprint_wrappers=1 input.mp4

# 查看输出文件编码信息
ffprobe -v error -show_entries stream=codec_type,codec_name -of default=noprint_wrappers=1 output.avi

通过条件:两条命令输出的视频流编码名称(如 h264)与音频流编码名称(如 aac)完全一致,且 output.avi 文件可正常播放,即判定转换成功且质量保持。

常见问题

  • 转换失败提示 "codec not supported":说明源视频编码(如 HEVC)不被 AVI 容器支持,需改用重新编码方案:ffmpeg -i input.mp4 -c:v libx264 -crf 18 -c:a aac output.avi(CRF 18 为视觉无损档位)。
  • 输出文件体积异常增大:AVI 容器开销略高于 MP4,体积增加 1%~3% 属正常现象,并非质量损失。
  • 播放器无法打开 AVI:部分现代播放器对 AVI 中的 H.264 支持有限,建议使用 VLC 或 MPC-HC 播放验证。