1138 字
约 3 分钟
0
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 个)
- 转封装 Remux(remux):不重新编码,只改容器(
.mp4/.mkv/.ts/.avi)。最快、无损。参数是-c copy。 - **转码 Transcode:**真正重编码(改编码器/码率/分辨率)。
-c:v libx265、-b:v、-s。慢、有损(除非设定无损)。 - 流 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 -version 和 ffprobe -version 都能输出版本即成功。
七、和 yt-dlp 的关系
- yt-dlp 后处理器调用 ffmpeg 做:合并分离音视频、remux 成目标容器、转码、写元数据/章节、抽帧缩略图。
- 相关代码:
yt_dlp/postprocessor/ffmpeg.py(FFmpegPostProcessor,内部用Popen.run执行ffmpeg -y ...)。 - yt-dlp 找不到 ffmpeg 时:不报错但很多后处理(尤其 DASH 合并)会跳过/失败。可用
--ffmpeg-location <路径>指定。 - 详见 StudyVault → [[Postprocessor-Subsystem]]。
[!tip] 一句话记忆:想看文件"是什么"用 [[ffprobe 技术入门]];想把文件"变成别的"就用 ffmpeg。
评论
0 条
还没有评论,先写一条吧。