FFmpeg开发实战指南
文章平均质量分 78
从事技术研发10多年,有丰富的线上项目实战和实施经验,本小博乃点滴工作及项目实战总结积累,精华知识记录, 从入门到进阶,绝对物超所值,内容通俗易懂,代码,正版工具软件,开发文档精中选精,一应俱全,微信、QQ提供在线指点和帮助。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
FFmpeg视频录制详解
以上对象初始化完成后,需要将codec的信息拷贝到AVFormatContext对象中,以便与将编码器信息存储到文件中,这个操作可以通过avcodec_parameters_from_context操作。注意,有些编码器只支持一些固定的帧率,对于这样的编码器,AVCodecContext中的time_base是不能随便设置的,当写文件头失败时,可以检查一下这一点。(1).初始化ffmpeg的基本对象,并将这些对象关联起来,然后打开文件并写入文件头。av_write_frame用于将编码后的数据写入文件。原创 2023-09-30 21:33:54 · 1539 阅读 · 1 评论 -
每个C++开发者都应该使用的十个C++11特性
C++11包含了很多内容,以上内容只是对一系列C++核心技术以及标准库特征的用法的简单介绍,如果想要更深入的了解,大家可以再根据每个知识点找一些更加细节的资料区深入学习。原创 2022-10-30 20:45:01 · 1444 阅读 · 0 评论 -
FFmpeg AVPacket详解
操作AVPacket的函数大约有30个,主要可以分为:AVPacket的创建初始化、AVPacket中的data数据管理(clone,free,copy等)、AVPacket中的side_data数据管理。AVPacket的创建有很多种,而由于Packet中的数据是通过data引用的,从一个Packet来创建另一个Packet有多种方法。av_read_frame 这个是比较常见的了,从媒体流中读取帧填充到填充到Packet的数据缓存空间。原创 2022-07-31 20:53:36 · 1162 阅读 · 0 评论 -
FFmpeg 的AVCodecContext结构体详解
AVCodecContext 是FFmpeg使用过程中比较重要的结构体,它包含了编解码(codec)的所有信息。FFmpeg 是一个开源的音视频处理框架,广泛用于音视频的编码、解码、转码、mux、demux、流处理、过滤等领域。在 FFmpeg 库中,AVCodecContext 是处理媒体数据流中最为核心的结构之一。它定义了编解码器(encoder/decoder)的相关操作以及处理媒体数据所必须的各种参数。原创 2022-07-31 20:30:55 · 1867 阅读 · 0 评论 -
Unbutu 安装FFmpeg的两种方法
本文介绍两种FFmpeg的安装方法,均可以完美安装和使用FFmpeg,首先先介绍第一种方法:下载源码手动安装,此方法好处是,我们可以选择自己需要的版本的或者比较高的稳定版本的FFmpeg来进行安装。原创 2022-05-31 21:27:10 · 6953 阅读 · 0 评论 -
图像颜色空间详解
自然界的颜色千变万化,为了给颜色一个量化的衡量标准,就需要建立色彩空间模型来描述各种各样的颜色,由于人对色彩的感知是一个复杂的生理和心理联合作用 的过程,所以在不同的应用领域中为了更好更准确的满足各自的需求,就出现了各种各样的色彩空间模型来量化的描述颜色。我们比较常接触到的就包括 RGB / CMYK / YIQ / YUV / HSI等等。 对于...原创 2020-02-28 22:19:59 · 2990 阅读 · 0 评论 -
AV1 码流分析器的搭建
作为HEVC比较热门的继承者,AOM推进的AV1在2018年进入了大家的视野。研究AV1的新编码工具离不开一个强大的码流分析工具。AOM 得益于开源社区的贡献,其码流分析工具也在同步的推出,给研究AV1新编码工具的小伙伴带来省去不少麻烦。本文主要简单介绍一下如何搭建一个本地的AV1码流分析工具以及在大家过程中遇到的问题。1. AV1码流分析工具简单介绍AV1码流分析工...转载 2020-01-30 22:19:35 · 2679 阅读 · 0 评论 -
Windows 编译安装H265
H.265,也被称为高效视频编码(HEVC),是一种用于视频压缩的新一代标准。它旨在比其前身H.264提供更高的数据压缩率,以便于在保持相同视频质量的同时减少带宽消耗或在相同的带宽下提供更好的视频质量。下面我们详细说下如何从源码编译安装H.265编解码器。原创 2020-02-28 22:16:13 · 2064 阅读 · 0 评论 -
RTCP、TCP、UDP三种协议对比
在当下数字时代,网络协议是数据交换的基础。无论是浏览网页、发送电子邮件、在线游戏,还是视频会议,每一种网络活动都依赖于一套规则和标准,即协议。本文我们将深入探讨三种重要的网络协议:RTCP(实时传输控制协议)、TCP(传输控制协议)和UDP(用户数据报协议),以及它们之间的区别和应用场景。在选择网络协议时,我们必须根据应用的特定需求做出选择。TCP提供可靠的数据传输,适用于那些不能容忍错误的应用。相反,UDP适用于对实时性有高要求的应用,它牺牲了一些可靠性以换取速度和效率。原创 2020-04-28 22:36:06 · 2159 阅读 · 0 评论 -
浅析HEVC/H.265编码器中的熵编码
在保证视频图像质量的前提下,HEVC通过增加一定的计算复杂度,可以实现码流在H.264/AVC的基础上降低50%。为了实现目标,HEVC采用了一些全新的编码技术,比如:基于LCU(Largest Coding Unit)和四叉树(Quad Tree)的灵活编码结构[1]、大尺寸变换单元结构的选择[3]、改进的去方块滤波技术以及HEVC的并行化改进设计等。今天主要介绍一下HEVC/H.265编器码中的熵编码。转载 2020-03-29 21:57:18 · 5042 阅读 · 1 评论 -
获取HEVC视频的ParameterSets
获取ParameterSetsHEVC视频存放SPS,PPS的数据结构与H264类似官方定义参考https://lists.matroska.org/pipermail/matroska-devel/2013-September/004567.htmlHEVCDecoderConfigurationRecord:// The CodecPrivate syntax shall ...原创 2020-04-28 22:36:50 · 738 阅读 · 0 评论 -
FFmpeg音频编解码处理详解
FFmpeg是一个非常强大的工具,它可以处理几乎所有类型的音频编解码任务。通过对FFmpeg的了解和实践,你可以轻松地转换音频格式、调整音质、添加效果以及执行更复杂的音频处理任务。在音频编解码的核心是对输入信号的精确理解和对输出需求的控制,而FFmpeg提供了这一切所需的工具和选项。原创 2020-02-29 21:33:25 · 1312 阅读 · 1 评论 -
ffmpeg filter过滤器 基础实例及全面解析
https://blog.csdn.net/newchenxf/article/details/51364105转载 2020-03-29 21:58:25 · 1768 阅读 · 0 评论 -
GoPro中的THM、LRV文件详解
GoPro是美国运动相机厂商。GoPro的相机现已被冲浪、滑雪、极限自行车及跳伞等极限运动团体广泛运用,因而“GoPro”也几乎成为“极限运动专用相机”的代名词。GoPro的创始人兼发明者是Nick Woodman。GoPro真正的魅力在于强大的配件加持,使整个拍摄录制视频的过程变得简单和有趣起来。最近终于入手了心念念的GoPro Hero6 Black,顺便配了一个小的伸缩自拍杆。原创 2020-03-29 21:57:52 · 19108 阅读 · 1 评论 -
使用IOS原生的UIVideoEditController进行视频编辑
UIVideoEditorController类包含了由系统提供的界面,使用户可以交互式的剪切视频。UIVideoEditorController对象处理用户的交互并且提供把编辑后的视频的文件系统路径提供给UIVideoEditorControllerDelegate对象.UIVideoEditorController只支持能够支持视频编辑的设备.我们设置好它的delegate及videoPath属性,并将其展示出来。(经过videoQuality属性,也可以通过这个类将视频重新编码成质量较低的格式)。原创 2021-04-28 22:53:06 · 720 阅读 · 0 评论 -
iOS 媒体库完整流程
在 iOS 中,媒体库(Mediabrary)是指设备上的照片、视频、音乐等多媒体内容。如果您指的是如何编程访问和操作 iOS 设备上的媒体库,那么这涉及到使用 Apple 的开发工具和 API,具体如下。iOS设备不仅仅是一部手机,它更像是一个随身携带的媒体中心。iPhone里可以存储着数以千计的照片、视频、音乐和播客。在这个数字化时代,能够有效地管理这些内容对我们的日常生活和工作至关重要。我使用的第一个功能是“照片”App。原创 2021-04-28 22:59:54 · 1057 阅读 · 0 评论 -
FFMPEG 硬件解码API介绍
一般来说我们把使用CPU通用计算单元(无论是Intel还是AMD)就是软解;用专用芯片模组(GPU、QSV等)就是硬解。原创 2021-04-28 23:13:46 · 2981 阅读 · 1 评论 -
36款开源的经典音视频项目
音视频流媒体在现在的生活中已经无处不在,拥有一大批顶级的音频/视频工具确实派得上用场。修剪文件、编辑视频、最大化音频――我们需要满足社交媒体流的传播需求,而公司总是需要音频/视频内容,以便与用户进行最有效的沟通。本文介绍的这些音频/视频应用程序有望大大节省用户的成本。下列开源应用程序可取代价格昂贵的商用音频/视频应用程序,并与他们有着非常相似的功能。视频编辑1.Cinelerra取代对象:Adobe PremiereCinelerra的下载量已超过100万人次,这是一种成熟的高质量视频.转载 2021-11-30 21:36:52 · 2165 阅读 · 0 评论 -
RTP和RTCP协议精讲
实时传输协议(RTP)为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。应用程序通常在 UDP 上运行 RTP 以便使用其多路结点和校验服务;这两种协议都提供了传输层协议的功能。但是 RTP 可以与其它适合的底层网络或传输协议一起使用。如果底层网络提供组播方式,那么 RTP 可以使用该组播表传输数据到多个目的地。RTP数据协议负责对流媒体数据进行封包并实现媒体流的实时传输,每一个RTP数据报都由头部(Header)和负载(Payl原创 2022-02-28 21:52:16 · 2247 阅读 · 0 评论 -
TCP拥堵控制机制详解
一、TCP拥堵产生的原因∑ 对资源的需求>可用资源注意 :单纯的增加网络资源无法解决问题例如:把结点的存储空间扩大,更换更高速率的链路,提高结点处理机的运算速度,不仅不能解决问题,而且可能使网络性能更坏。原因:网络拥塞是许多因素引起的,单纯的解决一个可能会使上述情况得到一些缓解,但是会把拥塞转移到其他地方。扩大结点存储空间——>由于输出链路的容量和处理机的速度并未提高,增大排队等待时间,超时重传,浪费资源。 更换更高速率的链路——>可能会缓解,有可能造成各部分不匹配原创 2022-03-31 23:14:41 · 2670 阅读 · 0 评论 -
FFmpeg滤镜API用法详解(二)
一个滤镜图可能由多个滤镜链构成,每个滤镜链的输入节点就是 buffer 滤镜,输出节点是 buffersink 滤镜,因此一个滤镜图可能有多个 buffer 滤镜,也可能有多个 buffersink 滤镜。滤镜(AVFilter)需要通过滤镜实例(AVFilterContext)引用,为 buffer 滤镜创建的滤镜实例是 fctx->bufsrc_ctx,用户通过往 fctx->bufsrc_ctx 填入视频帧来为滤镜链提供输入。buffer 滤镜是滤镜链中的第一个滤镜,因此只有输出引脚而无输入引脚。原创 2021-11-30 21:51:58 · 647 阅读 · 1 评论 -
FFmpeg转码流程详解
FFmpeg是一个非常强大的开源多媒体框架,它支持几乎所有的视频和音频格式,并且能够实现转码、录制、转流、以及播放等功能。容器格式的转换,比如MP4转换为MOV容器中音视频数据编码方式转换,比如H264编码转换成MPEG4编码,MP3换为AAC音视频码率的转换,比如4M的视频码率降为2M视频分辨率的转换,比如1080P视频变为720P,音频重采样等等。原创 2021-11-30 21:38:41 · 4040 阅读 · 0 评论 -
FFmpeg播放视频流程详解
利用FFmpeg播放视频需要理解视频播放的基本流程,包括初始化FFmpeg, 打开视频文件, 查找视频流, 解码视频流, 以及转换和渲染视频帧。通过本文的介绍和代码示例,大家应该能够开始使用FFmpeg进行基本的视频播放开发。请注意,为了让代码示例尽可能简洁,本文没有包括错误处理和内存管理的全部细节。在生产环境中,应该始终对所有可能的错误情况进行检查,并且确保及时释放所有分配的资源。此外,对于复杂的应用场景,可能需要考虑多线程或异步处理,以及音视频同步等问题。原创 2021-11-30 21:38:24 · 2897 阅读 · 0 评论 -
FFmpeg滤镜API用法详解(一)
FFmpeg滤镜API是libavfilter库中的一部分。图像大小和比例调整(scaling,cropping)颜色校正音频噪声减少和音量调整特效添加,如模糊和锐化视频转场效果字幕、时间码和水印的叠加/***/int flags;char *name;void *priv;原创 2021-11-30 21:48:19 · 6745 阅读 · 0 评论 -
使用Jrtplib实现RTP视频数据发送接收
Jrtplib 是一个功能强大的库,可用于实现 RTP 视频流的发送和接收。它抽象了协议的复杂性,提供了一系列简洁的 API。然而,对于开发者来说仍需有网络编程的基础知识,以及对 RTP 协议的理解。合理地处理错误、网络问题和资源使用,是开发稳定 RTP 应用程序的关键。通过上述步骤和注意事项,开发者可以有效地使用 Jrtplib 库来构建自己的多媒体通信应用。原创 2022-02-28 22:20:52 · 977 阅读 · 0 评论 -
基于C/S架构的完整RTP/RTCP的H264/H265视频传输方案实现
在C/S架构中,客户端负责向服务器发送请求并接收服务器响应,而服务器则处理这些请求并管理资源。在视频流传输中,服务器通常负责视频的编码和分发,而客户端则负责解码和播放。RTP(Real-Time Transport Protocol)是一种网络协议,用于传输实时数据,如音频和视频。它广泛用于通信和娱乐系统中的流媒体。RTCP(Real-Time Transport Control Protocol)是RTP的姊妹协议,用于监控数据传输质量,并提供关于媒体流的统计信息。原创 2022-02-28 22:02:57 · 1136 阅读 · 0 评论 -
使用FFmpeg获取视频每一帧的信息
使用FFmpeg提取视频每一帧的信息是一个简单而强大的过程。通过上述的步骤和代码示例,我们可以轻松地将视频文件转换成单独的帧图片,进行进一步的分析和处理。FFmpeg的灵活性和功能强大,使其成为视频处理领域的一个不可或缺的工具。无论是应用于视频编辑、动画制作还是计算机视觉研究,掌握使用FFmpeg提取视频帧的技能都将极大地扩展我们的多媒体处理能力。原创 2021-12-30 22:52:39 · 3848 阅读 · 0 评论 -
FFmpeg硬件解码API介绍
硬件解码可以显著提升视频处理的效率,尤其是在处理高清视频流时。FFmpeg作为一款功能强大的多媒体框架,提供了对多种硬件解码API的支持。开发者在使用时需要注意选择合适的硬件解码API,以及确保视频格式与所选硬件加速解码器的兼容性。通过上述介绍和代码示例,基本上现在对如何在FFmpeg中使用硬件解码有了基本的了解。在实际开发中,还需要考虑错误处理、内存管理以及与其他FFmpeg组件的交互等问题,需要根据实际情况进一步优化。原创 2021-12-30 22:43:47 · 2368 阅读 · 0 评论 -
OpenCv实现多路播放
我们在实际的视频多路实现过程中,往往会遇到硬件资源不够的问题,那么如何在有限的资源下,实现多路的视频播放呢?在本文中,我们探讨了如何使用OpenCV库和C++语言实现多路视频的同时播放。通过多线程技术,我们可以有效地处理多个视频流,而OpenCV库提供了方便的视频流读取和显示接口。示例代码展示了一个基础的框架,可以根据实际需求进行功能扩展和性能优化。需要注意的是,实际应用中可能需要考虑更多的因素,例如,播放同步、错误处理、资源管理等,这些都需要在该基础框架上进一步完善。原创 2021-12-30 22:25:13 · 2572 阅读 · 0 评论 -
GOP和帧率、码率的关系
关键帧的周期,也就是两个IDR帧之间的距离,一个帧组的最大帧数,一般而言,每一秒视频至少需要使用 1 个关键帧。增加关键帧个数可改善质量,但是同时增加带宽和网络负载。需要说明的是,通过提高GOP值来提高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得原创 2021-11-30 21:38:11 · 3905 阅读 · 0 评论 -
基于FFmpeg将pcm+rgb编码并封装MP4
FFmpeg是非常强大好用的音视频处理库,功能强大,首先我们先说说如何配置使用FFmpeg。 FFmpeg官提供了3个版本:Static,Shared,Dev。介绍如下: 前两个版本可以直接在命令行中使用,他们的区别在于: Static里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,每个exe的体积都很大,相关的Dll已经被编译到exe里面去了。 Shared里面除了3个应用程序:ffmpeg.e原创 2021-11-30 21:37:19 · 370 阅读 · 0 评论 -
Wireshark The capture session could not be initiated on interface报错解决
Wireshark是一个广泛使用的网络协议分析器,它允许用户捕获和浏览在网络上传输的数据包。然而,用户有时可能遇到在尝试开始捕获会话时遇到错误消息 “The capture session could not be initiated on interface” (无法在接口上启动捕获会话) 的问题。比如Mac跟新完WireShark以后,发现启动WireShark抓包爆如下错原创 2021-09-29 22:30:03 · 1534 阅读 · 0 评论 -
GB28181平台对接接口详解
28181平台对接接口详解信令接口:1.1 平台注册下级平台主动向上级平台注册; 注册鉴权信息(用户名和密码)由上级提供;举例说明:下级--->上级REGISTER sip:62010000002000000001@10.130.140.82:7100 SIP/2.0Call-ID: c82dee890ea56d9d332fe4a5dbd2772c@10.129.4.21 CSeq: 1 REGISTERFrom: <sip:620102010020000000.原创 2021-09-29 22:29:22 · 2917 阅读 · 1 评论 -
OBS数据采集及渲染过程
1.OBS的数据采集和渲染,在程序启动时 会调用 obs_init_video函数,创建一个obs_video_thread 线程static int obs_init_video(struct obs_video_info *ovi){ struct obs_core_video *video = &obs->video; struct video_output_info vi; int errorcode; make_video_info(&vi, ovi);原创 2021-06-27 22:32:11 · 1514 阅读 · 0 评论 -
多轨道音视频同步编辑方法与流程
1、多轨道音视频同步编辑方法背景 目前录制课件视频普遍采用只录制屏幕,成果文件即为屏幕视频文件,在过程中只有通过对屏幕的操作展现所要表达的内容,过程中需要辅助摄像头介入的时候普遍采用第三方软件调出摄像头在屏幕上面展示,而多个摄像头时还存在多次确认的过程,切换摄像头也不方便,且此时还不能单独录制摄像头;或者只录制摄像头,在过程中想要展示屏幕内容,此时比较简便的方法就是通过摄像头拍摄屏幕且需要手动调整,但此时拍的屏幕会存在几种情况例如变形,局部放大和外围屏幕边缘,使得整个视频中表现极为不协调,在...转载 2021-06-27 22:34:44 · 1840 阅读 · 0 评论 -
视频精准剪切总结(二)
1.常见视频精准剪切问题ffmepg剪切视频,很方便,但是也有很大缺陷:(1)剪切时间点不精确(2)有时剪切的视频开头有黑屏 造成这些问题的原因是ffmpeg无法seek到非关键帧上。 本文通过一些参数配置尽可能地减轻以上问题发生。2.基本剪切方法:ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4参数分析:-i : source -ss:start time -t :duration -c :video...原创 2021-06-27 22:33:17 · 448 阅读 · 0 评论 -
视频精准剪切总结(一)
要做精准剪切视频,那么第一个常用的办法就是使用Ffmpeg来切割视频,但是发现剪切出来的视频有些问题,效果跟实际上有偏差,剪切时间点不精确。剪切出来的视频因为视频关键帧前面和后面都会多出来一部分。ffmpeg -y -ss start -t duration -i filenam -codec copy 那么如何使得剪切的视频即准确又没有问题,查了很多资料,发现可以通过参数配置尽可能地减少问题:1.基本快速剪切方法 ffmpeg -i in...原创 2021-06-27 22:32:57 · 955 阅读 · 0 评论 -
ffmpeg提取视频文件中的多轨音频
在视频编辑中,我们需要对视频中的音频进行单独处理,这个时候,就需要我们对视频文件进行音频提取。1.音频文件提取,先查看视频文件信息:#ffmpeg -i "4K原码-08101136.ts"ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.3.1 (GCC) 20190414 configuration: --disable-static --enable-...原创 2021-06-27 22:33:51 · 2864 阅读 · 0 评论 -
FFmpeg进行推流的两种方法
FFmpeg的推流一般有两种:1.使用cmd进行推流,这种推流方式一般可用于简单的推流验证 这里拿原创 2021-05-30 22:00:48 · 28364 阅读 · 13 评论 -
OBS视频采集流程分析
1.OBS的初始化程序中,首先会调用ResetVideo,执行顺序如下:(1).ResetVideo—>(2).AttemptToResetVideo—>(3).obs_reset_video—>(4).obs_init_video—>(5).video_output_open—>(6).if (pthread_create(&out->thread, NULL, video_thread, out) != 0)最后创建了video_thread,我们原创 2021-04-28 23:00:57 · 2330 阅读 · 0 评论