当前位置: 首页 > news >正文

读书之深入理解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 (头文件和文件内容&#xff0…...

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!) # 打印字符串多行注释&#xff1…...

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的一种新的布局模式&#xff0c;更适合响应式的设计 创建一个弹性盒子容器 使用d-flex类&#xff0c;创建flexbox容器并将直接子项转换为flex项 <div class"d-flex p-3 bg-info text-white"><div class"p-2 bg-secondary"…...

2024年学习计划

2024-2-29号完成 机器视觉基础知识学习&#xff0c;并可以处理视觉工作中的需求。 2024-3月份学习SCARA机械手应用开发SCARA机器人-埃斯顿自动化 - ESTUN 2024-4月份继续学习python 好了&#xff0c;今年可以完成这三个目标就满足了 好好学习&#xff0c;天天向上。每天进步…...

学习笔记:C++之 switch语句

Switch语句 作用&#xff1a;执行多条件分支语句 语法&#xff1a; switch&#xff08;表达式&#xff09;{ case 结果1&#xff1a;执行语句&#xff1b;break&#xff1b; case 结果2&#xff1a;执行语句&#xff1b;break&#xff1b; ... default&#xff1a;执行语句&a…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

Python爬虫(一):爬虫伪装

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

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

深度学习习题2

1.如果增加神经网络的宽度&#xff0c;精确度会增加到一个特定阈值后&#xff0c;便开始降低。造成这一现象的可能原因是什么&#xff1f; A、即使增加卷积核的数量&#xff0c;只有少部分的核会被用作预测 B、当卷积核数量增加时&#xff0c;神经网络的预测能力会降低 C、当卷…...