Files
StudyDiary-20261009/02-学习笔记/ffmpeg视频处理速查.md
CrazyJasonwell e97be9ac8c commit all
2026-10-09 22:06:40 +08:00

160 lines
5.2 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ffmpeg 视频处理速查(学习用)
> ffmpeg 是命令行音视频处理神器,一个命令搞定转码、剪辑、拼接、加水印、加字幕等。
> 安装:`sudo apt install ffmpeg`(Ubuntu/Debian)
> 查看帮助:`ffmpeg -h`、`ffmpeg -filters`(所有可用滤镜)
---
## 0. 先记住几个核心参数
| 参数 | 含义 | 示例 |
|---|---|---|
| `-i 文件` | 输入文件(可有多个) | `-i a.mp4` |
| `-ss 秒` | 从第几秒开始(跳转) | `-ss 00:01:30` |
| `-t 秒` | 持续时长 | `-t 10` 取10秒 |
| `-to 时间` | 到某个时间点结束 | `-to 00:02:00` |
| `-c:v 编码` | 视频编码(`copy`=不重编码,`libx264`=H.264) | `-c:v copy` |
| `-c:a 编码` | 音频编码(`aac`、`libmp3lame`、`copy`) | `-c:a aac` |
| `-crf 数值` | H.264 质量(0-51,越小越清晰文件越大,常用 18-23) | `-crf 20` |
| `-preset` | 编码速度/压缩率权衡 | `medium`、`fast`、`slow` |
| `-vf` | 视频滤镜(filter)链 | `-vf scale=1280:720` |
**黄金法则**:只是剪切/换封装/抽流,用 `-c copy`(秒完成、不损失画质);要改分辨率/画质/滤镜,才重编码。
---
## 1. 格式转换 / 换封装
```bash
# 视频转成 MP4(H.264 + AAC,兼容性最好)
ffmpeg -i input.mkv -c:v libx264 -crf 20 -preset medium -c:a aac output.mp4
# 只看视频不看编码:秒换容器(.mkv -> .mp4)
ffmpeg -i input.mkv -c copy output.mp4
# 只提取音频(视频不要,转成 mp3)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3
```
## 2. 截取片段(剪辑)
```bash
# 取 00:01:30 到 00:03:00 的 90 秒,重编码
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:03:00 -c:v libx264 -crf 20 -c:a aac clip.mp4
# 取前 10 秒,用 copy 秒完成(不重编码,速度极快)
ffmpeg -i input.mp4 -ss 0 -t 10 -c copy clip.mp4
```
> 注意:用 `copy` 时 `-ss` 放在 `-i` 前(快进式)比放在 `-i` 后(逐帧解码)快得多,但可能不够精确到帧。精确剪辑用 `-ss` 放 `-i` 后 + 重编码。
## 3. 拼接多个视频
```bash
# 方法一:先写一个文本清单 files.txt
# file '1.mp4'
# file '2.mp4'
ffmpeg -f concat -safe 0 -i files.txt -c copy merged.mp4
# 方法二:同一编码/规格直接用 concat 滤镜(需重编码,格式不一时用)
ffmpeg -i 1.mp4 -i 2.mp4 -filter_complex "[0:v][0:a][1:v][1:a]concat=n=2:v=1:a=1" -c:v libx264 -c:a aac merged.mp4
```
## 4. 缩放 / 改分辨率
```bash
# 缩放成 1280x720,保持画质
ffmpeg -i input.mp4 -vf scale=1280:720 -c:v libx264 -crf 20 -c:a aac output.mp4
# 等比缩放(宽为 1280,高度自动按比例)
ffmpeg -i input.mp4 -vf scale=1280:-2 -c:v libx264 -crf 20 -c:a aac output.mp4
# -2 表示保持比例并让高度为偶数(H.264 要求偶数分辨率)
```
## 5. 抽帧(视频转图片,用于预览/做封面)
```bash
# 每秒抽 1 帧
ffmpeg -i input.mp4 -vf fps=1 frame_%03d.png
# 抽指定时刻的一帧(第 5 秒)
ffmpeg -ss 5 -i input.mp4 -frames:v 1 cover.png
```
## 6. 加水印
```bash
# 图片水印(logo.png,放在右上角)
ffmpeg -i input.mp4 -i logo.png -filter_complex \
"[1:v]scale=150:150[logo];[0:v][logo]overlay=W-w-10:10" \
-c:v libx264 -c:a aac output.mp4
# 文字水印(drawtext 滤镜,注意文字里的冒号要转义)
ffmpeg -i input.mp4 -vf "drawtext=text='Doubao':fontsize=48:fontcolor=white:x=10:y=10" \
-c:v libx264 -c:a aac output.mp4
```
## 7. 加字幕(烧录进画面)
```bash
# subtitles 滤镜把 .srt 字幕"烧"进视频(变成画面的一部分)
ffmpeg -i input.mp4 -vf "subtitles=sub.srt" -c:v libx264 -c:a aac output.mp4
```
## 8. 合并音视频 / 更换配音
```bash
# 把 video.mp4 的画面 + audio.mp3 的声音合到一起
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac -shortest output.mp4
# 去掉原视频声音,换成新的音轨
ffmpeg -i video.mp4 -i new_audio.mp3 -map 0:v -map 1:a -c:v copy -c:a aac output.mp4
```
## 9. 变速(快放 / 慢放)
```bash
# 1.5 倍速(setpts 调视频时间,atempo 调音频音调不失真)
ffmpeg -i input.mp4 -vf "setpts=0.667*PTS" -af "atempo=1.5" -c:v libx264 -c:a aac fast.mp4
# 0.5 倍慢放
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" -c:v libx264 -c:a aac slow.mp4
```
## 10. 转 GIF
```bash
# 截前 5 秒转 GIF,128 宽、10 帧/秒
ffmpeg -i input.mp4 -t 5 -vf "fps=10,scale=128:-1" -loop 0 out.gif
```
## 11. 图片合成视频(幻灯片)
```bash
# 每张图显示 2 秒,串成 720p 视频
ffmpeg -framerate 1 -pattern_type glob -i 'img_*.jpg' \
-vf "scale=1280:720,fps=2" -c:v libx264 -c:a aac slideshow.mp4
```
## 12. 视频静音 / 音量调整
```bash
# 去掉所有声音
ffmpeg -i input.mp4 -an output.mp4
# 音量调到 50%
ffmpeg -i input.mp4 -af "volume=0.5" -c:v copy output.mp4
```
---
## 实战小练习建议
1. 找一个视频,练习**截取前 10 秒 + 转 mp3**(练 `-ss/-t/-c copy`);
2. 试着**抽 1 帧做成封面图**(练 `fps`/`-frames:v`);
3. 给视频**加一行中文文字水印**(练 `drawtext`);
4. 把 2 段视频**拼接**起来(练 `concat`)。
踩到报错别怕,把最后的报错行发我,我帮你解析。更多高阶玩法(绿幕抠像、去抖、色彩调整)也可以随时问我。