FFmpeg 目录格式

举报
福州司马懿 发表于 2021/11/29 22:40:18 2021/11/29
【摘要】 FFmpeg 目录格式FFmpeg 遵循的是GNU自由软件协议,它包含3个协议条款协议说明GPLGNU通用公共许可证bai(GNU General Public License)LGPLGNU较宽松的公共许可证 (GNU Lesser General Public License) ,旧称 GNU Library General Public License (GNU 库通用公共许可证)G...

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 编译配置、及引用库说明

image.png
需要在命令行中,先进入该目录,才能使用对应的命令

可执行程序 用途
ffmpeg 用于格式转换
ffplay 是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示
ffprobe 主要用来查看多媒体文件的信息

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

ffprobe

ffprobe:用来查看媒体文件头信息的工具

  • 查看基本信息
    ffprobe "D:\Downloads\庄心妍 真的不容易.mp3"
    image.png

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

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

ffplay

ffplay 是以 FFmpeg 框架为基础,外加跨平台多媒体库 libSDL 来渲染音视频的多媒体文件播放器

  • 播放音视频
    ffplay "D:\Downloads\庄心妍 真的不容易.mp3"
    这是一种 RDFT(实数离散傅里叶变换) 的显示模式
    image.png

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

打印元素含义

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)

image.png

  • 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
    image.png

  • 转换格式
    将 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。

  1. Baseline(最低Profile)级别支持I/P 帧,只支持无交错(Progressive)和CAVLC,一般用于低阶或需要额外容错的应用,比如视频通话、手机视频等
  2. Main(主要Profile)级别提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),同样提供对于CAVLC 和CABAC 的支持,用于主流消费类电子产品规格如低解码(相对而言)的mp4、便携的视频播放器、PSP和Ipod等
  3. High(高端Profile,也叫FRExt)级别在Main的基础上增加了8x8 内部预测、自定义量化、无损视频编码和更多的YUV 格式(如4:4:4),用于广播及视频碟片存储(蓝光影片),高清电视的应用

H.264的四种画质级别

H.264有四种画质级别,分别是BP、EP、MP、HP:

  1. BP-Baseline Profile:基本画质。支持I/P 帧,只支持无交错(Progressive)和CAVLC
  2. EP-Extended profile:进阶画质。支持I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC
  3. MP-Main profile:主流画质。提供I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),也支持CAVLC 和CABAC 的支持
  4. HP-High profile:高级画质。在main Profile 的基础上增加了8x8内部预测、自定义量化、 无损视频编码和更多的YUV 格式

SDP 协议

SDP(Session Description Protocol),即 会话描述协议。主要用于两个会话实体之间的媒体协商。它的出现主要是为了解决参与会话的各个成员之间能力不对等的问题。

SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。
在这里插入图片描述

ts 格式

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。