读书之深入理解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音视频采集设备查看和使用。

相关推荐
-Mr_X-1 小时前
windows下srs流媒体服务器使用ffmpeg推流
ffmpeg
dvlinker3 小时前
C++开源项目 VLC 源代码的交叉编译以及库的裁剪方法详解
ffmpeg·mingw-w64·msys2·cygwin·开源vlc·vlc编译·vlc裁剪
云边有个稻草人3 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
冷眼看人间恩怨11 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon16 小时前
SpringBoot 整合 SQLite 数据库
笔记
因我你好久不见17 小时前
springboot java ffmpeg 视频压缩、提取视频帧图片、获取视频分辨率
java·spring boot·ffmpeg
西洼工作室19 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.19 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑20 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing1 天前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl