FFmpeg 目录格式
FFmpeg 目录格式
FFmpeg 遵循的是GNU自由软件协议,它包含3个协议条款
| 协议 | 说明 |
|---|---|
| GPL | GNU通用公共许可证bai(GNU General Public License) |
| LGPL | GNU较宽松的公共许可证 (GNU Lesser General Public License) ,旧称 GNU Library General Public License (GNU 库通用公共许可证) |
| GFDL | GNU自由文档许可证(GNU Free Documentation License )的缩写形式 |
目录形式如下
| 目录 | 用途 |
|---|---|
| bin | 包含其可执行文件(ffmpeg、ffplay、ffprobe) |
| doc | 帮助文档 |
| presets | 预设的默认参数 |
| LICENSE.txt | 软件许可证说明 |
| README.txt | 编译配置、及引用库说明 |

需要在命令行中,先进入该目录,才能使用对应的命令
| 可执行程序 | 用途 |
|---|---|
| ffmpeg | 用于格式转换 |
| ffplay | 是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示 |
| ffprobe | 主要用来查看多媒体文件的信息 |

如果对相关命令的参数不是很熟悉,可以在该目录打开相应的文档查看英文版的详细帮助

ffprobe
ffprobe:用来查看媒体文件头信息的工具
-
查看基本信息
ffprobe "D:\Downloads\庄心妍 真的不容易.mp3"

-
展示格式信息
ffprobe -show_format "D:\Downloads\庄心妍 真的不容易.mp3"

-
打印 json 格式的流信息
ffprobe -print_format json -show_streams "D:\Downloads\庄心妍 真的不容易.mp3"

ffplay
ffplay 是以 FFmpeg 框架为基础,外加跨平台多媒体库 libSDL 来渲染音视频的多媒体文件播放器
-
播放音视频
ffplay "D:\Downloads\庄心妍 真的不容易.mp3"
这是一种 RDFT(实数离散傅里叶变换) 的显示模式

