H.264——使用H.264视频编解码器JM进行YUV图像序列的编解码
目录
- 常见H.264视频编码器
- JM基础配置
- 准备一个YUV视频
- JM实现编码
- 修改配置文件
- Encoder Control
- 编译运行
- JM实现解码
- 如何判断编码解码是否正确
常见H.264视频编码器
X264(只有编码没有解码)是由Video LAN组织制作的,这个组织还制作了一款著名的开源媒体播放器VLC
JM的参考代码托管在hhi组织(德国的研究机构),我们可以在这个机构中获取JM最新的源代码。
最近经典的版本是JM8.6
,虽然没有包含最新的内容,但在开始阶段以及足够我们进行学习
JM基础配置
下载解压后用Visual Studio打开tml.sln
- ldecod——解码器
- lencod——编码器
将lencod设为启动项目
然后点击下方的属性,修改输出目录及工作目录
接下来重新生成项目
在bin目录下已生成lencod.exe
准备一个YUV视频
首先录一段视频,再使用ffmpeg将其转为yuv420p
ffmpeg -i srcVideo.mp4 -ss 00:00:00 -t 10 -s 1920x1080 -pix_fmt yuv420p srcVideo.yuv
该命令的作用是把所在路径下的srcVideo.mp4文件从第20秒开始,往下10秒,即20~30秒之间,截取这段时间的视频,把它转换为帧宽度为640,帧高度为272,像素格式为yuv420p的YUV文件:srcVideo.yuv。
然后放到bin目录下
JM实现编码
修改配置文件
在工作目录下,提供了三个config文件,表示三个profile的配置
本着由简单到复杂的原则,选择encoder_baseline.cfg
,复制一份,修改文件名为encoder.cfg
用notepad打开
这个文件,是我们在编码过程中所需要的一些配置信息
修改文件名
后面头的长度和StartFrame我们都保持不变。
FrameToBeEncoded表示需要编码的帧数,3帧有点少,我们改为10帧
后面的帧率日志文件输出文件等都保持不变
Encoder Control
- ProfileIDC——选择的profile
- IntraPeriod——若为0则只有第一帧为I帧,这里设置为1
- IDRIntraEnable——是否强制所有I帧为IDR关键帧,0关闭,1开启.
编译运行
这就是编码过程
编码完毕
上图可以看到,第一帧为IDR关键帧,其余都是I帧。总共编了10帧
这里是参数
test.264
,就是生成的H.264码流文件test_rec.yuv
是编码过程中重建的yuv图像trace_enc.txt
是日志文件,配置文件中关闭则文件没有内容
通过YUVPlayer将test_rec.yuv
同源yuv进行比较,就可以看出失真所在
以上就是通过JM对YUV格式的图像序列进行编码,生成一个符合H.264标准的码流的过程
JM实现解码
将ldecod
设置为启动项目,然后修改设置
和上面一样,将输出目录和工作目录设置为$(ProjectDir)bin
接着打开解码器的配置文件decoder.cfg
检查需要解码的码流文件、输出文件以及参考帧文件
由于是和编码的时候设置一致,此时就不需要修改
然后将解码的配置文件写道ldecod
的命令参数中
依次点击生成——清理解决方案
然后运行
解码完成
生成test_dec.yuv
如何判断编码解码是否正确
将解码后的图像与编码时重建的图像进行比对
只有这两个是一致的,那么我们所做的编解码才是匹配的
从第一帧一直比对到最后一帧,全部相同。
则编解码的过程是正确的,即编解码匹配
H.264——使用H.264视频编解码器JM进行YUV图像序列的编解码相关推荐
- H.264 高度压缩数字视频编解码器标准
H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压 ...
- H.266/VVC代码学习17:帧内亮度预测的编解码(intra_luma_pred_modes)
引--亮度预测:H.266/VVC代码学习5:VTM4.0帧内亮度预测代码(estIntraPredLumaQT) 一.结论: 亮度编解码根据MPM列表的值分为两个阶段: 1 亮度模式在MPM列表中: ...
- 音视频之路之开篇——视音频编解码技术零基础学习方法
注: 本文章转自雷大神的博客http://blog.csdn.net/leixiaohua1020/article/details/18893769,本人认为这是一篇音视频领域入门的佳作,强烈推荐.当 ...
- H.264及编解码调试
H.264及编解码调试 H.264是国际标准化组织(ISO)和国际电信联盟(ITU)在2002年12月共同提出的继MPEG-4之后的新一代数字视频压缩格式,其具有更高的编码效率,并注重对移动和IP网络 ...
- 你的WebRTC应用该使用哪种音视频编解码器
我们很难抉择应该给WebRTC应用选哪一款音视频编解码器.VP8?H.264? VP9?还是使用AV1?HEVC呢? 有关WebRTC**视频编解码器的温馨提示** 曾几何时WebRTC世界很简单,只 ...
- 视频的基本参数及H264编解码相关概念
概述 上几篇文章介绍了音频的采集以及编码,现在我们开始学习视频相关的知识,同样先从概念开始.本篇文章的主要内容有: 视频相关参数 帧率(fps) 分辨率 DTS和PTS 码率 音视频同步 对视频编解码 ...
- 音视频系列3:编解码技术
1. 基础知识 FOURCC是一个4个字节32位的标识符,通常用来标示视频数据流的格式,播放软件可以通过查询FOURCC代码并寻找对于解码器来播放特定视频流,取值通常由各个格式标准自行定义,如DIV3 ...
- 嵌入式Linux下基于FFmpeg的视频硬件编解码[图]
转自:http://tech.c114.net/167/a674033.html 摘要: 对FFmpeg多媒体解决方案中的视频编解码流程进行研究.结合对S3C6410处理器视频硬件编解码方法的分析,阐 ...
- Android视频编解码之MediaCodec简单入门
本篇只是简单入门,后面会继续写文章详细讲解: 由于MediaCodec涉及内容众多,原本想一篇文章把所有内容概括,但是后来发现不太可能,限于自己能力,想要考虑全面太难,我也是刚开始学习需要借助网上的代 ...
最新文章
- 郎凤娥谈定西实施煤粉锅炉改造项目
- 使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常
- 翻译:XtraDB/InnoDB中的AUTO_INCREMENT处理方式(已提交到MariaDB官方手册)
- c++局部对象是什么_小白学Web前端难点是什么 JS进阶知识点有哪些
- 云软件——艺术字符设计!【推荐】
- 通过string型类名实例化一个类
- FileWriter写入和Scanner录入的简单操作
- 实现android应用程序自动化测试的批处理脚本,简单入手移动端并发自动化测试:Appium+Robot+ 批处理脚本...
- phpcms文章 title 溢出 str_cut 省略号(······) - 代码篇
- 第一、二类斯特林(Stirling)数的生成函数(母函数)及推导
- npm install -s -d -g之间的区别
- 金融科技:科技生活化和生活金融化
- spring cloud oauth2 资源服务器配置
- RFID定位技术下的智能养老系统具有哪些优势呢?--新导智能
- 网页端下载喜马拉雅音频
- @PropertySource 注解的使用
- 解决云帆小说下载阅读器不能下载https网址的问题
- C#中Winform控件扁平化设计
- 【BUUCTF】CTF_Crypto 密码学_Quoted-printable(引用可打印)
- 《速度与激情9》中有哪些槽点?