读书之深入理解ffmpeg_简单笔记2(初步)

再回看第一遍通读后的笔记,感觉还有很多的细节需要一一攻克,。

mp4的封装格式,解析方式。

flv的封装格式,解析方式。

ts的封装格式,解析方式。

第四章 封装和解封装

4.2 视频文件转flv (头文件和文件内容)(直播点播场景)

文件头 (flv标签,文件版本,音频,视频标记,数据偏移等)

文件内容(FLVTAG) = header(tag排列方式) +body (实际flvtag格式)

有三种tagType :音频,视频,脚本数据

ffmpeg -i ac3.mp4 -c copy -f flv out.flv

注意有没有报错,ac3音频不支持flv

ffmpeg -i ac3.mp4 -vcodec copy -acodec aac -f flv out.flv

把ac3 音频转成aac进行封装到flv

生成关键索引flv (yamdi工具,或者ffmpeg)

ffmpeg -i test.mp4 -c copy -f flv -flvflags add_keyframe_index out1.flv

flv分析工具(FlvParse, FlvAnalyzer,ffprobe)

ffprobe.exe -v trace -i out1.flv

可以分析到,flv中存储的数据,存储keyframe 关键帧的位置和时间戳。

4.3 视频文件转MPEG-TS (分割小块,使用FEC技术)

TS分析比较简单,主要分析PES层,TS层的头部

MPEG-TS muxer封装相关参数

MPEG-TS 格式分析工具(EasyICE, DVB Inspector)

4.4 视频文件转HLS (http实时流,m3u8,支持加密)

从apple官网获取信息。

流分解为一连串基于htttp的小文件。

扩展的M3u列表描述信息,ts文件实际流。

m3u8 文件,标签,版本,分片时长,切片序列,每个分片,等。。。

hls muxer封装相关参数

ffmpeg.exe -i test.mp4 -c copy -f hls -bsf:v h264_mp4toannexb out2.m3u8

h264_mp4toannexb 是MPEG-TS要求的码流封装格式,h.264 Annex B标准格式

ffmpeg.exe -i test.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -start_number 300 out2.m3u8

设置第一个分片的序列号 300

-hls_time 10 设置转码切片长度10s,gop不均匀导致时长不均匀。

-hls_list_size 3 可以控制m3u8列表中TS分片的个数。

-hls_wrap 3 分片号等于这个时则回滚

-hls_base_url http://192.168.0.1/live/ 设置写入ts切片文件的路径

-hls_segment_filename test_outpur-%d.ts 切片文件名设置

-hls_flags 配合子参数,正常文件索引,删除过期切片,等各种设置

​ delete_segment 删除不在m3u8列表中的旧文件

ffmpeg -f lavfi -i testsrc2=s=176x144:r=15 -vcodec libx264 -g 30 -r:v 15 -f hls -hls_time 2 -hls_list_size 4 -hls_flags delete_segments -t 30 out5.m3u8

raund_durations 子参数,切片信息的duration为整数值

discont_start 子参数,切片信息前插入discontinuity 用于相邻ts不连续切片

omit_endlist 子参数,文件末尾不加endlist 标签

split_by_time 子参数,根据hls_time参数设定的数值作为秒数参考对ts进行切片,不一定遇到关键帧。 (影响首帧画面问题)

strftime 子参数,设置hls切片文件名,m3u8文件切片信息文件名。 用生成ts切片当前系统时间。

method 子参数,method put 设置上传http的方式,配合nginx,推流使用。

多码率hls

复制代码
ffmpeg -i test.mp4 -b:a:0 32k -b:a:1 64k -b:v:0 1000k -map 0:a -map 0:a -map 0:v -f hls -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_high,language:CHN v:0,agroup:aud_low" -master_pl_name master.m3u8 -t 30 out%v.m3u8

4.5:视频文件切片 segment (ss, -t)

segment_format 指定切片的格式。

segment_list和segment_list_type 指定切片索引列表。 (ffconcat,flat,csv,m3u8格式文件索引)

reset_timestamps 设置切片时间戳归零。

segment_times 按照时间点切片

ss和t配合,output_ts_offset指定输出的start_time

ffmpeg.exe -i test.mp4 -ss 8 -t 10 -output_ts_offset 120 out6.mp4 (开始输出的时间已经变了,第120s)

