ffmpeg命令和ffplay命令详解

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 是强大的多媒体调试工具,特别适合开发者测试编解码器、检查媒体文件问题或快速预览媒体内容。

相关推荐
开开心心就好1 小时前
本地文件搜索工具,双击Ctrl就能呼出搜索
java·服务器·前端·支持向量机·ffmpeg·音视频·模拟退火算法
OH_TPC2 天前
【鸿蒙优选三方库】@ohos/ffmpeg-kit:把 FFmpeg 的全部能量带进鸿蒙
华为·ffmpeg·harmonyos·鸿蒙
是jin奥2 天前
最新 FFmpeg 安装脚本:Linux x86_64
linux·运维·ffmpeg
骑着蜗牛撵大象3272 天前
用 Codex 批量做数字人商品口播视频:从分镜 JSON 到成片校验的流水线
java·ffmpeg·json·音视频·数字人·视频·codex
企业数字化笔记2 天前
视频加放大特写后音画不同步怎么办?OpenCV转场与FFmpeg音轨续接实战
opencv·ffmpeg·音视频
开开心心就好4 天前
课堂随机点名工具,绿色版免安装双击即用
java·服务器·前端·ffmpeg·音视频·perl·symfony
小鹿软件办公4 天前
不依赖 FFmpeg 也能录屏?ShareX 22 新增录屏等十余款新工具
ffmpeg·sharex·免费录屏工具
lll23526917794 天前
Android APP短视频音频提取,主流工具怎么选
ffmpeg·音视频
成都旺小宝科技5 天前
首访决策人没来,AI一客一策两天成交!
大数据·人工智能·机器学习·ffmpeg·语音识别
余槐i5 天前
加了Cookie yt-dlp仍报HTTP 403:3个容易漏的请求头差异
python·http·ffmpeg·开发工具·yt-dlp