FFmpeg学习笔记汇总(下)

简介: FFmpeg学习笔记汇总

通过ffprobe-show_framesinput.dv命令可以查看视频文件中的赖信息,输出的顺信息将使用FRAME标签括起来


[FRAME]
media_type=video
stream index=0
key_frame=l
pkt pts=80
pkt_pts_time=0.080000
pkt dts=80
pkt dts_time=0.080000
begt effort timegtamp=80
best effort timestamp_time=0.080000
pkt_duration=N/A
pkt duration time=N/A
pkt_pog=344
pkt_size=8341
width=1280
height=714
pix fmt=yuv420p
6ample_aspect_ratio=1:1
pict_type=T
coded picture number=0
display picture number=0
interlaced frame=0
top_field first=o
repeat pict=0
[/FRAME]


通过-show_frames参数可以查看每一帧的信息,下面就来介绍一下其中重要的信息,具体见表


属性

说明

media type

的类型(视频、音频,字幕等)

video

stream index

帧所在的索引区域

0

key_frame

是否为关键顿

1

pktpts

Frame包的pts

0

pkt pis time

Frame包的ps的时间显示

0.08

pkt dts

Frame包的dts

80

pkt dis time

Frame包的dts的时间显示

0.08

pkt duration

Frame包的时长

NIA

pkt duration time

Frame包的时长时间显示

NIA

pkt pos

Frame包所在文件的偏移位置

344

width

显示的宽度

1280

height

显示的高度

714

pix fimt

倾的图像色彩格式

yuv420p

piet type

侦类型

I


通过-show streams参数可以查看到多媒体文件中的流信息,流的信息将使用STREAM标签括起来:



1eve1=31如以上输出内容所示,从中可以看到流的信息,具体属性及说明见表


属性

说明

index

流所在的索引区域

0

codecnamc

编码名

h264

codee long name

编码全名

MPEG-4 part 10

profile

编码的profile

High


属性

说明

level

编码的level

31

has b frames

包含B赖信息

2

codec type

编码类型

video

codec timebase

编码的时间截计算基础单位

1750

pix fmt

图像显示的色彩格式

yuv420p

codedwidth

图像的宽度

1280

coded height

图像的高度

714

codec tag string

编码的标签数据

[0][0][0][0]

Tframe rateavg frame rate

实际硕率平均帧率

25/125/

time base

时间基数(用来进行timestamp计算)

1/1000

bit rate

码率

200000

xbit ratemax

最大码率

N/A

nb_frames

帧数

N/A


2.3 ffplay常用命令


在编译旧版本FFmpeg源代码时,如果系统中包含了SDL-1.2版本,就会默认将ffplay编译生成出来,如果不包含SDL-1.2或者版本不是SDL-l.2时,将无法生成ffplay文件,所以,如果想使用flay进行流媒体播放测试,则需要安装SDL-1.2.而在新版本的FFmpeg源代码中,需要SDL-2.0之后的版本才能有效生成ffplay.。


在FFmpeg中通常使用ffplay作为播放器,其实ffplay同样也可以作为很多音视频数据的图形化分析工具,通过ffplay可以看到视频图像的运动估计方向、音频数据的波形等.


下表是ffplay的基础参数


参数 说明
x 强制设置视频显示窗口的宽度
y 强制设置视频显示窗口的高度
s 设置视频显示的宽高
fs 强制全屏显示
an 屏蔽音频
vn 屏蔽视频
sn 屏蔽字幕
ss 根据设置的秒进行定位拖动
t 设置播放视频/音频的长度
bytes 设置定位拖动的策略,0为不可拖动,1为可拖动,-1为自动
nodisp 关闭图形化显示窗口
f 强制使用设置的格式进行解析
window title 设置显示窗口的标题
af 设置音频的滤镜
codec 强制使用设置的codec进行解码
autorotate 自动旋转视频


下面这个表是ffplay高级参数


参数

说明

ast

设置将要播放的音额流

vst

设置将要播放的视频流

sst

设置将要播放的字幕流

stats

输出多媒体播放状态

fast

非标准化规范的多媒体兼容优化

sync

音视频同步设置可根据音频时间、视频时间或者外部扩展时间进行参考

autoexit

多媒体播放完毕之后自动退出fplay,fplay默认播放完毕之后不退出播放器

cxitonkeydown

当有按键按下事件产生时退出ffplay

exitonmousedown

当有鼠标按键事件产生时退出fplay

loop

设置多媒体文件循环播放的次数

framedrop

当CPU资源占用过高时,自动丢顿

infbuf

设置无极限的播放器buffer,这个选项常见于实时流媒体播放场景

vf

视频滤镜设置

acodec

强制使用设置的音频解码器

vcodec

