码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 用Intel MediaSDK 做超高码率编码


    闲扯几句最近在用Intel MediaSDK做编码方面的一些收获。

    老板需要编段100Mbps的码流,用mediasdk 2021r1的sample_encode来试试

    实验1: 先来段8Mbps的试试,一切正常

    sample_encode h264 -i jellyfish-4k-uhd-nv12.yuv -nv12 -h 2160 -w 3840 -o msdk_test_4k.h264 -u 7 -cbr -b 8000

    命令行输出

    用mediainfo看看输出的码流

    实验2: 设置码率100Mbps, 输出文件的码率只有34.5Mbps 翻车!

    sample_encode h264 -i jellyfish-4k-uhd-nv12.yuv -nv12 -h 2160 -w 3840 -o msdk_test_4k.h264 -u 7 -cbr -b 100000

    命令行输出

    MediaInfo看码率也就是34Mbps

    最后经过多次实验,发现用-b参数设置码率,最高只能到64Mbps左右, 再高以后码率就不准了。

    一顿debug, 发现问题出在编码时表示编码码率的TargetKbps数据类型是无符号16bit

    1. union {
    2. mfxU16 TargetKbps;
    3. mfxU16 QPP;
    4. mfxU16 ICQQuality;
    5. };

    这个bitrate最高也就能设到65535 (0xFFFF), 再高就会溢出了。 所以当我们设置参数是-b 100000时,ParseInputString()里的 msdk_opt_read(strInput[++i], pParams->nBitRate)返回nBitRate就是34,464。打断点进去看,发现函数msdk_strtol()返回还是0x186a0, 赋值给mfxU16的value以后就变成了0x86a0 (十进制34,464)。 这个就跟前面的输出匹配了。

    遇事不决,可问谷哥

    发现了这么一篇文章 Bitrate Control Methods (BRC) in Intel® Media SDK 这里面提到了在mediasdk的mfxInfoMFX结构体里,有这么个变量mfxU16  BRCParamMultiplier 平时这个值为0,当这个值不为0的时候,最终的编码码率为 BRCParamMultiplier*TargetKbps。

    试验一下,

    修改一下sample_encode.cpp的代码,在解析输入参数的地方,加一个-bm的参数,负责设置这个bitrate multiplier,然后在InitMfxEncParams()函数里,把这个值设给m_mfxEncParas.mfx.BRCParamMultiplier.

    运行命令, 要100Mbps的码流,所以targetKbps设置50000, Multiplier设置成2, 乘起来正好100Mbps

    sample_encode h264 -i jellyfish-4k-uhd-nv12.yuv -nv12 -h 2160 -w 3840 -o msdk_test_4k.h264 -u 7 -cbr -b 50000 -bm 2

    命令行输出

     MediaInfo输出

    搞定,收工!!!

    最后按照惯例,参考代码奉上,仅供参考

    https://gitee.com/tisandman/intel_mediasdk2021_sample_encode_with_bitrate_multiplier

  • 相关阅读:
    什么是云计算?什么是IaaS、Paas、Saas?
    深入理解New操作符
    全量数据采集:不同网站的方法与挑战
    分布式集群理论
    终于有人把面试必考的动态规划、链表、二叉树、字符串全部撸完了
    抖音小店怎么做自然流量?
    【python】爬虫系列之requests库介绍
    java项目实现发送邮箱激活用户功能
    概率的三条基本公理 | 布尔不等式的应用(举例)
    MST2101Q2 摩托车三相磁电机调压器控制芯片
  • 原文地址:https://blog.csdn.net/sandmangu/article/details/125064466
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号