1138 字
约 3 分钟
1
ffmpeg 技术入门(中文)

ffmpeg 技术入门(中文)

ffmpeg 是开源的多媒体处理"瑞士军刀"——能解封装、解码、编码、转封装、转码、合并、裁剪、加字幕、加水印、抽帧、推流……几乎所有音视频处理它都能干。

本节与 ffprobe(见 [[ffprobe 技术入门]])配合使用:ffprobe 负责"看"文件是什么,ffmpeg 负责"改"文件成什么


一、它是什么 / 一句话

ffmpeg = 音视频"转换 + 加工"命令行工具。输入一段媒体,按你的要求输出另一段媒体。它是 yt-dlp 后处理器(FFmpegPostProcessor)的核心外部依赖。

二、什么时候用它(判断场景)

场景 用 ffmpeg? 为什么
把 mp4 转成 mkv(只换容器) ✅ 转封装 -c copy 秒级完成,无画质损失
把视频压小/换编码(mp4→h265) ✅ 转码 重编码占用 CPU/时间
合并分离的音轨+视频轨(DASH/HLS) ✅ 合并 -map + mux
从视频里抽音频(→mp3/m4a) ✅ 提取音频 -vn
给视频加硬字幕/软字幕、水印、裁剪、时长裁剪 ✅ 加工 -c:s-i logo.png-ss/-t-vf
只想"看看这个文件是什么格式/时长/编码" ❌ 用 ffprobe ffprobe 只读,不改文件
只想确认 ffmpeg 装没装、版本 ❌ 用 ffmpeg -version 见下方安装

[!tip] 判断口诀:要"改"文件 → ffmpeg;只看"文件信息" → ffprobe。

三、核心概念(3 个)

  1. 转封装 Remux(remux):不重新编码,只改容器(.mp4/.mkv/.ts/.avi)。最快、无损。参数是 -c copy
  2. **转码 Transcode:**真正重编码(改编码器/码率/分辨率)。-c:v libx265-b:v-s。慢、有损(除非设定无损)。
  3. 流 Stream(video/audio/subtitle/data):媒体里的各轨道。-map 精确挑选哪些流进入输出。

四、常用命令模板(可直接抄)

# 0) 查看版本 / 编解码器是否就绪
ffmpeg -version
ffmpeg -encoders | grep -i 'libx265\|libmp3lame'   # 看有没有某个编码器

# 1) 转封装:mp4 → mkv,不重编码(秒级、无损)★最常用
ffmpeg -i input.mp4 -c copy output.mkv

# 2) 提取音频为 mp3(丢弃视频轨)
ffmpeg -i input.mp4 -vn -c:a libmp3lame -b:a 192k output.mp3

# 3) A/V 分离文件合并成一个 mp4(DASH 常见)
ffmpeg -i video.mp4 -i audio.m4a -c copy output.mp4
#   更精细:指定哪路视频几路音频
ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c:v copy -c:a copy out.mp4

# 4) 转码压缩(h265,2Mbps,1080p)
ffmpeg -i input.mp4 -c:v libx265 -b:v 2M -s 1920x1080 -c:a copy output.mp4

# 5) 剪片段:从第 5 秒起,取 10 秒(快速seek用 -ss 前置)
ffmpeg -ss 5 -t 10 -i input.mp4 -c copy clip.mp4

# 6) 加软字幕(字幕作为独立轨道嵌入)
ffmpeg -i input.mp4 -i sub.srt -c copy -c:s mov_text output.mp4

[!warning] -c copy 常见坑:只换容器,若源编码不支持目标容器,会报错或无声/无画面——此时需转码(-c:v libx264 等)。

五、最常用参数速查

参数 含义
-i input 输入文件(可多个)
-c:v / -c:a / -c:s 指定视频/音频/字幕编码器
-c copy 不重编码直接拷贝该轨(转封装核心)
-map 挑选要进输出的流(0:v=第一个输入的视频轨)
-b:v / -b:a 视频/音频码率
-s 分辨率(宽x高)
-r 帧率
-ss / -t seek 起点 / 时长
-vf 视频滤镜(scale=...drawtext=...crop=...
-af 音频滤镜
-an / -vn 去掉音频 / 去掉视频
-y 覆盖输出文件不询问

六、安装方法(各平台)

# macOS(Homebrew)
brew install ffmpeg

# Linux(Debian/Ubuntu)
sudo apt install ffmpeg

# Windows
# ① 下载 https://www.gyan.dev/ffmpeg/builds/ 的 release-full build,解压后把 ...\bin 加入 PATH
# ② 或 winget: winget install "FFmpeg (Essentials Build)"
# ③ 或 choco install ffmpeg

装完验证:ffmpeg -versionffprobe -version 都能输出版本即成功。

七、和 yt-dlp 的关系

  • yt-dlp 后处理器调用 ffmpeg 做:合并分离音视频、remux 成目标容器、转码、写元数据/章节、抽帧缩略图
  • 相关代码:yt_dlp/postprocessor/ffmpeg.pyFFmpegPostProcessor,内部用 Popen.run 执行 ffmpeg -y ...)。
  • yt-dlp 找不到 ffmpeg 时:不报错但很多后处理(尤其 DASH 合并)会跳过/失败。可用 --ffmpeg-location <路径> 指定。
  • 详见 StudyVault → [[Postprocessor-Subsystem]]。

[!tip] 一句话记忆:想看文件"是什么"用 [[ffprobe 技术入门]];想把文件"变成别的"就用 ffmpeg。

ffmpeg 技术入门(中文)
http://clxhxhhr.top/posts/465/
作者
clxstart
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。