目录

  • 常见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图像序列的编解码相关推荐

  1. H.264 高度压缩数字视频编解码器标准

    H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压 ...

  2. H.266/VVC代码学习17:帧内亮度预测的编解码(intra_luma_pred_modes)

    引--亮度预测:H.266/VVC代码学习5:VTM4.0帧内亮度预测代码(estIntraPredLumaQT) 一.结论: 亮度编解码根据MPM列表的值分为两个阶段: 1 亮度模式在MPM列表中: ...

  3. 音视频之路之开篇——视音频编解码技术零基础学习方法

    注: 本文章转自雷大神的博客http://blog.csdn.net/leixiaohua1020/article/details/18893769,本人认为这是一篇音视频领域入门的佳作,强烈推荐.当 ...

  4. H.264及编解码调试

    H.264及编解码调试 H.264是国际标准化组织(ISO)和国际电信联盟(ITU)在2002年12月共同提出的继MPEG-4之后的新一代数字视频压缩格式,其具有更高的编码效率,并注重对移动和IP网络 ...

  5. 你的WebRTC应用该使用哪种音视频编解码器

    我们很难抉择应该给WebRTC应用选哪一款音视频编解码器.VP8?H.264? VP9?还是使用AV1?HEVC呢? 有关WebRTC**视频编解码器的温馨提示** 曾几何时WebRTC世界很简单,只 ...

  6. 视频的基本参数及H264编解码相关概念

    概述 上几篇文章介绍了音频的采集以及编码,现在我们开始学习视频相关的知识,同样先从概念开始.本篇文章的主要内容有: 视频相关参数 帧率(fps) 分辨率 DTS和PTS 码率 音视频同步 对视频编解码 ...

  7. 音视频系列3:编解码技术

    1. 基础知识 FOURCC是一个4个字节32位的标识符,通常用来标示视频数据流的格式,播放软件可以通过查询FOURCC代码并寻找对于解码器来播放特定视频流,取值通常由各个格式标准自行定义,如DIV3 ...

  8. 嵌入式Linux下基于FFmpeg的视频硬件编解码[图]

    转自:http://tech.c114.net/167/a674033.html 摘要: 对FFmpeg多媒体解决方案中的视频编解码流程进行研究.结合对S3C6410处理器视频硬件编解码方法的分析,阐 ...

  9. Android视频编解码之MediaCodec简单入门

    本篇只是简单入门,后面会继续写文章详细讲解: 由于MediaCodec涉及内容众多,原本想一篇文章把所有内容概括,但是后来发现不太可能,限于自己能力,想要考虑全面太难,我也是刚开始学习需要借助网上的代 ...

最新文章

  1. 郎凤娥谈定西实施煤粉锅炉改造项目
  2. 使用CGlib出现java.lang.NoClassDefFoundError: org/objectweb/asm/Type异常
  3. 翻译:XtraDB/InnoDB中的AUTO_INCREMENT处理方式(已提交到MariaDB官方手册)
  4. c++局部对象是什么_小白学Web前端难点是什么 JS进阶知识点有哪些
  5. 云软件——艺术字符设计!【推荐】
  6. 通过string型类名实例化一个类
  7. FileWriter写入和Scanner录入的简单操作
  8. 实现android应用程序自动化测试的批处理脚本,简单入手移动端并发自动化测试:Appium+Robot+ 批处理脚本...
  9. phpcms文章 title 溢出 str_cut 省略号(······) - 代码篇
  10. 第一、二类斯特林(Stirling)数的生成函数(母函数)及推导
  11. npm install -s -d -g之间的区别
  12. 金融科技:科技生活化和生活金融化
  13. spring cloud oauth2 资源服务器配置
  14. RFID定位技术下的智能养老系统具有哪些优势呢?--新导智能
  15. 网页端下载喜马拉雅音频
  16. @PropertySource 注解的使用
  17. 解决云帆小说下载阅读器不能下载https网址的问题
  18. C#中Winform控件扁平化设计
  19. 【BUUCTF】CTF_Crypto 密码学_Quoted-printable(引用可打印)
  20. 《速度与激情9》中有哪些槽点?

热门文章

  1. Centos7离线安装gcc4.8
  2. java 中常见日期格式的设置
  3. django中context_processors的理解
  4. 14、基于51单片机智能硬币分拣机 投币分类筛查计数器 电子存钱罐系统设计
  5. C语言实现 动态数组 处理任意类型数据
  6. 杰理 开发环境搭建以及软件使用
  7. MATLAB数据精度处理
  8. No such file or directory及解决方法
  9. javascript中childNodes与children 区别 以及firstChild与firstElementChild区别
  10. vue下拉触底,判断上滑下滑