5.2 KiB
Executable File
5.2 KiB
Executable File
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. 格式转换 / 换封装
# 视频转成 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. 截取片段(剪辑)
# 取 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. 拼接多个视频
# 方法一:先写一个文本清单 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. 缩放 / 改分辨率
# 缩放成 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. 抽帧(视频转图片,用于预览/做封面)
# 每秒抽 1 帧
ffmpeg -i input.mp4 -vf fps=1 frame_%03d.png
# 抽指定时刻的一帧(第 5 秒)
ffmpeg -ss 5 -i input.mp4 -frames:v 1 cover.png
6. 加水印
# 图片水印(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. 加字幕(烧录进画面)
# subtitles 滤镜把 .srt 字幕"烧"进视频(变成画面的一部分)
ffmpeg -i input.mp4 -vf "subtitles=sub.srt" -c:v libx264 -c:a aac output.mp4
8. 合并音视频 / 更换配音
# 把 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. 变速(快放 / 慢放)
# 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
# 截前 5 秒转 GIF,128 宽、10 帧/秒
ffmpeg -i input.mp4 -t 5 -vf "fps=10,scale=128:-1" -loop 0 out.gif
11. 图片合成视频(幻灯片)
# 每张图显示 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. 视频静音 / 音量调整
# 去掉所有声音
ffmpeg -i input.mp4 -an output.mp4
# 音量调到 50%
ffmpeg -i input.mp4 -af "volume=0.5" -c:v copy output.mp4
实战小练习建议
- 找一个视频,练习截取前 10 秒 + 转 mp3(练
-ss/-t/-c copy); - 试着抽 1 帧做成封面图(练
fps/-frames:v); - 给视频加一行中文文字水印(练
drawtext); - 把 2 段视频拼接起来(练
concat)。
踩到报错别怕,把最后的报错行发我,我帮你解析。更多高阶玩法(绿幕抠像、去抖、色彩调整)也可以随时问我。