-
禁音播放
`ffplay an “D:\Downloads\可惜不是你.mp4”

打印元素含义
ffplay 在播放时,最后一行会有一个不断跳动刷新的数字
源码里对这段数字的打印是这样的
av_log(NULL, AV_LOG_INFO,
"%7.2f %s:%7.3f fd=%4d aq=%5dKB vq=%5dKB sq=%5dB f=%"PRId64"/%"PRId64" \r",
get_master_clock(is),
(is->audio_st && is->video_st) ? "A-V" : (is->video_st ? "M-V" : (is->audio_st ? "M-A" : " ")),
av_diff,
is->frame_drops_early + is->frame_drops_late,
aqsize / 1024,
vqsize / 1024,
sqsize,
is->video_st ? is->viddec.avctx->pts_correction_num_faulty_dts : 0,
is->video_st ? is->viddec.avctx->pts_correction_num_faulty_pts : 0)

- 60.41 表示从开始播放到现在的时间(单位:秒)
- A-V表示既有音频流又有视频流;M-V表示只有视频流;M-A表示只有音频流
- 0.000 表示音视频时间戳的差
- fd(frame dropped)丢帧数量
- aq 当前音频帧大小
- vq 当前视频帧大小
- sq 当前字幕帧大小
- f 时间戳错误矫正率(timestamp error correction rate)
ffplay 快捷键
播放音视频文件时,可以通过下列快捷键进行控制
| 快捷键 | 作用 |
|---|---|
| q,ESC | 退出 |
| f,双击鼠标左键 | 全屏 / 退出全屏 |
| p,空格 | 暂停 / 恢复 |
| w | 显示音频波形 |
| s | 逐帧显示(p,空格恢复) |
| 左 / 右方向键 | 后退 / 前进 10s |
| 上 / 下方向键 | 后退 / 前进1min |
| pageDown / pageUp | 后退 / 前进 10min |
| 点击鼠标右键 | 跳转到指定位置(根据鼠标位置相对屏幕宽度计算) |
ffplay 预置参数(要带 - 作前缀)
例如禁音播放视频:
| 名称 | 是否有参数 | 作用 |
|---|---|---|
| x | Y | 强制屏幕宽度 |
| y | Y | 强制屏幕高度 |
| s | Y | 强制屏幕大小 |
| fs | N | 全屏 |
| an | N | 关闭音频 |
| vn | N | 关闭视频 |
| ast | Y | 设置想播放的音频流(需要指定流ID,未找到则禁音) |
| vst | Y | 设置想播放的视频流(需要指定流ID,未找到则无视频) |
| sst | Y | 设置想要播放的字幕流(需要指定流ID) |
| ss | Y | 从指定位置开始播放,单位秒 |
| t | Y | 播放指定时长 |
| nodisp | N | 窗口不显示 |
| f | Y | 强制封装格式 |
| pix_fmt | Y | 指定像素格式 |
| stats | N | 显示统计信息 |
| idct | Y | IDCT算法 |
| ec | Y | 错误隐藏方法 |
| sync | Y | 音视频同步方式(type=audio/video/ext) |
| autoexit | N | 播放完后自动退出 |
| exitonkeydown | N | 按任意键退出 |
| exitonmousedown | N | 按下鼠标退出 |
| loop | Y | 指定循环次数(-1表示无限循环) |
| framedrop | N | CPU不够的时候丢帧 |
| window_title | Y | 显示窗口标题 |
| rdftspeed | Y | rdft速度 |
| showmode | Y | 显示方式(0 = video, 1 = waves, 2 = RDFT) |
| codec | Y | 强制解码器 |
使用ffplay播放视频源时,rtsp/rtmp等,会有一定的延时,这里我们可以通过设置ffplay播放参数将延时控制到最小。
ffplay.exe -i rtmp://xxxxxxx -fflags nobuffer -analyzeduration 1000000
-fflags nobuffer减少缓冲-analyzeduration 1000000设置码流分析时间设置,单位为微秒
ffmpeg
ffmpeg 是一个强大的媒体文件转换工具,可以转换任何媒体文件,还可以用自己的 AudioFilter 和 VideoFilter 对多媒体文件进行编辑和处理
ffmpeg 常用参数(要带 - 作前缀)
| 名称 | 是否有参数 | 作用 |
|---|---|---|
| h | N | 帮助 |
| f | Y | 强制封装格式(flv, mp4, mpeg, mpegts, avi, image) |
| an | N | 关闭音频 |
| vn | N | 关闭视频 |
| i | Y | 输入文件 |
| an | N | 关闭音频 |
| vn | N | 关闭视频 |
| t | Y | 设置处理时长,格式为 hh:mm:ss |
| t | Y | 设置处理时长,格式为 hh:mm:ss |
| ss | Y | 设置起始时间,格式为 hh:mm:ss |
| b:v 等价于 vb | Y | 设置视频编码率,如640k |
| b:a 等价于 ab | Y | 设置音频码率 |
| r | Y | 设置帧率 |
| s | Y | 设置帧率大小,格式为 宽x高 |
| c 等价于 codec | Y | 指定流的编码器 |
| c:v 等价于 vcodec | Y | 设置视频编码器 |
| c:a 等价于 acodec | Y | 设置音频编码器 |
| ar | Y | 音频采样频率 |
| vf | N | 设置视频过滤器 |
-
硬件加速方法查询
ffmpeg -hwaccels

-
转换格式
将 input.mp4 转为码率是 640kbps 的 output.ts
ffmpeg -i input.mp4 -b:v 640k output.ts -
视频裁剪
vf 用来设置视频过滤器,crop=w:h:x:y,scale=sw:sh,表示用来设置过滤器的范围矩形和缩放后的图像大小
ffmpeg -i input.mp4 -vf crop=100:100:0:0,scale-200:200 output.mp4
-
截取图片
ffmpeg -i input.mp4 -f image2 -ss 30 -vframes 1 -s 320*240 output.jpeg -
编码方式
ffmpeg -i input.mp4 -vcodec libx264 -preset ultrafast -profile:v baseline -acodec aac -strict experimental -s 640*480 -b:v 568k -b:a 128k output.mp4
-vcodec libx264采用H.264的编码方式
-preset ultrafast快速编码方式
-profile:v baseline让视频提供最好的兼容方式
-acodec aac采用AAC音频编码
-strict experimental解锁实验项目(ffmpeg自制的AAC编码器,处在实验阶段,必须打开该选项)
-s 640*480图片大小
-b:v 568k视频码率
-ab 128k音频码率
AVC的三种规格
所谓的AVC其实就是H.264标准。从低到高分别有三种规格:Baseline, Main, High。
- Baseline(最低Profile)级别支持I/P 帧,只支持无交错(Progressive)和CAVLC,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等
- Main(主要Profile)级别提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持,用于主流消费类电子产品规格如低解码(相对而言)的mp4、便携的视频播放器、PSP和Ipod等
- High(高端Profile,也叫FRExt)级别在Main的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如4:4:4),用于广播及视频碟片存储(蓝光影片),高清电视的应用
H.264的四种画质级别
H.264有四种画质级别,分别是BP、EP、MP、HP:
- BP-Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC
- EP-Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC
- MP-Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),也支持CAVLC 和CABAC 的支持
- HP-High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式
SDP 协议
SDP(Session Description Protocol),即 会话描述协议。主要用于两个会话实体之间的媒体协商。它的出现主要是为了解决参与会话的各个成员之间能力不对等的问题。
SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。

ts 格式
ts是日本高清摄像机拍摄下进行的封装格式,全称为MPEG2-TS。ts即"Transport Stream"的缩写。MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。
- 点赞
- 收藏
- 关注作者






评论(0)