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

5.2 KiB
Executable File
Raw Permalink Blame History

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

实战小练习建议

  1. 找一个视频,练习截取前 10 秒 + 转 mp3(练 -ss/-t/-c copy);
  2. 试着抽 1 帧做成封面图(练 fps/-frames:v);
  3. 给视频加一行中文文字水印(练 drawtext);
  4. 把 2 段视频拼接起来(练 concat)。

踩到报错别怕,把最后的报错行发我,我帮你解析。更多高阶玩法(绿幕抠像、去抖、色彩调整)也可以随时问我。