当前位置: 首页 > 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…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...