草庐IT

golang基于FFmpeg实现视频H264编解码

文章目录一、基本知识1.1FFmpeg相关1.2H.264相关1.3YUV相关二、H264编码原理2.1帧类型分析2.2帧内/帧间预测2.3变换+量化2.4滤波2.5熵编码三、H264解码为YUV3.1代码逻辑及使用API3.2具体代码实现3.3YUV文件播放四、YUV编码为H2644.1代码逻辑及使用API4.2具体代码实现4.3H264文件播放一、基本知识1.1FFmpeg相关FFmpeg是领先的多媒体框架,能够解码、编码、转码、混合、解密、流媒体、过滤和播放人类和机器创造的几乎所有东西。它支持最晦涩的古老格式,直到最尖端的格式。无论它们是由某个标准委员会、社区还是公司设计的。它还具有高度

(智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验

多核并行主要有两个方面一,程序,变量储存地址设置二,运行核选择一、内存分配概念及过程描述尽量将不同的功能划分为各个模块,然后交给不同的cpu运行。或者说不同的cpu负责运行不同的功能,cpu之间以少量的参数进行配合交互,这样可以尽最大化利用多核cpu的资源效率。具体做法尽量将.h以及相关函数都存放在#pramasectionall"cpux_dsram"和#pragmasectionallrestore之间即可二、中断配置1.概念及过程描述(可跳过直接去看2.具体操作)我在一开始使用TC377时一直有个疑问就是,把变量和函数放到那个cpux_main,然后在哪里申请中断就是那个cpu提供中断服

(智能车比赛)基于 ADS 逐飞库 英飞凌 TC264 377系列 的多核使用经验

多核并行主要有两个方面一,程序,变量储存地址设置二,运行核选择一、内存分配概念及过程描述尽量将不同的功能划分为各个模块,然后交给不同的cpu运行。或者说不同的cpu负责运行不同的功能,cpu之间以少量的参数进行配合交互,这样可以尽最大化利用多核cpu的资源效率。具体做法尽量将.h以及相关函数都存放在#pramasectionall"cpux_dsram"和#pragmasectionallrestore之间即可二、中断配置1.概念及过程描述(可跳过直接去看2.具体操作)我在一开始使用TC377时一直有个疑问就是,把变量和函数放到那个cpux_main,然后在哪里申请中断就是那个cpu提供中断服

H264编码基础概念+格式分析

一、编码基础概念1、为什么要进行视频编码?视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成。一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧画面(一般是30帧),假如该视频是一个1280x720分辨率的视频,那么不经过编码一秒钟的大小:结果:1280x720x60≈843.75M所以不经过编码的视频根本没法保存,更不用说传输了。2、视频压缩编码标准视频中存在很多冗余信息,比如图像相邻像素之间有较强的相关性,视频序列的相邻图像之间内容相似,人的视觉系统对某些细节不敏感等,对这部分冗余信息进行处理的过程就是视频编码。H.26X系列(由ITU[

H264编码基础概念+格式分析

一、编码基础概念1、为什么要进行视频编码?视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成。一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧画面(一般是30帧),假如该视频是一个1280x720分辨率的视频,那么不经过编码一秒钟的大小:结果:1280x720x60≈843.75M所以不经过编码的视频根本没法保存,更不用说传输了。2、视频压缩编码标准视频中存在很多冗余信息,比如图像相邻像素之间有较强的相关性,视频序列的相邻图像之间内容相似,人的视觉系统对某些细节不敏感等,对这部分冗余信息进行处理的过程就是视频编码。H.26X系列(由ITU[

H264基础知识入门

之前视频基础,有讲到视频的原始数据YUV,相比RBG,数据确实减少了,但还是一个非常大数据量,会占用很大空间以及在给网络传输带来很大压力。所以必须要对视频进行压缩,减少占用空间。这里主要分享H264编码技术,压缩和编码是一回事。 H264压缩比是百分之一,能将100M的YUV数据压缩到接近1M数据大小。什么是GOP?一组强相关的图像帧。将一个视频拉长,帧比较多的时候,对帧进行分组,分组的要求是每一组帧的相关性较强。举例把做相同动作的帧放在一组。(这一组图像只是发生了细微的差别,变化较单调)。I帧P帧B帧I帧(intraframeframe),关键帧。采用帧内压缩技术。I帧是所有数据帧最关键的帧

H264基础知识入门

之前视频基础,有讲到视频的原始数据YUV,相比RBG,数据确实减少了,但还是一个非常大数据量,会占用很大空间以及在给网络传输带来很大压力。所以必须要对视频进行压缩,减少占用空间。这里主要分享H264编码技术,压缩和编码是一回事。 H264压缩比是百分之一,能将100M的YUV数据压缩到接近1M数据大小。什么是GOP?一组强相关的图像帧。将一个视频拉长,帧比较多的时候,对帧进行分组,分组的要求是每一组帧的相关性较强。举例把做相同动作的帧放在一组。(这一组图像只是发生了细微的差别,变化较单调)。I帧P帧B帧I帧(intraframeframe),关键帧。采用帧内压缩技术。I帧是所有数据帧最关键的帧

【GStreamer 】3-6-2 gstreamer x264enc 、avdec_h264插件说明

1、x264enc编码        该插件将原始视频编码为H264压缩数据,也称为MPEG-4AVC(高级视频编解码器)。也就是MPEG4,其实就是H264.        查询插件信息:只罗列的输入和输出,其它参数属性遇到了再看nvidia@nvidia-desktop:~$gst-inspect-1.0x264encPadTemplates:SRCtemplate:'src' Availability:Always Capabilities:  video/x-h264      framerate:[0/1,2147483647/1]        width:[1,214748364

FFmpeg4入门13:h264编码为mp4

上一篇将yuv源视频文件编码为*.h264的由libx264实现压缩的文件,将源文件从55M编码为620KB,但是h264文件只有视频数据,而且使用范围不太广。那么就需要进一步的封装,在此选用最常用的mp4格式为例。随便选一个mp4格式文件,用FFmpeg4入门4:解析视频并输出视频信息或者ffprobe查看一下数据。迈克尔杰克逊的beatit.mp4,输出如下:Input#0,mov,mp4,m4a,3gp,3g2,mj2,from'beat.mp4':Metadata:major_brand:isomminor_version:512compatible_brands:isomiso2av

FFmpeg4入门13:h264编码为mp4

上一篇将yuv源视频文件编码为*.h264的由libx264实现压缩的文件,将源文件从55M编码为620KB,但是h264文件只有视频数据,而且使用范围不太广。那么就需要进一步的封装,在此选用最常用的mp4格式为例。随便选一个mp4格式文件,用FFmpeg4入门4:解析视频并输出视频信息或者ffprobe查看一下数据。迈克尔杰克逊的beatit.mp4,输出如下:Input#0,mov,mp4,m4a,3gp,3g2,mj2,from'beat.mp4':Metadata:major_brand:isomminor_version:512compatible_brands:isomiso2av