FFmpeg命令
FFmpeg 是一个强大的跨平台多媒体处理工具,用于录制、转换和流式传输音视频内容。以下是 FFmpeg 常用命令的分类介绍:
一、基础命令结构
ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ...
二、常用功能分类
1. 格式转换
# 视频转码
ffmpeg -i input.mp4 output.avi# 音频提取
ffmpeg -i video.mp4 -vn -acodec copy audio.aac# 视频转GIF
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" output.gif
2. 视频处理
# 裁剪视频
ffmpeg -i input.mp4 -ss 00:01:00 -t 10 -c copy output.mp4# 调整分辨率
ffmpeg -i input.mp4 -s 1280x720 output.mp4# 加速/减速视频
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" 2x_speed.mp4 # 2倍速
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" half_speed.mp4 # 0.5倍速
3. 音频处理
# 调整音量
ffmpeg -i audio.mp3 -af "volume=1.5" louder.mp3# 合并音视频
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4# 提取音频片段
ffmpeg -i audio.wav -ss 00:00:30 -t 10 clip.mp3
4. 高级编辑
# 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=10:10" output.mp4# 视频拼接
echo "file 'part1.mp4'\nfile 'part2.mp4'" > list.txt
ffmpeg -f concat -i list.txt -c copy merged.mp4# 添加字幕
ffmpeg -i video.mp4 -vf subtitles=sub.srt output.mp4
5. 流媒体操作
# 推RTMP流
ffmpeg -re -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream_key# 拉取直播流保存
ffmpeg -i rtmp://server/live/stream -c copy output.mp4# 屏幕录制 (Linux)
ffmpeg -f x11grab -s 1920x1080 -i :0.0 output.mp4
6. 编解码控制
# H.264编码
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4# HEVC编码
ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4# 无损压缩
ffmpeg -i input.mp4 -c:v libx264 -crf 0 lossless.mp4
三、常用选项详解
选项 | 说明 |
---|
-i | 指定输入文件 |
-c:v | 设置视频编解码器 (libx264, libx265, copy) |
-c:a | 设置音频编解码器 (aac, mp3, copy) |
-ss | 开始时间定位 (格式: HH:MM:SS) |
-t | 持续时间 (秒数或 HH:MM:SS) |
-vf | 视频滤镜 (scale, crop, overlay等) |
-af | 音频滤镜 (volume, atempo等) |
-r | 设置帧率 (如: -r 30) |
-b:v | 视频比特率 (如: -b:v 1M) |
-crf | 质量系数 (0-51, 值越小质量越高) |
-preset | 编码速度/质量平衡 (ultrafast, medium, veryslow) |
四、实用示例
1. 压缩视频
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset slow -c:a copy output.mp4
2. 提取关键帧
ffmpeg -i video.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr keyframes_%03d.jpg
3. 图片合成视频
ffmpeg -framerate 24 -i img_%03d.png -c:v libx264 -pix_fmt yuv420p output.mp4
4. 音频格式批量转换
for f in *.wav; do ffmpeg -i "$f" "${f%.wav}.mp3"; done
5. 硬件加速 (NVIDIA)
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
五、调试技巧
查看支持的编解码器:
ffmpeg -codecs
检查媒体信息:
ffmpeg -i input.mp4
测试编码速度:
ffmpeg -i input.mp4 -f null - # 输出到空设备测试处理速度
错误日志:
ffmpeg -i input.mp4 output.mp4 -report # 生成详细日志
FFplay命令
FFplay 是 FFmpeg 项目中的一个简易媒体播放器,主要用于测试和预览。它支持各种音视频格式和协议,并能展示详细的媒体信息。
基础命令结构
ffplay [options] input_file
常用选项
基本控制
选项 | 描述 |
---|
-x width | 设置显示窗口宽度 |
-y height | 设置显示窗口高度 |
-fs | 全屏模式 |
-an | 禁用音频 |
-vn | 禁用视频 |
-sn | 禁用字幕 |
-ss pos | 定位到指定时间位置 (HH:MM:SS) |
-t duration | 播放指定时长 |
-loop n | 循环播放次数 (0=无限循环) |
-autoexit | 播放结束后自动退出 |
-exitonkeydown | 按任意键退出 |
-exitonmousedown | 鼠标点击退出 |
播放控制
快捷键 | 功能 |
---|
空格 或 p | 暂停/继续 |
q 或 ESC | 退出 |
f | 全屏切换 |
m | 静音切换 |
9 | 音量减小 |
0 | 音量增大 |
→ | 快进10秒 |
← | 后退10秒 |
↑ | 快进1分钟 |
↓ | 后退1分钟 |
PageUp | 快进10分钟 |
PageDown | 后退10分钟 |
鼠标双击 | 全屏切换 |
显示信息
选项 | 描述 |
---|
-stats | 显示播放统计信息 |
-fast | 非标准化规范的多媒体兼容优化 |
-genpts | 生成pts |
-sync type | 设置主时钟同步类型 (audio/video/ext) |
-ast stream | 选择音频流 |
-vst stream | 选择视频流 |
-sst stream | 选择字幕流 |
-showmode mode | 设置显示模式 (0=视频, 1=波形, 2=频谱) |
高级处理
选项 | 描述 |
---|
-vf filtergraph | 设置视频滤镜 |
-af filtergraph | 设置音频滤镜 |
-codec:media codec | 强制使用特定解码器 |
-window_title title | 设置窗口标题 |
-left title | 设置窗口x坐标 |
-top title | 设置窗口y坐标 |
-nodisp | 禁用图形显示 (纯音频) |
实用示例
基础播放
# 播放本地视频文件
ffplay input.mp4# 播放网络流
ffplay rtmp://live.example.com/stream# 播放音频文件 (无视频窗口)
ffplay -nodisp audio.mp3
播放控制
# 从30秒开始播放
ffplay -ss 00:00:30 input.mp4# 循环播放3次
ffplay -loop 3 video.mp4# 播放10秒后自动退出
ffplay -t 10 input.mp4
显示设置
# 指定窗口大小
ffplay -x 800 -y 600 video.mp4# 全屏播放
ffplay -fs input.mp4# 显示播放统计信息
ffplay -stats movie.mkv
滤镜应用
# 旋转视频90度
ffplay -vf "transpose=1" input.mp4# 调整对比度和亮度
ffplay -vf "eq=contrast=1.5:brightness=0.05" video.mp4# 音频可视化(波形)
ffplay -showmode 1 audio.mp3
高级用法
# 播放原始YUV数据
ffplay -f rawvideo -video_size 1920x1080 -pixel_format yuv420p video.yuv# 播放原始PCM音频
ffplay -f s16le -ar 44100 -ac 2 audio.pcm# 强制使用特定解码器
ffplay -vcodec h264 -acodec aac input.mp4# 多路流选择
ffplay -ast 1 -vst 0 input.mkv # 播放第2个音频流和第1个视频流
调试与分析
# 显示帧信息
ffplay -debug vis_mb_type input.mp4# 显示时间戳
ffplay -vf "drawtext=text='%{pts}':x=20:y=20:fontsize=24:fontcolor=white" input.mp4# 显示运动向量
ffplay -flags2 +export_mvs input.mp4 -vf codecview=mv=pf+bf+bb
特殊源播放
# 播放测试视频
ffplay -f lavfi testsrc# 播放颜色条
ffplay -f lavfi smptebars# 播放正弦波音频
ffplay -f lavfi "sine=frequency=1000"
键盘控制参考
按键 | 功能 |
---|
a | 循环音频通道 |
v | 循环视频通道 |
t | 循环字幕通道 |
c | 循环节目 |
w | 循环视频滤镜 |
s | 逐帧播放 |
e | 逐帧后退 |
c | 随机跳转 |
/ | 音量减小 |
* | 音量增大 |
- | 减速播放 |
+ | 加速播放 |
; | 上一章 |
' | 下一章 |
FFplay 是强大的多媒体调试工具,特别适合开发者测试编解码器、检查媒体文件问题或快速预览媒体内容。