4.6:提取AAC,h264, h265等流

-vn /-an / -an -bsf hevc_mp4toannexb(转成标准的annex B格式)

4.7:关注系统资源

第五章:编码与转码

5.1: h264预设参数,编码优化,控制关键帧,设置内部参数,控制码率设置(可变,恒定)

5.2:硬件优化(可以试试 NVIDIA GPU硬编解码,intel QSV,树莓派,macOS)

5.3:输出MP3,相关参数,设置编码质量,设置平均码率编码ABR

5.4:输出AAC (FDK-AAC(CBR,VBR,),(LC,HE,HEv2) )

5.6:系统资源

第六章:流媒体技术

6.1 rtmp(tcp)

6.2 rtsp(tcp、udp)

6.3 http流

6.4 tcp/udp流

6.5 多路流(tee)

6.6 自适应码率流(DASH,HLS,HDS)

第七章:bitstream过滤器

7.1 avcodec解析器parser和bitstream的区别

7.2 ADTS和ASC (AAC格式处理) aac_adtstoasc

7.3 Annex B和AVCC (h265(HEVC)/h264(AVC)格式处理) mp4toannexb

hevc设置metadata的过滤器 hevc_metadata

7.4 PPS SPS VPS 存储位置 (dump_extra)

7.5 trace_headers 码流分析工具(是头部信息?)

例如需要获取pps sps的相关信息

7.6 filter_units 视频处理NALU信息

第八章:滤镜 (AVFilter)

8.1 滤镜表达式

8.3 相关滤镜练习

8.3.1 文字水印,图片水印

8.3.2 画中画

8.3.3 多宫格

8.3.4 视频字母

ASS字母写入视频

8.3.5 3D相关处理

8.4 视频截图

8.4.1 vframes 参数截取一张图片

8.4.2 fps滤镜定时获取图片

8.5 音频滤镜(多声道)

8.5.1 双声道合并单声道

8.5.2 双声道提取

8.5.3 双声道转双音频流

8.5.4 单声道转双声道

8.5.5 两个音频源合并双声道

8.5.6 多个音频合并为多声道

8.6 音频音量

8.6.1 音频音量获得

8.6.2 音频波形(单声道,多声道)

8.7 生成测试源数据

音频测试流

视频测试流

8.8 音视频倍速处理

atempo 音频速度处理

setpts 视频速度处理

8.9 云剪辑相关技术

定格帧

透明视频兼容(透明处理)

隔行交错视频处理

HDR视频兼容处理(视频新标准)

雪碧图和webVTT

缩略图

filter_complex 复杂渲染(可以汇总上面的指令)

色度抠图(蒙版抠图,调色,透明度调整)

动态缩放

画质监测 psnr ssim libvmaf计算等

滤镜动态调整(zmq)

深度学习(dnn_processing 超分,去雨,去雾等处理) DNN环境部署及深度学习模拟文件

第九章:采集设备

linux,macOS,windows音视频采集设备查看和使用。

相关推荐
丑小鸭是白天鹅40 分钟前
嵌入式C语言学习笔记之枚举、联合体
c语言·笔记·学习
十一10242 小时前
FX10/20 (CYUSB401X)开发笔记5 固件架构
笔记
FakeOccupational2 小时前
【电路笔记 通信】AXI4-Lite协议 FPGA实现 & Valid-Ready Handshake 握手协议
笔记·fpga开发
奶黄小甜包3 小时前
C语言零基础第18讲:自定义类型—结构体
c语言·数据结构·笔记·学习
rannn_1115 小时前
【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
笔记·后端·学习·mysql
草莓熊Lotso6 小时前
《详解 C++ Date 类的设计与实现:从运算符重载到功能测试》
开发语言·c++·经验分享·笔记·其他
_Kayo_12 小时前
node.js 学习笔记3 HTTP
笔记·学习
星星火柴93616 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
Cx330❀19 小时前
【数据结构初阶】--排序(五):计数排序,排序算法复杂度对比和稳定性分析
c语言·数据结构·经验分享·笔记·算法·排序算法
小幽余生不加糖19 小时前
电路方案分析(二十二)适用于音频应用的25-50W反激电源方案
人工智能·笔记·学习·音视频