深入理解ffmpeg第三章FFmpeg工具使用基础

 书籍基本信息


书名: 《深入理解FFmpeg》

作者: 刘歧、杜金房、宋韶颍 等

出版社: 电子工业出版社

出版时间: 2020 年

适合读者: FFmpeg 开发者、音视频工程师、对 FFmpeg 源码感兴趣的技术人员。深入理解

深入理解FFmpeg - 第1章 多媒体基础 - 刘歧 赵军 杜金房 赵文杰 宋韶颍 - 微信读书

目标

总结第三章核心知识点,以及前面文章未提到的一些信息。

3.1 ffmpeg常用命令

因为ffmpeg功能庞大所以使用信息很多,可以通过下列命令查询不同等级


查看基础帮助信息:
ffmpeg --help

查看高级帮助信息:
ffmpeg --help long

查看全部帮助信息:
ffmpeg --help full

查看支持的许可证协议:
ffmpeg -L

版本功能支持查询

下列基础上加上 -h,可以查看详细信息。

查询支持的格式

ffmpeg -formats

 输出说明:

D 表示支持解码(Demuxing)。

E 表示支持编码(Muxing)。

DE 表示同时支持解码和编码。

格式名称(如 mp4、mov、avi 等)会列在右侧

查询支持的编解码器

ffmpeg -codecs

ffmpeg -h encoder=h264  # 查看 H.264 编码器的详细信息
ffmpeg -h decoder=aac   查看 AAC 解码器的详细信息

输出说明

  • D 表示支持解码。

  • E 表示支持编码。

  • V 表示视频编解码器。

  • A 表示音频编解码器。

  • S 表示字幕编解码器。

  • I 表示帧级编解码器(通常是图片格式)。

  • 编解码器名称(如 h264aacmp3 等)会列在右侧。

查询支持的协议

ffmpeg -protocols

输出说明

  • I 表示支持输入协议。

  • O 表示支持输出协议。

  • IO 表示同时支持输入和输出。

查询支持的滤镜

ffmpeg -filters

输出说明

  • 每个滤镜的名称和功能会列出来。

  • 例如:scale(缩放)、crop(裁剪)、rotate(旋转)等。

其他

甚至还可以查询支持的图像格式以及音频采样率比如:

ffmpeg -h muxer=mp4  # 查看 MP4 格式的封装器(Muxer)信息
ffmpeg -h demuxer=mov  # 查看 MOV 格式的解封装器(Demuxer)信息

查询像素格式支持
ffmpeg -pix_fmts

查询采样格式支持
ffmpeg -sample_fmts

查询硬件加速支持
ffmpeg -hwaccels

总结

在使用前,我们应该确定ffmpeg版本是否支持我们的需求!

ffmpeg -h encoder/decoder/muxer/demuxer/filter=xxx

3.1.1 封装转换

ffmpeg AVFormatContext主要参数帮助

3.1.2 解码和编码

ffmpeg AVCodecContext主要参数

3.2 ffprobe常用命令

ffprobe有许多选项(参数),可以用来指定输出的格 式、查看的信息等。下面是一些常用的选项:

-v:指定输出的详细程度。0为较少的信息,9为更 多的信息。

-show_format:查看媒体文件的容器信息,包括格式、时长、码率等。

-show_streams:查看媒体文件的流信息,包括编码 格式、帧率、分辨率等。

-show_chapters:查看媒体文件的章节信息。 

-of:指定输出的格式,支持的格式包括JSON、XML 等。

ffprobe -v 9 -show_format -show_streams -show_chapters -of json video.mp4

查看多媒体数据包信息

ffprobe -show_packets input.flv
结合 -show_data 参数,还可以查看数据包中的具体二进制数据。
ffprobe -show_data -show_packets input.flv

查看多媒体的封装格式

ffprobe -show_format output.mp4

 format关键字段说明

 查看多媒体文件帧信息

ffprobe -show_frames input.flv

查看多媒体文件中的流信息 

ffprobe -show_streams 1.mp4

输出格式设置 

ffprobe -of <format> [其他选项] input.mp4

-of:指定输出的格式

