FFmpeg命令
FFmpeg 是一个强大的跨平台多媒体处理工具,用于录制、转换和流式传输音视频内容。以下是 FFmpeg 常用命令的分类介绍:
一、基础命令结构
bash
复制代码
ffmpeg [全局选项] {[输入文件选项] -i 输入文件} ... {[输出文件选项] 输出文件} ...
二、常用功能分类
1. 格式转换
bash
复制代码
# 视频转码
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. 视频处理
bash
复制代码
# 裁剪视频
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. 音频处理
bash
复制代码
# 调整音量
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. 高级编辑
bash
复制代码
# 添加水印
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. 流媒体操作
bash
复制代码
# 推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. 编解码控制
bash
复制代码
# 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. 压缩视频
bash
复制代码
ffmpeg -i input.mp4 -c:v libx264 -crf 28 -preset slow -c:a copy output.mp4
2. 提取关键帧
bash
复制代码
ffmpeg -i video.mp4 -vf "select=eq(pict_type\,I)" -vsync vfr keyframes_%03d.jpg
3. 图片合成视频
bash
复制代码
ffmpeg -framerate 24 -i img_%03d.png -c:v libx264 -pix_fmt yuv420p output.mp4
4. 音频格式批量转换
bash
复制代码
for f in *.wav; do ffmpeg -i "$f" "${f%.wav}.mp3"; done
5. 硬件加速 (NVIDIA)
bash
复制代码
ffmpeg -hwaccel cuda -i input.mp4 -c:v h264_nvenc output.mp4
五、调试技巧
查看支持的编解码器:
bash
复制代码
ffmpeg -codecs
检查媒体信息:
bash
复制代码
ffmpeg -i input.mp4
测试编码速度:
bash
复制代码
ffmpeg -i input.mp4 -f null - # 输出到空设备测试处理速度
错误日志:
bash
复制代码
ffmpeg -i input.mp4 output.mp4 -report # 生成详细日志
FFplay命令
FFplay 是 FFmpeg 项目中的一个简易媒体播放器,主要用于测试和预览。它支持各种音视频格式和协议,并能展示详细的媒体信息。
基础命令结构
bash
复制代码
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 |
禁用图形显示 (纯音频) |
实用示例
基础播放
bash
复制代码
# 播放本地视频文件
ffplay input.mp4
# 播放网络流
ffplay rtmp://live.example.com/stream
# 播放音频文件 (无视频窗口)
ffplay -nodisp audio.mp3
播放控制
bash
复制代码
# 从30秒开始播放
ffplay -ss 00:00:30 input.mp4
# 循环播放3次
ffplay -loop 3 video.mp4
# 播放10秒后自动退出
ffplay -t 10 input.mp4
显示设置
bash
复制代码
# 指定窗口大小
ffplay -x 800 -y 600 video.mp4
# 全屏播放
ffplay -fs input.mp4
# 显示播放统计信息
ffplay -stats movie.mkv
滤镜应用
bash
复制代码
# 旋转视频90度
ffplay -vf "transpose=1" input.mp4
# 调整对比度和亮度
ffplay -vf "eq=contrast=1.5:brightness=0.05" video.mp4
# 音频可视化(波形)
ffplay -showmode 1 audio.mp3
高级用法
bash
复制代码
# 播放原始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个视频流
调试与分析
bash
复制代码
# 显示帧信息
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
特殊源播放
bash
复制代码
# 播放测试视频
ffplay -f lavfi testsrc
# 播放颜色条
ffplay -f lavfi smptebars
# 播放正弦波音频
ffplay -f lavfi "sine=frequency=1000"
键盘控制参考
按键 |
功能 |
a |
循环音频通道 |
v |
循环视频通道 |
t |
循环字幕通道 |
c |
循环节目 |
w |
循环视频滤镜 |
s |
逐帧播放 |
e |
逐帧后退 |
c |
随机跳转 |
/ |
音量减小 |
* |
音量增大 |
- |
减速播放 |
+ |
加速播放 |
; |
上一章 |
' |
下一章 |
FFplay 是强大的多媒体调试工具,特别适合开发者测试编解码器、检查媒体文件问题或快速预览媒体内容。