强制使用设置的视频解码器

scodec

强制使用设置的字幕解码器


第3章 FFmpeg转封装



3.1.1MP4格式标准介绍


MP4格式标准为IS0-14496Part12、IS0-14496Part14,标准内容并不是特别多,下面就来着重介绍一些重要的信息。


如果要了解MP4的格式信息,首先要清楚几个概念,具体如下。


  • MP4文件由许多个Box与FullBox组成


  • 每个Box由Header和Data两部分组成


  • FullBox是Box的扩展,其在Box结构的基础上,在Header中增加8位version标志和24位的f1ags标志


  • Header包含了整个Box的长度的大小(size)和类型(type),当size等于O时,代表这个Box是文件的最后一个Box。当siz等于1时,说明Box长度需要更多的位来描述,在后面会定义一个64位的largesize用来描述Box的长度。当Type为uuid时,说明这个Box中的数据是用户自定义扩展类型


  • Data为Box的实际数据,可以是纯数据,也可以是更多的子Box


  • 当一个Box中Data是一系列的子Box时,这个Box又可以称为Container(容器)


Box MP4文件中Box的组成可以用表3-1所示的列表进行排列,表3-1中标记“V”的Box为必要Box,否则为可选Box。





第4章FFmpeg转码


4.1.2H.264编码举例


3.H.264的proffle与level设置


这里的profile(档次)与level(等级)的设置与H.264标准文档ISO-14496-Part10中描述的profile、level的信息基本相同,×264编码器支持Baseline、Extented、Main、High、High10、High422、High444共7种profile参数设置,根据profile的不同,编码出来的视频的很多参数也有所不同,具体的情况可以参考表。



ExtentedMainBaseline
High High10 High4:2:2 High4:4:4(Predictive)
1与P分片 支持 支持 支持 支持 支持 支持 支持
B分片 不支持 支持 支持 支持 支持 支持 支持
SI和SP分片 不支持 支持 不支持 不支持 不支持 不支持 不支持
多参考幢 支持 支持 支持 支持 支持 支持 支持
环路去块滤波 支持 支持 支持 支持 支持 支持 支持
CAVLC愉编码 支持 支持 支持 支持 支持 支持 支持
CABAC编码 不支持 不支持 支持 支持 支持 支持 支持
FMO 不支持 支持 不支持 不支持 不支持 不支持 不支持
ASO 不支持 支持 不支持 不支持 不支持 不支持 不支持
RS 不支持 支持 不支持 不支持 不支持 不支持 不支持
数据分区 支持 不支持 不支持 不支持 不支持 不支持
场编码PAFF/MBAFF 不支持 支持 支持 支持 支持 支持 支持
42:0色度格式 支持 支持 支持 支持 支持 支持 支持
4:0:0色度格式 不支持 不支持 不支持 支持 支持 支持 支持
42:2色度格式 不支持 不支持 不支持 不支持 不支持 支持 支持
44:4色度格式 不支持 不支持 不支持 不支持 不支持 不支持 支持
8位采样深度 支持 支持 支持 支持 支持 支持 支持
9和10位采样深度 不支持 不支持 不支持 不支持 支持 支持 支持
11至14位采样深度 不支持 不支持 不支持 不支持 不支持 不支持 支持
8×8与4×4转换适配 不支持 不支持 不支持 支持 支持 支持 支持
量化计算矩阵 不支持 不支持 不支持 支持 支持 支持 支持
分离Cb和Cr量化参数控制 不支持 不支持 不支持 支持 支持 支持 支持
分离色彩平面编码 不支持 不支持 不支持 不支持 不支持 不支持 支持
分离无损编码 不支持 不支持 不支持 不支持 不支持 不支持 支持


4.2FFmpeg输出AAC


   在音视频流中,无论直播与点播,AAC都是目前最常用的一种音频编码格式,例如RTMP直播、HLS直播、RTSP直播、FLV直播、FLV点播、MP4点播等文件中都是常见的AAC音视频。


       与MP3相比,AAC是一种编码效率更高、编码音质更好的音频编码格式,常见的使用AAC编码后的文件存储格式为m4a,如在iPhone或者iPad中即为m4a.FFmpeg可以支持AAC的三种编码器具体如下。


  • aac:FFmpeg本身的AAC编码实现


  • libfaac:第三方的AAC编码器


  • ·libfdk_aac:第三方的AAC编码器


       后两种编码器为非GPL协议,所以使用起来需要注意,在预编译时需要注意采用nonfree的支持。


4.2.1AAC音频质量对比


AAC-LC的音频编码可以采用libfaac、libfdk aac、FFmpeg内置AAC三种,其质量顺序排列如下。


  • libfdk aac音频编码质量最优


  • FFmpeg内置AAC编码次于libfdk aac但优于libfaac


  • libfaac在FFmpeg内置AAC编码为实验品时是除了libfdk_aac之外的唯一选择


