FFmpeg:命令行音视频瑞士军刀

FreeGuideOnline 18阅读 2026-07-03

bash brew install ffmpeg


### Linux (Ubuntu/Debian)
```bash
sudo apt update
sudo apt install ffmpeg

安装完成后,在终端输入 ffmpeg -version 出现版本信息即表示成功。


FFmpeg 基本概念

在深入命令之前,先理解几个关键术语:

  • 输入文件(Input):待处理的原始媒体文件
  • 输出文件(Output):处理后的结果文件
  • 编码器/解码器(Codec):压缩与解压缩算法,如 H.264、AAC
  • 容器格式(Container):文件的包装格式,如 MP4、MKV、AVI
  • 流(Stream):文件中的不同轨道,例如视频流、音频流、字幕流
  • 滤镜(Filter):用于实时修改音视频数据的模块,如缩放、裁剪、调色

一次典型的 FFmpeg 命令结构如下:

ffmpeg [输入选项] -i 输入文件 [滤镜选项] [编码选项] 输出文件

查看媒体文件信息

处理文件前,可以用 ffprobeffmpeg 快速查看详细元数据:

ffprobe input.mp4

或更清晰的格式:

ffmpeg -i input.mp4 -hide_banner

这会显示容器格式、视频编码、分辨率、帧率、音频编码、比特率等信息,帮助判断下一步操作。


格式转换与编码

直接将 MKV 转为 MP4

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

-c copy 表示直接复制视频和音频流,不重新编码,速度极快,无质量损失。

指定视频编码为 H.264,音频编码为 AAC

ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4
  • -c:v 设定视频编码器
  • -c:a 设定音频编码器

转换音频文件为 MP3

ffmpeg -i input.wav -codec:a libmp3lame -q:a 2 output.mp3

-q:a 2 控制音频质量(0-9,数字越小质量越高,2 为高质量)。


视频尺寸与帧率调整

修改分辨率(缩放)

ffmpeg -i input.mp4 -vf scale=1280:720 output.mp4

-vf 表示使用视频滤镜,scale 滤镜可以指定宽高。若要保持宽高比,只设宽度或高度并写上 -1

ffmpeg -i input.mp4 -vf scale=1280:-1 output.mp4

调整帧率

ffmpeg -i input.mp4 -r 30 output.mp4

将输出帧率强制设为 30 fps。


音视频剪辑与合并

截取视频片段(不重新编码)

ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:15 -c copy output.mp4
  • -ss:开始时间
  • -to:结束时间
    时间格式为 HH:MM:SS秒数

更精确的无损剪切可利用关键帧:

ffmpeg -ss 10 -i input.mp4 -to 20 -c copy -avoid_negative_ts 1 output.mp4

从视频中提取音频

ffmpeg -i video.mp4 -vn -acodec copy audio.aac

-vn 表示不要视频流,仅输出音频。

合并多个视频文件

先创建一个文件列表 list.txt

file 'part1.mp4'
file 'part2.mp4'

然后执行:

ffmpeg -f concat -safe 0 -i list.txt -c copy output.mp4

添加水印与字幕

图片水印

ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4

logo.png 放置在视频左上角偏移 (10,10) 像素的位置。

文字水印

ffmpeg -i input.mp4 -vf "drawtext=text='Hello FFmpeg':fontcolor=white:fontsize=24:x=10:y=10" output.mp4

嵌入字幕文件

ffmpeg -i input.mp4 -vf subtitles=subtitle.srt output.mp4

此方法会将字幕硬编码进视频(不可取消)。若要封装为软字幕,需使用:

ffmpeg -i input.mp4 -i subtitle.srt -c copy -c:s mov_text -map 0 -map 1 output.mp4

常用滤镜效果

裁剪画面

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

例如从视频中心裁剪 640x480 区域:

ffmpeg -i input.mp4 -vf "crop=640:480:(in_w-640)/2:(in_h-480)/2" output.mp4

旋转与翻转

# 顺时针旋转90度
ffmpeg -i input.mp4 -vf "transpose=1" output.mp4
# 水平翻转
ffmpeg -i input.mp4 -vf "hflip" output.mp4

调整音量

ffmpeg -i input.mp4 -af "volume=0.5" output.mp4   # 音量减半
ffmpeg -i input.mp4 -af "volume=2.0" output.mp4   # 音量加倍

批量处理与自动化

FFmpeg 支持在脚本中批量处理文件,例如将所有 WAV 转换为 MP3(Linux/macOS):

for f in *.wav; do
  ffmpeg -i "$f" -q:a 2 "${f%.wav}.mp3"
done

Windows 批处理:

for %%f in (*.wav) do ffmpeg -i "%%f" -q:a 2 "%%~nf.mp3"