首页
学习
活动
专区
圈层
工具
发布

hls中ts切片切割核心逻辑深入分析

那么,我们就很有必要了解在 hls 中生成 ts 切片的内在逻辑,今天本文就来进行相关逻辑的解密。一、相关参数1、-f参数 f 是用来指定目标文件的输出封装格式,比如 hls、flv、mp4 等。...2、-hls_time参数 hls_time 在 ffmpeg 命令中就是用来控制 ts 切片目标时长的,单位是秒。...为了更好的理解上面的参数,我们展示一个命令示例:ffmpeg -f flv -i rtmp://input -c copy -f hls -hls_time 2 -hls_flags split_by_time...out.m3u8二、核心切割逻辑1、音视频差异音频和视频切片的逻辑还是有所不同的,出现差异的根本原因是视频依赖关键帧进行切割,而音频没有关键帧的概念,音频更多的还是依赖时间戳进行切割。...2.3 初始化分段如果指定了 hls_init_time > 0,那么 ts 切片会动态调整为初始分段和常规分段的不同时长,生成前后时长不一致的 ts 切片。

38600

FFMPEG Tips (3) 如何读取

[1 ]  音频帧还是视频帧 [2 ]  关键帧还是非关键帧 [3 ]  帧的数据和大小 [4 ]  时间戳信息 2.  为什么要关注这些信息 ?...[1 ]  音频帧还是视频帧 -> 分别送入音频/视频××× [2 ]  关键帧还是非关键帧 -> 追帧优化 [3 ]  帧的数据和大小 -> 取出帧的内容 [4 ]  时间戳信息 -> 音视频同步 3...3.1 如何判断是音频帧还是视频帧 上一篇文章我们提到过,使用下面的方法,获取码流中的 video_stream_idx 和 audio_stream_idx int video_stream_idx ...帧的数据和大小直接定义在 AVPacket 结构体中,对应的成员变量如下: // 压缩编码的数据,一帧音频/视频 uint8_t *data; // 数据的大小 int size; 3.4 如何获取帧的时间戳信息...每一个帧都可能携带有 2 个时间戳信息,一个是解码时间戳 dts,一个是显示时间戳 pts,解码时间戳告诉我们什么时候需要解码,显示时间戳告诉我们什么时候需要显示,只有在码流中存在 B 帧的情况下,这两个时间戳才会不一致

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于开源软件FFmpeg视频抽帧的学习

    文本将讲解视频抽帧的几种方法,具体包括以下几种抽帧方式: 抽取视频关键帧(IPB帧) 抽取视频场景转换帧 按照时间进行均匀抽帧 抽取制定时间的视频帧 在进行讲解具体的抽帧方式之前,我不得不介绍下FFmpeg...FFmpeg是一套可以用来编码、解码、合成和转换音频和视频数据的开源软件,提供了非常全面的音视频处理功能。如果你的工作内容是视频相关,那么ffmpeg是必须要掌握的软件了。...抽取视频关键帧(IPB帧) 视频关键帧(Video Keyframes)是用于视频压缩和视频编解码的帧,视频关键帧是包含了完整信息的帧,其他的非关键帧将会使用与关键帧的差值进行压缩。...在视频检索和视频分类任务中一般都借助`I帧`来完成,在一个时长60s的视频中,可以抽取得到16个I帧、84个P帧和184个B,I帧数量少包含的信息却是最多的。.../measure/scene.py 但是在我自己试验的过程中发现scikit-video中的场景检测非常慢,一个视频需要几分钟才能计算得到结果。

    4.7K20

    解密FFmpeg播放track mode控制

    上一篇文章我们解决了在FFmpeg下如何处理H264和AAC的扩展数据,根据解出的NALU长度恢复了H264的起始码和AAC的ADTS头,这样一般来说播放是没有问题。...Flags:seek标志,可以设置为按字节,在按时间seek时取该点之前还是之后的关键帧,以及不按关键帧seek等,详细请参考FFmpeg的avformat.h说明。...time_scale、time_base都能通过流信息获取到,请参考前面的文章。...之后用av_read_frame获取到该关键帧。完成该帧解码显示后,再在该帧的PTS时间上减去一小段时间后seek,这样一直重复上述结果,过程如下图: ?...在特定的情况下还可以先全部走一遍所有帧,并记录下全部的I帧的时间戳、帧编号、位置信息等需要的信息,然后直接从该表里面获取信息后进行seek和读取这些关键帧进行快速播放。

    2.2K131

    FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务

    的“vhost __defaultVhost__”节点内部添加下面一行:gop_cache   on;该行配置的作用是开启缓存关键帧,实际应用记得设置为on,否则客户端拉流找不到关键帧就无法渲染画面。.../objs/srs -c conf/srt.conf &在SRS启动之后,运行下面的ffmpeg命令即可将视频文件向SRT地址推流。...注意,务必确保Linux服务器上的FFmpeg已经集成了libsrt库,否则ffmpeg无法向srt地址推流,详细的集成步骤参见之前的文章《Linux环境给FFmpeg集成libsrt和librist》...开发实战:从零基础到短视频上线》一书“1.3  Windows系统安装FFmpeg”的介绍,在个人电脑上安装FFmpeg并打开MSYS的命令行,运行下面的ffplay命令,期望从SRT地址拉流播放。...表示请求也就是用于拉流方。

    85510

    FFmpeg从入门到精通笔记之四

    H.264的编码器,而是由第三方模块对其进行支持,例如x264和OpenH264。...- 控制场景切换关键帧插入参数sc_threshold。...在FFmpeg中,通过命令行的-g参数设置以帧数间隔为GOP的长度,但是当遇到场景切换时,例如从一个画面突然变成另外一个画面时,会强行插入一个关键帧,这时GOP的间隔将会重新开始,为了避免这种情况的产生...在FFmpeg中进行MP3编码采用的是第三方库libmp3lame,所以进行编码时,需要设置编码参数acodec为libmp3lame, 平均码率编码参数ABR.是VBR与CBR的混合产物,表示平均码率编码...FFmpeg可以支持AAC的三种编码器:1).aac:FFmpeg本身的AAC编码实现;2).libfaac:第三方的AAC编码器;3).libfdk_aac:第三方的AAC编码器 FFmpeg中的AAC

    2.9K20

    Android FFmpeg系列12--导出GIF

    在前面的Android FFmpeg系列03--视频解码与渲染一文中,我们了解了FFmpeg的解码API和整个解码流程,本文通过一个小案例来了解下FFmpeg中的编码API和整个编码流程 案例 将输入的...MP4文件视频流中的关键帧编码为GIF文件(不过这里导出的GIF文件是针对原视频的,滤镜和水印效果没有加上,下期再开文章细说) 编码流程 编码流程如上述流程图所示,代码封装在FFVideoWriter...类中 输入MP4文件视频流的关键帧读取我们复用Android FFmpeg系列09--抽帧与快速抽帧一文中封装的FFVideoReader类 在Reader中新增跳过非关键帧的type(关于skip_frame...可以参考Android FFmpeg系列10--seek优化) 接口封装 在FFMpegUtils.kt中提供工具类接口 JNI实现:通过reader循环读取出输入文件的关键帧AVFrame,然后通过...writer进行编码和写入文件 GIF产物 将编码出来的gif产物导到电脑端查看,效果如下 完整代码可以点击文末的"阅读原文"获取,如有问题可以在github中提issue哦 ~~END~~

    32610

    FFmpeg入门 - 前置基础

    也就是说在压缩成 B帧前,它会参考它前面的非压缩视频帧,和后 面的非压缩的视频帧,记录下前后两帧都不存放的“残差值”,这样可以达到更好的压缩率; 所以加入当前视频帧的编排顺序为 I B B P 则当视频文件播放时...,解码的顺序为I->P->B->B 即关键帧I、向前 参考帧 P、向前向后参考帧B、向前向后参考帧B。...DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的. 4,音视频开发技术可以做的事情 视频编解码...- 后台 应用在后台的视频编解码技术常用的是 FFmpeg,一款优秀的视频编解码应用技术,属于软件编解码。...OPENCV 计算机视觉库、可以做图像识别、当然也可以实现音视频编解码,因为其底层也是调用 FFmpeg openGL的 图像渲染库,你以为微视、抖音上的小姐姐那么美若天仙的原因是什么?答:是渲染啊!

    93620

    《FFmpeg从入门到精通》读书笔记(三)

    写在前面 2019.06.20 第四章 FFmpeg转码 ---- FFmpeg转码 FFmpeg软编码H.264与H.265 FFmpeg本身不支持H.264的编码器,是由FFmpeg的第三方模块对其进行支持...另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。...从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。...将scenecut设为0,相当于设定 no-scenecut 在FFmpeg中,通过命令行的-g参数设置以帧数间隔为GOP的长度,但是当遇到场景切换时,例如从一个画面跳到另一个画面,会强行插入一个关键帧...---- FFmpeg输出MP3 FFmpeg使用第三方库libmp3lame即可编码MP3格式 ffmpeg -i INPUT -acodec libmp3lame OUTPUT.mp3 控制质量需要通过

    1.7K20

    FFmpeg优化 苏宁PP体育视频剪切效率提升技巧

    在PP体育,我们在使用与业界同样高效的设计模式和优化方案的同时,另外尝试了换一种角度来思考这个问题,并进行了实践。下面我们来针对这部分的构思和实践中碰到的问题,来做个分享。...对于视频来说,无论是何种编码,何种封装格式,拆分开看,都是由音频流和视频流来组合而成的。从数据的最低层级往上推,会发现一个视频文件会由以下几个层面的数据组成。 1. 第一层是乱序的二进制数据层。...部分方案会和转码模块合并到一起,也有的厂商两样将分析视频的结果列表,也利用服务器集群来进行并发的切割操作。通常这种方案会直接使用FFmpeg套件来完成切割的动作。...因为视频GOP长度因素存在,经常会出现起始点视频帧并非关键帧。而FFmpeg切割程序代码需要找到切割起始点的视频关键帧,才能正常完成视频帧层面的切割动作。...所以FFmpeg程序会计算查找当前视频帧的GOP关键帧后,再以此GOP关键帧为起始点来作为切割起始点。此种方式下会导致真实切割点与原始需求切割点是不一致的情况。导致切割出来的视频起止点并不精确。

    1K30

    【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )

    , 关键帧是一帧的 完整数据, 可以独立解码出来; ( 1 ) 可独立播放的帧组 : 从数据中任意抽出连续帧 不一定能够播放, 必须是 关键帧 及 关键帧以后的帧 才能播放出来; 关键帧之前的数据如果没有前面的关键帧是解码不出来的...; ( 2 ) 低帧率应用 : 在实时性要求不是很高的监控环境中, 1秒钟一帧, 只要将关键帧解码显示出来即可; ( 3 ) 关键帧丢失 : 如果关键帧丢失, 那么依赖于该关键帧的后面的 B 帧 和 P...-3.4/android/armv-7 make install 5.编译结果 : 安装完成后的 头文件 和 库 , 在 --prefix=$PREFIX 配置选项中配置的结果输出路径是 ffmpeg.../ffmpeg_android.sh 开始执行该 shell 脚本; 6.查看执行结果 : ---- 四. Android Studio 中项目导入 FFMPEG 及 配置 1....编译时的配置 ---- 打印 FFMPEG 编译配置 : 之前的步骤 ① Linux 平台编译 ② CMake 配置 ③ Gradle 配置 执行完后, 在执行下面的操作; 1.导入头文件 : /*

    4.6K20

    web端rtmp推拉流测试、抽帧识别计数,一键式生成巡检报告

    本文旨在实现无人机城市交通智慧巡检中的一个模块——无人机视频实时推拉流以及识别流并在前端展示,同时,统计目标数量以及违停数量,生成结果评估,一并发送到前端展示。...│ │ │ ├── 原视频 │ │ │ └── 识别视频 前端代码因保密不方便展示,可自行根据后端端口续写,后端Django完整代码在文章末尾,请查收!!!...6、为后端添加车辆运动状态算法,若连续识别的两个帧同一目标静止,并且识别为违停,则判断为违停;若非静止但识别违停,不做处理。相对静止判断?无人机在动,无法建立参考系。 7、进行车牌识别。...代码及粗略解释: detection_consumer.py: 此处代码使用 FFmpeg 拉取 SRS 上的流,并使用 detection_engine 中的类进行帧识别和计数,然后判断计数,调用讯飞星火...,consumer 拉到的每一个流都会调用该类中的 process_frame 类方法,并同时进行计数和关键帧保存。

    37600

    更高效直观,腾讯云媒体处理MPS视频评测系统帮助企业精准权衡性能成本

    两个视频的视频帧在输入到 filter 前必须有相同的分辨率和像素格式,同时也假定两个视频有相同的帧数。...两个视频的视频帧在输入到 filter 前必须有相同的分辨率和像素格式,同时也假定两个视频有相同的帧数。...MPS视频评测系统 为降低视频评测的使用门槛,提高评测效率,直观展示评测结果,腾讯云媒体处理服务 MPS 上线了视频评测系统。您可前往媒体处理控制台,在【更多服务】中选择【转码评测】,使用相关功能。...用户可以在评测详情页查看评测结果,导出 PDF 格式的评测报告。 系统还支持对输入的多个视频进行同屏对比,在同一页面下同时播放多个输入视频,展示视频帧的分数随时间的变化。...用户可以在评测详情页查看评测结果,导出 PDF 格式的评测报告。

    87910

    基于机器学习的启动耗时自动化测试方案

    ,而且也无法基于技术埋点获取竞品数据;另一个是通过录屏分帧测试,但是人工录屏逐帧分析会有人为感知误差(结束位边界认知不一致),而且人工性能专项测试持续交付ROI不高,比如录制10次,抽取关键帧取平均值,...scipy: 图片处理库OpenCV和imutils: 对视频文件进行分帧处理的ffmpeg: 安装airtest框架(网易的一个跨平台的UI自动化框架): 安装poco框架(网易的一个跨平台的...启动应用 测试前对被测应用进行安装,然后在点击完权限弹框后,杀掉进程重新点击桌面icon启动应用。 等录屏结束后杀掉进程,然后重复上面的启动过程,根据采样率决定重复几次。...预测验证 加载预先训练好的模型,使用模型在测试集上进行数据预测,测试结果表明,对于启动阶段的图像分类可以获得比较好的效果。...效果 通过人工录屏,然后用QuickTime分帧查看时间轴,计算出的首屏加载耗时跟这套方案得到的结果误差基本在100毫秒以内,但这个过程一次取数需要15分钟左右,而现在这套方案一次取数只需要3分钟左右,

    79010

    基于WebRTC的开源低延时播放器实践

    通过FFMPEG从CDN中拉流,放到缓冲区中,然后进行解码、音画同步和渲染等。缓冲区一般设置为3到5秒。...如果接入云信的低延时SDK,只要把云信的SDK编到FFMPEG中,作为FFMPEG的第三方插件,后续的整个流程不需要任何的改动,只需要把缓冲区降为0。...直播和RTC存在一些区别,直播在接入时没法请求关键帧等,如果服务器不缓存GOP,在订阅流时,服务器因为没有关键帧可以发,需要等待下一个关键帧到来才行。这会对首帧带来很大的影响。...假如在订阅流的时候是P帧,服务器发送缓存数据帧到某个P帧时,服务器收到了下一个关键帧,这个时候服务器会直接从当前P帧跳跃到下个关键帧,P帧和关键帧之间一段数据全部丢掉,重编关键帧及其后面帧的时间戳,保证时间戳连续...---- ▼识别二维码或猛戳下图订阅课程▼ ---- 扫描图中二维码或点击阅读原文 了解大会更多信息 喜欢我们的内容就点个“在看”吧!

    4.1K20

    FFmpeg推流命令总结

    -s——设置画面的宽与高。 -aspect——设置画面的比例。 -vn——不处理影像,于仅针对声音做处理时使用。...20  设置帧率为20帧/s -g 20 GOP间隔,每隔20个帧为一个GOP,两个关键帧之间的帧数称为一个GOP,将关键帧帧间隔设置为1s,也就是每秒一个关键帧 -keyint_min 20   最小关键帧间隔...  -an 没有音频,“-an”(no audio)和“-vn”(no video)分别用来单独输出视频和音频 -f:rtp 强制ffmpeg采用某种格式,后跟对应的格式。.../kczfrr.m3u8 web页面播放m3u8,一方面可以使用腾讯的js插件,另一方面就是使用video.js的插件: 引入相关资源     面的命令是用audio音频替换video中的音频ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental -map

    9K40

    FFmpeg输出hls时ts切片和m3u8索引动态更新解读

    前言众所周知,FFmpeg输出hls时,m3u8索引文件是在不断动态更新的,每当新的ts切片生成,就会更新一次m3u8文件。...但是,其中有很多细节需要我们深入探究,比如m3u8文件在更新时,如何避免读写不一致问题?所有ts切片的时长都是一样的吗?...当满足切割条件时,比如关键帧到达或者时间阈值到达时,就会停止当前ts切片的写入并存储到物理磁盘,同时,生成新的 index+1 的 ts 切片继续写入。...四、主要方法对应上面的主要过程,我们来看一下底层的代码。...最后,也可以通过下面的时序图加深理解:最后通过本文的介绍,我们了解了 FFmpeg 输出 hls 的关键步骤和主要方法,其逻辑清晰,涉及 init、header、packet、trailer、deinit

    1.1K10

    使用 Dify 和 AI 大模型理解视频内容:Qwen 2 VL 72B

    写在前面 最近一两周有好几位朋友线下聚的时候,聊起了端侧多模态模型,以及用端侧多模态模型做 RPA 和一些内容识别相关的业务场景。...关于视频帧抽取方案 之前的文章《使用 Redis 构建轻量的向量数据库应用:图片搜索引擎(一)[6]》和《开源软件 FFmpeg 生成模型使用图片数据集[7]》中,提到过使用 ffmpeg 来从视频中抽取关键帧...使用知乎“直达”快速获取参考方案 是不是看起来还挺全面的,在获取到类似上面的经验之后,接下来的任务就非常简单了,对上面的方案进行正确性判断和进一步理解:你可以继续使用知乎直答,或者将已经得到的知乎站内的大神经验...在聊天窗口输入我们要解析的图片 在聊天窗口中,输入这张图片,和一段还凑合的启动词,等待模型处理图片。 验收模型处理结果 稍等片刻,模型就给出了一个还不错的处理结果。...这个请求的输出结果如下: 当然,让我们一起来回顾制作人冯骥在采访中的一些金句,这些话不仅振奋人心,更是充满了智慧和洞见。 1."完成比完美重要" 这句话道出了游戏开发的一个核心真理。

    3.6K10

    FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址

    ​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。...注意,使用ffmpeg命令把视频文件推流给SRS时,要注意区分FFmpeg的版本,因为FFmpeg从6.1开始才给RTMP协议支持HEVC、VP9、AV1这三种视频编码器,所以FFmpeg 6.0和更早的版本只能以...rtmp://127.0.0.1/live/test而下面这种以HEVC格式(即H.265)向SRS推流的命令对于FFmpeg 6.0和更早的版本来说是错误的:ffmpeg -re -stream_loop...这是因为SRS默认没有缓存关键帧,使得拉流一开始没找到关键帧就黑屏了。解决办法是修改SRS配置,指定开启缓存GOP,这样客户端在拉流时总能找到已缓存的关键帧。...打开srs安装目录下的conf/srs.conf,在“vhost __defaultVhost__”节点内部添加下面一行:gop_cache   on;该行配置的作用是开启缓存关键帧,实际应用记得设置为

    1.3K10

    使用Python3+ffmpeg对视频进行精确截取的探索

    精确截取视频 1.1 根据原视频,截取产生1个包含很多关键帧的视频step1_output_larger.mkv 1.2 根据step1_output_larger.mkv微调原截取开始时间和持续时间...1.3 根据step1_output.mkv和微调后的开始时间和持续时间产生step2_output.mkv 1.4 其他的处理 1.5 截取的一个示例 ---- 网上有很多ffmpeg对视频进行精确剪切的讨论...精确截取视频 仅以1个例子说明,步骤如下: 1.1 根据原视频,截取产生1个包含很多关键帧的视频step1_output_larger.mkv ffmpeg -y -ss 01:25:24.64 -t...4)*.mkv后的-ss 0 -t 9.8如果去掉,会导致*.mkv在重新进行编码时会花费大量的时间,我有点心疼我的电脑...,所以就加上了,加上后效果很明显,编码很快,和闪电侠一样快。...1.4 其他的处理 主要是指: 声音和视频的渐入fade_in和渐出fade_out,详细可研究ffmpeg文档; 将mkv转成mp4,同时将mkv的字幕烧写到mp4中,详细可研究ffmpeg文档。

    1.6K20
    领券