FFmpeg

获取视频 / 音频文件详细信息

1
ffmpeg -i input.mp4
  • 解释:显示输入文件的格式、时长、比特率、编解码器、分辨率等信息。如果文件无效,会报告错误。
    示例:ffmpeg -i video.mp4 输出如 “Duration: 00:05:00, bitrate: 1500 kb/s”。
  • 隐藏横幅信息
    1
    ffmpeg -i input.mp4 -hide_banner
    解释:与上类似,但隐藏 FFmpeg 的版本和配置横幅,只显示核心信息。
    示例:用于脚本中减少输出噪音。

格式转换

FFmpeg 最常见的用途是转换文件格式。

  • 视频格式转换
    1
    ffmpeg -i input.mp4 output.avi
    解释:将输入文件转换为指定输出格式。FFmpeg 会自动选择合适的编解码器。-i 指定输入文件。
    示例:从 MP4 转 AVI。
  • 音频格式转换
    1
    ffmpeg -i input.mp3 output.wav
    解释:类似视频转换,但针对音频。支持 MP3、WAV、AAC 等。
    示例:MP3 转 WAV。
  • 指定编解码器转换
    1
    ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mkv
    解释:-c:v 指定视频编解码器(libx264 为 H.264),-c:a 指定音频编解码器(aac 为 AAC)。
    示例:用于兼容特定设备。

视频旋转和翻转

  • 旋转视频
    1
    ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
  • 解释:-vf transpose=1 顺时针旋转 90°(0 = 正常,1=90°,2=180°,3=270°)。 示例:修复手机横拍视频。
  • 水平 / 垂直翻转
    1
    ffmpeg -i input.mp4 -vf "hflip" output.mp4
    (水平翻转)或 -vf “vflip”(垂直)。 解释:简单镜像效果,常用于修复倒置视频。

FFmpeg 修复视频命令

FFmpeg 可以用于修复损坏的视频文件,例如修复容器问题、索引错误、损坏帧或流不完整的情况。它通过复制流(无损)或重新编码来实现修复,但并非万能(严重损坏可能需要专业工具)。以下是常用修复命令,按场景分类。命令基于官方文档和社区实践,建议备份原文件后测试。

基本修复:修复容器或索引问题(无重新编码)

这种方法适合文件头 / 尾损坏或 MOOV 原子位置不对的情况,仅复制流而不改变内容,速度快。

1
ffmpeg -i input.mp4 -c copy output.mp4

解释:-i 指定输入文件,-c copy 复制所有流(视频、音频、字幕),修复容器(如 MP4 到 MP4)。如果文件有小错误,这能快速修复。
示例:修复损坏的 MP4 文件:ffmpeg -i damaged.mp4 -c copy repaired.mp4

忽略错误修复:

1
ffmpeg -err_detect ignore_err -i input.mp4 -c copy output.mp4

解释:-err_detect ignore_err 忽略解码错误,继续处理可挽救部分。适合流中有少量损坏帧的情况。
示例:处理有错误帧的视频。

移动 MOOV Atom

对于 MP4 文件无法预览 / 拖动进度条的问题(“moov atom not found” 或位于文件尾部),可以在复制流时修复:

1
ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4

解释:-movflags +faststart 会将元数据(moov atom)移动到文件开头,使视频支持流式播放和预览。

重新编码修复:处理严重损坏(如帧丢失或编码错误)

如果复制流失败,需要重新编码视频 / 音频,这会损失一些质量但能修复更多问题。

1
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4

解释:-c:v libx264 指定视频编码器(H.264),-c:a aac 指定音频编码器(AAC)。这会重新处理整个文件,跳过损坏部分。
示例:修复严重损坏的 MP4:ffmpeg -i corrupted.mp4 -c:v libx264 -c:a aac fixed.mp4