跳转至

FFmpeg 音视频处理

一句话概述:FFmpeg 是音视频处理的命令行瑞士军刀,能转格式、剪辑、合并、压缩、提取音频,几乎所有视频软件底层都用它。

核心知识点

概念白话解释
FFmpeg音视频处理器 = 命令行视频编辑器
Codec编解码器 = 视频的压缩/解压方式(H.264/H.265/VP9)
Container容器格式 = 视频文件格式(mp4/mkv/avi)
Bitrate比特率 = 视频质量/文件大小的关键参数
Stream流 = 视频里的轨道(视频流/音频流/字幕流)
Filter滤镜 = 视频处理效果(缩放/裁剪/旋转等)

安装

# Linux
sudo apt install ffmpeg                                # Ubuntu/Debian

# macOS
brew install ffmpeg                                    # Homebrew

# 验证
ffmpeg -version                                       # 查看版本
ffmpeg -codecs                                        # 列出支持的编解码器
ffmpeg -formats                                       # 列出支持的格式

常用操作

# === 格式转换 ===
ffmpeg -i input.avi output.mp4                         # AVI → MP4
ffmpeg -i input.mkv -c copy output.mp4                 # MKV → MP4(不重编码,秒转)
ffmpeg -i input.mov -c:v libx264 -c:a aac output.mp4  # MOV → MP4(H.264+AAC)

# === 压缩视频 ===
ffmpeg -i input.mp4 -crf 28 output.mp4                 # 压缩(CRF 越大=越小=越糊)
# CRF 参考值:18=高质量 23=默认 28=小文件 35=很糊
ffmpeg -i input.mp4 -vf scale=1280:720 -crf 23 small.mp4  # 缩小分辨率+压缩

# === 提取音频 ===
ffmpeg -i video.mp4 -vn -acodec mp3 audio.mp3          # 提取为 MP3
ffmpeg -i video.mp4 -vn -acodec copy audio.aac         # 提取原始音频(不重编码)

# === 剪辑 ===
ffmpeg -i input.mp4 -ss 00:01:30 -t 00:00:45 clip.mp4  # 从1:30开始剪45秒
ffmpeg -i input.mp4 -ss 00:01:30 -to 00:02:15 clip.mp4 # 从1:30到2:15

# === 合并视频 ===
# 先创建文件列表
echo "file 'part1.mp4'" > list.txt                     # 创建列表
echo "file 'part2.mp4'" >> list.txt
ffmpeg -f concat -safe 0 -i list.txt -c copy merged.mp4 # 合并(不重编码)

# === 截图 ===
ffmpeg -i video.mp4 -ss 00:00:30 -frames:v 1 thumb.jpg # 截取第30秒一帧
ffmpeg -i video.mp4 -vf fps=1 frames/frame_%04d.jpg    # 每秒截1帧

# === GIF ===
ffmpeg -i video.mp4 -vf "fps=10,scale=480:-1" output.gif # 转 GIF

# === 添加字幕 ===
ffmpeg -i video.mp4 -vf subtitles=sub.srt output.mp4   # 烧录字幕

# === 调整速度 ===
ffmpeg -i input.mp4 -filter:v "setpts=0.5*PTS" fast.mp4 # 2倍速
ffmpeg -i input.mp4 -filter:v "setpts=2.0*PTS" slow.mp4 # 0.5倍速

查看信息

# 查看视频详细信息
ffprobe input.mp4                                      # 简要信息
ffprobe -v quiet -print_format json -show_streams input.mp4  # JSON 格式详情

常见报错

报错原因解决
Unknown encoder编解码器未编译检查 ffmpeg -codecs,安装完整版
Invalid data found输入文件损坏检查文件完整性
Output file is empty参数错误检查 -ss/-t 时间格式
Permission denied输出路径无权限检查目录权限
Avi很大没指定编码-c:v libx264 -crf 23

速查表

# 基本语法
ffmpeg -i <input> [options] <output>

# 常用选项
# -i          输入文件
# -c copy     不重编码(直接复制流)
# -c:v        视频编码器(libx264/libx265/libvpx-vp9)
# -c:a        音频编码器(aac/mp3/copy)
# -crf N      质量(18-28,越小越好)
# -b:v 2M     视频比特率
# -vf         视频滤镜
# -af         音频滤镜
# -ss         开始时间
# -t          持续时间
# -to         结束时间
# -vn         去掉视频
# -an         去掉音频
# -y          覆盖输出文件

# 常用滤镜 (-vf)
# scale=1280:720     缩放
# crop=640:480:0:0   裁剪
# rotate=PI/2        旋转90度
# fps=30             设置帧率
# subtitles=sub.srt  烧字幕