Linux 下 FFmpeg 命令基础使用指南:从组件认知到实操命令
概述
FFmpeg 是一款开源跨平台的音视频处理工具集,凭借强大的编解码、格式转换、流媒体处理能力,成为 Linux 环境下音视频开发、运维的核心工具。它不仅支持几乎所有主流音视频格式(如 MP4、FLV、MKV、MP3 等),还能通过命令行灵活实现 “录制 → 转换 → 剪辑 → 封装” 全流程操作,广泛应用于视频网站、直播推流、本地音视频处理等场景。
FFmpeg 并非单一工具,而是由命令行应用程序和核心函数库两部分组成,各组件分工明确:
1. 核心命令行应用程序
- ffmpeg:核心转换工具,负责音视频文件的格式转换、编解码、剪辑、滤镜处理等核心操作;
- ffplay:轻量级音视频播放器,基于 SDL 库开发,可直接播放本地文件或网络流,常用于快速验证处理结果;
- ffprobe:媒体文件信息分析工具,能提取文件的编码格式、分辨率、帧率、比特率、元数据等详细信息(类似 MediaInfo 功能)。
2. 底层函数库(供开发调用)
- libavcodec:FFmpeg 核心编解码库,包含上千种音视频编解码器(如 H.264/HEVC 视频编码、AAC/MP3 音频编码);
- libavformat:封装 / 解封装库(muxer/demuxer),负责处理音视频容器格式(如将 H.264 视频 + AAC 音频封装为 MP4);
- libavutil:通用工具库,提供数学计算、内存管理、日志处理等基础功能;
- libswscale:视频缩放与像素格式转换库(如将 1080P 视频缩放到 720P,或 YUV 格式转 RGB);
- libswresample:音频重采样库,负责音频采样率、声道数、格式转换(如 44.1kHz 转 48kHz,立体声转单声道);
- libavfilter:音视频滤镜库,支持添加特效(如加水印、调亮度、音频降噪);
- libpostproc:视频后处理库,提供去交错、降噪等画质优化功能。
一、FFmpeg 基础:查看信息与环境配置
在使用 FFmpeg 处理音视频前,需先掌握 “查看工具信息”“验证支持格式” 等基础命令,确保工具环境符合需求。
1. 查看帮助信息
根据需求获取不同详细程度的帮助文档,新手可从基础帮助入手:
ffmpeg -h # 基础帮助:显示核心命令与常用参数(推荐新手)
ffmpeg -h long # 详细帮助:包含更多参数说明与高级选项
ffmpeg -h full # 完整帮助:显示所有支持的参数、滤镜、编解码器(适合进阶用户)
2. 查看特定模块的支持信息
FFmpeg 支持的格式、编解码器、滤镜等模块可单独查询,格式为 ffmpeg -h type=name,常见场景如下:
# 查看指定封装格式(如 FLV)的详细信息(支持的参数、编码格式等)
ffmpeg -h muxer=flv
# 查看指定滤镜(如音频变速 atempo)的用法
ffmpeg -h filter=atempo
# 查看指定编码器(如 H.264 编码器 libx264)的参数
ffmpeg -h encoder=libx264
# 查看指定解码器(如 AAC 解码器 aac)的信息
ffmpeg -h decoder=aac
3. 查看版本与编译配置
确认 FFmpeg 版本及编译时启用的功能(如是否支持某编解码器、协议):
ffmpeg -version # 查看 FFmpeg 版本、编译日期、依赖库版本
ffmpeg -buildconf # 查看编译配置:启用的编解码器、协议、滤镜等(排查功能缺失问题)
4. 隐藏启动 Banner(精简输出)
FFmpeg 启动时默认显示版本、编译信息等 Banner,若需精简输出(如脚本中使用),可隐藏 Banner:
ffmpeg -hide_banner # 仅隐藏 Banner,不影响其他输出信息
5. 查看支持的格式 / 编解码器 / 协议
确认 FFmpeg 是否支持目标音视频格式、编解码器或网络协议,避免处理时出错:
# 显示所有支持的格式(包含封装/解封装,如 MP4、FLV、MKV)
ffmpeg -formats
# 显示所有支持的封装器(muxer:将音视频流封装为容器格式)
ffmpeg -muxers
# 显示所有支持的解封装器(demuxer:从容器中提取音视频流)
ffmpeg -demuxers
# 显示所有支持的编解码器(包含编码器+解码器,如 H.264、AAC)
ffmpeg -codecs
# 显示所有支持的编码器(仅编码功能,如 libx264、aac)
ffmpeg -encoders
# 显示所有支持的解码器(仅解码功能,如 h264、mp3)
ffmpeg -decoders
# 显示所有支持的比特流过滤器(处理音视频流的原始数据,如 h264_mp4toannexb)
ffmpeg -bsfs
# 显示所有支持的网络协议(如 http、rtmp、rtsp,用于网络流处理)
ffmpeg -protocols
# 显示所有支持的音视频滤镜(如 overlay 加水印、volume 调音量)
ffmpeg -filters
# 显示所有支持的像素格式(如 yuv420p、rgb24,视频处理常用)
ffmpeg -pixfmts
# 显示标准声道布局(如 stereo 立体声、5.1 环绕声)
ffmpeg -layouts
# 显示所有支持的音频采样格式(如 s16p、fltp,音频处理常用)
ffmpeg -sample_fmts
# 显示所有支持的颜色名称(用于滤镜中设置颜色,如 red、#FF0000)
ffmpeg -colors
二、FFmpeg 核心参数解析
FFmpeg 命令的基本格式为:
ffmpeg [全局参数] {[输入文件参数] -i 输入路径} ... {[输出文件参数] 输出路径} ...
其中 “输入” 可支持多个文件,“输出” 可指定多个结果,核心参数按功能分为主要参数、影像参数、声音参数三类,以下为常用参数详解。
1. 主要参数(控制整体流程)
参数 | 作用说明 | 使用示例 |
---|---|---|
-i <input_url> | 指定输入文件 / 流路径(必选参数,可多个输入) | -i input.mp4(本地文件)、-i rtmp://xxx/live/stream(网络流) |
-f <format> | 指定输出格式(可选,若不指定则按输出文件名后缀自动识别) | -f flv output.flv(强制输出为 FLV 格式) |
-y | 若输出文件已存在,直接覆盖(避免手动确认,适合脚本) | ffmpeg -i input.mp4 -y output.mp4 |
-n | 若输出文件已存在,不覆盖,而是在文件名后添加数字后缀(如 input_1.mp4) | ffmpeg -i input.mp4 -n output.mp4 |
-fs <size> | 当输出文件大小超过指定值时,停止转换(单位:字节,支持 K/M/G) | -fs 100M(文件超过 100MB 时停止) |
-t <duration> | 指定输出文件的持续时间(单位:秒,支持 hh:mm:ss.ms 格式) | -t 60(输出 60 秒)、-t 00:01:30.5(输出 1 分 30.5 秒) |
-ss <time> | 从输入文件的指定时间点开始处理(“seek” 操作,单位同上) | -ss 10(从第 10 秒开始)、-ss 00:00:05(从第 5 秒开始) |
-ss <time> -t <duration> | 组合使用:从 -ss 时间点开始,提取持续 -t 的内容 | ffmpeg -i input.mp4 -ss 00:00:01 -t 00:00:10 -c copy output.mp4(从第 1 秒开始,提取 10 秒内容,到第 11 秒结束) |
-title <title> | 设置输出文件的标题元数据 | -title "My Video" |
-timestamp <time> | 设置输出文件的时间戳(格式:YYYY-MM-DD hh:mm:ss) | -timestamp "2024-05-20 14:30:00" |
-vsync <mode> | 控制音视频同步(调整帧率使音视频时间对齐) | -vsync vfr(可变帧率,适合高质量输出)、-vsync cfr(恒定帧率) |
-c[:stream_type] <codec> | 指定编解码器(stream_type 可选:v 视频、a 音频、s 字幕,默认全流) | -c:v libx264(视频用 H.264 编码)、-c:a aac(音频用 AAC 编码)、-c copy(不重新编码,直接复制流,速度最快) |
-metadata <key=value> | 修改输出文件的元数据(如作者、版权信息) | -metadata author="John" -metadata copyright="2024" |
2. 影像参数(控制视频流)
参数 | 简写 / 别名 | 作用说明 | 使用示例 |
---|---|---|---|
-b:v <bitrate> | -vb | 设置视频比特率(影响视频画质与文件大小) | -b:v 2000k(2000 kbps)、-vb 1.5M(1.5 Mbps) |
-r <fps> | - | 设置视频帧率(单位:帧 / 秒,影响画面流畅度) | -r 25(25 FPS,适合 PAL 制式)、-r 30(30 FPS,适合 NTSC 制式) |
-s <width>x<height> | - | 设置视频分辨率(宽 × 高) | -s 1920x1080(1080P)、-s 1280x720(720P) |
-aspect <ratio> | - | 设置视频宽高比(如 16:9、4:3) | -aspect 16:9(宽屏)、-aspect 4:3(标清) |
-vn | - | 不处理视频流(仅保留音频,适合提取音频) | ffmpeg -i input.mp4 -vn output.mp3(提取 MP3 音频) |
-vcodec <codec> | -c:v | 指定视频编解码器(同 -c:v,优先级低于 -c:v) | -vcodec libx265(视频用 H.265 编码) |
3. 声音参数(控制音频流)
参数 | 简写 / 别名 | 作用说明 | 使用示例 |
---|---|---|---|
-b:a <bitrate> | -ab | 设置音频比特率(影响音频质量) | -b:a 128k(128 kbps,标准音质)、-ab 320k(320 kbps,高质量) |
-ar <sample_rate> | - | 设置音频采样率(单位:Hz,常用 44100、48000) | -ar 44100(CD 音质)、-ar 48000(专业音频) |
-ac <channels> | - | 设置音频声道数(1 单声道、2 立体声、6 5.1 环绕声) | -ac 1(单声道)、-ac 2(立体声) |
-acodec <codec> | -c:a | 指定音频编解码器(同 -c:a,优先级低于 -c:a) | -acodec mp3(音频用 MP3 编码) |
-an | - | 不处理音频流(仅保留视频,适合提取视频) | ffmpeg -i input.mp4 -an output_video.mp4(提取无声视频) |
-vol <volume> | - | 设置音频音量(256 为标准音量,倍数关系) | -vol 512(2 倍音量)、-vol 128(0.5 倍音量) |
三、关键注意事项(避坑指南)
- 比特率单位差异
不同 FFmpeg 版本中,-b:v(视频比特率)和 -b:a(音频比特率)的单位可能不同:
- 部分版本默认单位为 bits/sec(比特 / 秒):指定 64 kbps 需写 -b:a 64k(k 代表 1000 bits/sec);
- 旧版本可能默认单位为 kbits/sec(千比特 / 秒):指定 64 kbps 需写 -b:a 64。
验证方式:执行 ffmpeg -h | grep -i "bitrate",查看参数说明中的单位。
- 编解码器名称兼容性
不同 FFmpeg 编译版本支持的编解码器名称可能不同:
- 例如 AAC 编码:部分版本支持 aac(内置编码器),部分版本需用 libfaac(外部库);
- 例如 H.264 编码:通常用 libx264(外部库),部分版本支持 h264(内置)。
确认方式:执行 ffmpeg -encoders | grep -i "aac" 或 ffmpeg -encoders | grep -i "h264",查看当前版本支持的编解码器名称。
- “-ss” 参数的位置影响效率
-ss(起始时间)放在 -i 前或后,效率差异极大:
- 高效方式(推荐):ffmpeg -ss 10 -i input.mp4 output.mp4(先定位到第 10 秒,再读取文件,速度快);
- 精确方式:ffmpeg -i input.mp4 -ss 10 output.mp4(先读取完整文件,再截取第 10 秒后内容,速度慢但时间更精确)。
日常使用优先选择 “-ss 在前” 的方式,若需精确到毫秒级,再用 “-ss 在后”。
总结
FFmpeg 命令的核心逻辑是 “指定输入 → 配置参数 → 定义输出”,本文整理的基础命令与参数覆盖了 “查看信息”“格式转换”“音视频分离” 等常见场景。新手入门时,建议从简单需求(如提取音频、转换格式)开始练习,逐步熟悉编解码器、比特率、帧率等核心概念;进阶阶段可探索滤镜(如加水印、剪辑)、网络流处理(如直播推流)等高级功能。
若需进一步学习,可参考 FFmpeg 官方文档或社区教程,结合实际需求反复实操,才能真正掌握这款强大的音视频工具。