用于指定输出信息的格式,支持的格式包括:

  • default:人类可读的文本格式。

  • json:适合程序化处理。

  • xml:适合结构化数据。

  • csv:适合导入到电子表格或数据库。

  • ini:适合配置文件。

  • flat:适合简单的键值对处理。

指定流

-select_streams <流选择器>
只选择视频流分析
ffprobe -select_streams v -show_frames -of json input.mp4

流选择器

  • v:视频流。

  • a:音频流。

  • s:字幕流。

  • d:数据流。

  • t:附件流。

  • 可以指定流的索引(如 v:0 表示第一个视频流,a:1 表示第二个音频流)。

指定字段

前面已经总结了一大堆信息,现在只需要指定字段如何做?

-show_entries <模块名>=<字段1>,<字段2>,...

#提取视频流中所有关键帧的时间戳和文件位置
ffprobe -select_streams v -show_streams -of csv 
-show_entries frame=key_frame,pkt_pts_time,pkt_pos  -i 1.mp4

#提取视频流的分辨率和编码格式
ffprobe -select_streams v 
-show_entries stream=width,height,codec_name -of csv input.mp4
#提取音频流的采样率和声道数
ffprobe -select_streams a 
-show_entries stream=sample_rate,channels -of csv input.mp4

模块名

  • format:容器格式信息(对应 -show_format)。

  • stream:流信息(对应 -show_streams)。

  • frame:帧信息(对应 -show_frames)。

  • packet:数据包信息(对应 -show_packets)。

  • program:节目信息(对应 -show_programs)。

  • chapter:章节信息(对应 -show_chapters)。

日志级别

如果 moov box 位于文件末尾,播放器需要下载整个文件才能开始播放,这会导致视频加载时间变长。通过 FFmpeg 的 -movflags faststart 参数,可以将 moov box 前移到文件头部。这点在播放器秒播有提到!

https://i-blog.csdnimg.cn/direct/a7ecad3abebe4a0fa5dce8171b3ae0a7.png播放器秒开优化2-优快云博客

播放器秒开优化_ios ijkplayer 预加载-优快云博客https://i-blog.csdnimg.cn/direct/a7ecad3abebe4a0fa5dce8171b3ae0a7.png

查看 moov box 的位置

ffprobe -loglevel trace input.mp4

搜索 moov 关键字,可以找到类似以下的信息: type:'moov' parent:'root' sz: 15052

将 moov box 前移到文件头部

ffmpeg -i input.mp4  -movflags faststart -c copy output.mp4

再次查看验证box位置即可。

3.3.1 ffplay常用参数

ffplay -window_title "播放测试"  rtmp://up.v.test.com/live/stream

ffplay高级参数

具体使用ffplay --help参数查看更多

ffplay播放快捷键

罕见用法 

以音频波形图输出音频

ffplay -showmode 1 output.mp3

查看宏块和运动矢量信息

查看视频解码过程中的宏块信息  
兼容性差写法:
ffplay -debug vis_mb_type -i input.mp4
常用写法:
使用 codecview 滤镜查看宏块信息/查看视频的运动矢量信息
ffplay -i input.mp4   -flags2 +export_mvs -vf codecview=mv=pf+bf+bb

查看视频的量化参数(QP)信息
ffplay -i input.mp4 -flags2 +export_mvs  -vf "codecview=mv=pf+bf+bb,qp"

结合 ffprobe 查看宏块信息
ffprobe -show_frames 
-show_entries frame=pict_type,coded_picture_number,mb_type 
-of csv input.mp4

-debug vis_mb_type:启用宏块类型的可视化调试信息。 

-flags2 +export_mvs:启用运动矢量导出。

-vf codecview=mv=pf+bf+bb:使用 codecview 滤镜显示运动矢量信息。

  • mv=pf+bf+bb:显示前向预测(P 帧)、双向预测(B 帧)和后向预测(B 帧)的运动矢量。

-show_frames:显示帧信息。

-show_entries frame=pict_type,coded_picture_number,mb_type:指定输出帧的 pict_type(帧类型)、coded_picture_number(编码帧序号)和 mb_type(宏块类型)。

-of csv:输出格式为 CSV。

 运动矢量示例图

学习资料分享

0voice · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值