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

news/2024/7/10 20:43:52 标签: 笔记, ffmpeg

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

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

第四章 封装和解封装

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

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

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

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

ffmpeg_i_ac3mp4_c_copy_f_flv_outflv_16">ffmpeg -i ac3.mp4 -c copy -f flv out.flv

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

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

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

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

ffmpeg_i_testmp4_c_copy_f_flv_flvflags_add_keyframe_index_out1flv_26">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封装相关参数

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

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

ffmpegexe_i_testmp4_c_copy_f_hls_bsfv_h264_mp4toannexb_start_number_300_out2m3u8_58">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音视频采集设备查看和使用。


http://www.niftyadmin.cn/n/5306377.html

相关文章

神经网络框架的基本设计

一、神经网络框架设计的基本流程 确定网络结构、激活函数、损失函数、优化算法,模型的训练与验证,模型的评估和优化,模型的部署。 二、网络结构与激活函数 1、网络架构 这里我们使用的是多层感知机模型MLP(multilayer prrceptron)&#x…

transforms图像增强(一)

一、数据增强 数据增强(Data Augmentation)是一种常用的数据预处理技术,通过对训练集进行各种变换和扩增操作,可以增加训练数据的多样性和丰富性,从而提高模型的泛化能力。 数据增强的目的是通过对训练集中的图像进行…

php-ffmpeg运用 合并视频,转码视频

下载 官网 windows 版本 添加环境变量 合并视频 public function test_that_true_is_true(): void{ini_set(memory_limit,-1); //没有内存限制set_time_limit(0);//不限制执行时间//ffmpeg配置$path [ffmpeg.binaries > D:\soft\ffmpeg\bin/ffmpeg.exe,ffprobe.binaries…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)创建并初始化TcpServer实例 以及 启动

对于一个TcpServer来说,它的灵魂是什么?就是需要提供一个事件循环EventLop(EventLoop),不停地去检测有没有客户端的连接到达,有没有客户端给服务器发送数据,描述的这些动作,反应堆模型能够胜任。当服务器和…

Vue_00001_CLI

初始化脚手架 初始化脚手架步骤: 第一步(仅第一次执行):全局安装vue/cli。 命令:npm install -g vue/cli 第二步:切换到要创建项目的目录,然后使用命令创建项目。 命令:vue creat…

华为云Stack 8.X流量模型分析(六)

八、基础云专线流量模型分析 ​ 华为官方对云专线定义是:用户数据中心通过运营商的物理专线(MPLS/VPN,以太专线)访问云内资源,云内资源呈现真实IP,通过设置的专线路由实现三层互通。 ​ 通过云专线直接访…

Docker一键极速安装Nacos,并配置数据库!

1 部署方式 1.1 DockerHub javaedgeJavaEdgedeMac-mini ~ % docker run --name nacos \ -e MODEstandalone \ -e JVM_XMS128m \ -e JVM_XMX128m \ -e JVM_XMN64m \ -e JVM_MS64m \ -e JVM_MMS64m \ -p 8848:8848 \ -d nacos/nacos-server:v2.2.3 a624c64a1a25ad2d15908a67316d…

在 CentOS 7.8 上安装 Node.js

1.安装 NVM(Node Version Manager): curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash这将从 NVM 的 GitHub 仓库下载安装脚本并执行。请注意,您需要重新启动终端或者执行 source ~/.bashrc 以…