第5章 FFmpeg流媒体


AAC-LC的音频编码可以采用libfaac、libfdk_aac、FFmpeg内置AAC三种,其质量顺序排列如下


libfdkaac音频编码质量最优


FFmpeg内置AAC编码次于libfdkaac但优于libfaac


libfaac在FFmpeg内置AAC编码为实验品时是除了Iibfdkaac之外的唯一选择。


随着互联网、移动互联网的发展,人们获取信息的方式开始从纸质媒体转向互联网文字媒体,又从文字媒体转向音视频流媒体。音视频流媒体又称为“流媒体”,而用于处理流媒体的压缩、录制、编辑操作,开源并强大的工具屈指可数,FFmpeg就是常见的流媒体处理工具。


解析trak子容器


trak容器中定义了媒体文件中的一个track的信息,一个媒体文件中可以包含多个trak,每个trak都是独立的,具有自己的时间和空间占用的信息,每个trak容器都有与它关联的media容器描述信息。trak容器的主要使用目的具体如下。


  • 包含媒体数据的引用和描述(media track)


  • 包含modifier track信息


  • 流媒体协议的打包信息(hint track),hint track可以引用或者复制对应的媒体采样数据


hint track和modifier track必须保证完整性,同时要与至少一个media track一起存在。

一个trak容器中要求必须要有一个Track Header Atom(tkhd)、一个Media Atom(mdia),其他的Atom都是可选的,例如如下的atom选项。


  • Track剪辑容器:Track Clipping Atom(clip)


  • Track画板容器:Track Matte Atom(matt)


  • Edit容器:Edit Atom(cdts)


  • Track参考容器:Track Reference Atom(tref)


  • Track配置加载容器:Track Load Settings Atom(load)


  • Track输出映射容器:Track Input Map Atom(imap)


  • 用户数据容器:User Data Atom(udta)
相关文章
|
30天前
|
应用服务中间件 Linux nginx
FFmpeg学习笔记(一):实现rtsp推流rtmp以及ffplay完成拉流操作
这篇博客介绍了如何使用FFmpeg实现RTSP推流到RTMP服务器,并使用ffplay进行拉流操作,包括在Windows和Linux系统下的命令示例,以及如何通过HTML页面显示视频流。
335 0
|
Windows 计算机视觉 安全
流媒体技术学习笔记之(十三)Windows安装FFmpeg
一、下载地址: 网址:https://ffmpeg.org/ 选择Windows版本:https://ffmpeg.org/download.html#build-windows 二、解压安装: 下载并解压FFmpeg文件夹,它会生成一个类似名为“ffmpeg-20150504-git-eb9fb50-win32-static”的新文件夹:   打开你想安装的任意磁盘,例如:d盘。
3287 0
|
29天前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
58 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
27天前
|
计算机视觉 Python
FFMPEG学习笔记(一): 提取视频的纯音频及无声视频
本文介绍了如何使用FFmpeg工具从视频中提取纯音频和无声视频。提供了具体的命令行操作,例如使用`ffmpeg -i input.mp4 -vn -c:a libmp3lame output.mp3`来提取音频,以及`ffmpeg -i input.mp4 -c:v copy -an output.mp4`来提取无声视频。此外,还包含了一个Python脚本,用于批量处理视频文件,自动提取音频和生成无声视频。
37 1
|
30天前
|
存储 编解码 网络协议
FFmpeg学习笔记(三):FFmpeg和FFplay参数介绍
这篇文章是关于FFmpeg和FFplay参数的介绍,包括如何使用这些参数进行视频流的捕获、处理和播放。
48 0
|
30天前
FFmpeg学习笔记(二):多线程rtsp推流和ffplay拉流操作,并储存为多路avi格式的视频
这篇博客主要介绍了如何使用FFmpeg进行多线程RTSP推流和ffplay拉流操作,以及如何将视频流保存为多路AVI格式的视频文件。
145 0
|
应用服务中间件 nginx
流媒体技术学习笔记之(十四)FFmpeg进行笔记本摄像头+麦克风实现流媒体直播服务
FFmpeg推送视频流,Nginx RTMP模块转发,VLC播放器播放,实现整个RTMP直播 查看本机电脑的设备 ffmpeg -list_devices true -f dshow -i dummy 红色标记表示视频设备和麦克风设备 看到乱码了吧!来这里查看哦   FFmpeg编码推送到R...
3489 0
|
编解码 Ubuntu 网络协议
FFmpeg学习笔记汇总
FFmpeg学习笔记汇总
|
编解码 网络协议 Windows
|
编解码 网络协议 C语言