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 输入文件 [滤镜选项] [编码选项] 输出文件
查看媒体文件信息
处理文件前,可以用 ffprobe 或 ffmpeg 快速查看详细元数据:
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"