读书之深入理解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音视频采集设备查看和使用。
相关文章:
读书之深入理解ffmpeg_简单笔记2(初步)
再回看第一遍通读后的笔记,感觉还有很多的细节需要一一攻克,。 mp4的封装格式,解析方式。 flv的封装格式,解析方式。 ts的封装格式,解析方式。 第四章 封装和解封装 4.2 视频文件转flv (头文件和文件内容࿰…...

ELK+kafka+filebeat企业内部日志分析系统搭建
看上面的拓扑图,我们至少准备七台机器进行下面的实验项目。 机器主要作用分布如下: 三台安装elasticsearch来搭建ES集群实现高可用,其他机器就依次安装filebeat,kafka,logstash和kibana软件 一、部署elasticsearch来搭建ES集群 1.安装jdk 由于ES运行…...

勒索检测能力升级,亚信安全发布《勒索家族和勒索事件监控报告》
评论员简评 近期(12.08-12.14)共发生勒索事件119起,相较之前呈现持平趋势。 与上周相比,近期仍然流行的勒索家族为lockbit3和8base。在涉及的勒索家族中,活跃程度Top5的勒索家族分别是:lockbit3、siegedsec、dragonforce、8base和…...
编译原理复习的有用链接
2024年1月7日,考完编译原理,是时候和考试时候的她说再见了,整理一些收藏夹里的链接和思考吧 实验看这里: 编译原理_HNU岳麓山大小姐的博客-CSDN博客 课后习题看这里: 编译原理作业答案github LL1文法复习 [编译原…...

不带控制器打包exe,转pdf文件时失败的原因
加了注释的两条代码后,控制器会显示一个docx转pdf的进度条。这个进度条需要控制器的实现,如果转exe不带控制器的话,当点击转换为pdf的按钮就会导致程序出错和闪退。 __init__.py文件的入口...
Python 注释的方法
在Python中,有两种常见的注释方法: 单行注释:使用#符号来注释一行代码。在#符号后面的内容将被视为注释,不会被解释器执行,如: # 这是一个单行注释 print(hello world!) # 打印字符串多行注释࿱…...
webman插件创建
webman插件创建 介绍 应用插件实际上是一个完整的应用,它能以插件的形式安装到主项目中,使主项目快速获得某个模块功能。 例如:主项目需要一个问答系统,则可以安装一个问答应用插件,需要一个商城系统,则安…...

大模型迎来“AppStore时刻”,OpenAI给2024的新想象
一夜之间,OpenAI公布了多个重磅消息,引发市场关注。 钛媒体App 1月5日消息,今晨,OpenAI公司向所有GPT开发者们发布一封邮件称,下周将上线自定义的“GPT Store”商店,这有望推动ChatGPT开发者生态不断完善。…...
ubuntu解决在pycharm上使用jupyter无法导入虚拟环境中的包的问题
ubuntu解决在pycharm上使用jupyter无法导入虚拟环境中的包的问题 根本原因是jupyter 没有和他对应的kernel 需要先使用命令行建立kernel 下载ipykernel pip install ipykernel 首先激活conda conda activate然后添加你的kernel到虚拟环境 python -m ipykernel install -…...

探索2024年软件测试的几大主导趋势
进入2024年,考虑影响测试环境的问题至关重要。这种思考将成为团队了解主要瓶颈和实现当今不断提高的期望的首要因素。 01 了解关键测试瓶颈 毋庸置疑,现代团队需要不断创新、适应和拥抱最新趋势,以保持竞争力并提供以客户为中心的解决方案。尽…...
Linux C语言 48-信号总结
Linux C语言 48-信号总结 本节关键字:Linux、C语言、常用信号 相关C库函数:printf、signal、kill Linux中都有哪些信号 信号在Linux操作系统中是很重要的,信号的产生方式可以是来自键盘、由软件条件产生、调用硬件异常产生。来自系统函数调…...
【vue技巧】之如何让mixin的data 比本身vue的data优先级要高
GPT4.0国内站点:海鲸AI 在 Vue 中,当组件和 mixin 包含有冲突的选项时,这些选项将以一定的方式合并。对于 data 选项,组件自身的 data 会优先级更高,这意味着如果组件和 mixin 中出现了相同的字段,组件的数…...

全解析阿里云Alibaba Cloud Linux镜像操作系统
Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…...
什么是数据结构?
1、一种非常经典的数据结构。 栈数据结构:stack 2、什么是数据结构? 数据结构通常是:存储数据的容器。而该容器可能存在不同的结构。 数据结构和 java 语言实际上是没有关系,数据结构是一门独立的学科。 在大学计算机专业中&#…...
GOOS=darwin 代表macOS环境
GOOSdarwin 是一个环境变量设置,表示目标操作系统为 macOS。 在Go语言中,可以使用环境变量 GOOS 来指定目标操作系统,用于交叉编译或跨平台开发。darwin 是指苹果公司的操作系统系列,主要是 macOS。 通过设置 GOOSdarwin&#x…...

hfish蜜罐docker部署
centos 安装 docker-CSDN博客Docker下载部署 Docker是我们推荐的部署方式之一,当前的版本拥有以下特性: 自动升级:每小时请求最新镜像进行升级,升级不会丢失数据。数据持久化:在宿主机/usr/share/hfish目录下建立dat…...

我的创作纪念日——redis的历史纪录
机缘 最开始只想存留点Redis的操作信息,后来写着写着也就写多了,虽然后面很长时间由于忙就没继续写,但是还是偶尔登录看一下,有好几篇文章的浏览量还是很多的呢。 收获 收获不多,粉丝也才三十多个,浏览量感…...

【Bootstrap5学习 day10】
Flex布局 弹性盒子是CSS3的一种新的布局模式,更适合响应式的设计 创建一个弹性盒子容器 使用d-flex类,创建flexbox容器并将直接子项转换为flex项 <div class"d-flex p-3 bg-info text-white"><div class"p-2 bg-secondary"…...
2024年学习计划
2024-2-29号完成 机器视觉基础知识学习,并可以处理视觉工作中的需求。 2024-3月份学习SCARA机械手应用开发SCARA机器人-埃斯顿自动化 - ESTUN 2024-4月份继续学习python 好了,今年可以完成这三个目标就满足了 好好学习,天天向上。每天进步…...

学习笔记:C++之 switch语句
Switch语句 作用:执行多条件分支语句 语法: switch(表达式){ case 结果1:执行语句;break; case 结果2:执行语句;break; ... default:执行语句&a…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...