openh264 - bEnableFrameSkip=0,比特率无法控制

2024-04-16

关于 opencv + H.264 有很多问题,但是 他们都没有给出详细的解释。

我在 Visual Studio 中使用 openh264(openh264-1.4.0-win32msvc.dll) 以及 opencv 3.1(使用启用 ffmpeg 的 cmake 自定义构建),我想以 H.264 压缩的 mp4 格式保存来自网络摄像头的视频

VideoWriter write = VideoWriter("D:/movie.mp4", CV_FOURCC('H', '2', '6', '4'), 10.0, cv::Size(192, 144), true);

在使用 openh264 之前,在控制台窗口中我看到一条警告消息 “无法加载 openh264 库:openh264-1.4.0-win32msvc.dll 请检查您的环境和/或从此处下载:https://github.com/cisco/openh264/releases https://github.com/cisco/openh264/releases” (视频也没有保存)

所以我下载了 dll 并与我的程序文件(exe)保存在一个文件夹中 现在,当我运行该程序时,我看到不同的错误 “[OpenH264] this = 0x0DE312C0,警告:bEnabledFrameSkip=0,在不启用跳帧的情况下无法控制 RC_QUALITY_MODE 和 RC_TIMESTAMP_MODE 的比特率” (现在视频已保存,但尺寸非常大!比特率约为 1200 Kbps)

对我来说,使用 h264 的唯一目的是减少文件大小。我想我可能必须自己构建 openh264 并进行一些更改才能消除此错误,任何人都可以指导我如何做吗?或者告诉我是否有办法通过代码以某种方式降低比特率?

P.S:我尝试给出 -1 而不是 CV_FOURCC(),系统中出现了“已安装编解码器”窗口,我找不到 h264 或 x264 或 h264vfw,即使我已经安装了各种编解码器包和 h264here http://www.fourcc.org/x264/

感谢和问候


如果你想控制比特率,你必须同时使用

encoderParemeters.iRCMode = RC_OFF_MODE;
encoderParemeters.bEnableFrameSkip = true; 


这里我以所有 Openh264 编码参数为例:

long nReturnedValueFromEncoder = WelsCreateSVCEncoder(&m_pSVCVideoEncoder);


    m_nVideoWidth = 352;
    m_nVideoHeight = 288;

    SEncParamExt encoderParemeters;

    memset(&encoderParemeters, 0, sizeof(SEncParamExt));

    m_pSVCVideoEncoder->GetDefaultParams(&encoderParemeters);

    encoderParemeters.iUsageType = CAMERA_VIDEO_REAL_TIME;
    encoderParemeters.iTemporalLayerNum = 0;
    encoderParemeters.uiIntraPeriod = 15;
    encoderParemeters.eSpsPpsIdStrategy = INCREASING_ID;
    encoderParemeters.bEnableSSEI = false;
    encoderParemeters.bEnableFrameCroppingFlag = true;
    encoderParemeters.iLoopFilterDisableIdc = 0;
    encoderParemeters.iLoopFilterAlphaC0Offset = 0;
    encoderParemeters.iLoopFilterBetaOffset = 0;
    encoderParemeters.iMultipleThreadIdc = 0;

    encoderParemeters.iRCMode = RC_BITRATE_MODE;
    encoderParemeters.iMinQp = 0;
    encoderParemeters.iMaxQp = 52;



    encoderParemeters.bEnableDenoise = false;
    encoderParemeters.bEnableSceneChangeDetect = false;
    encoderParemeters.bEnableBackgroundDetection = true;
    encoderParemeters.bEnableAdaptiveQuant = false;
    encoderParemeters.bEnableFrameSkip = true;
    encoderParemeters.bEnableLongTermReference = true;
    encoderParemeters.iLtrMarkPeriod = 20;
    encoderParemeters.bPrefixNalAddingCtrl = false;
    encoderParemeters.iSpatialLayerNum = 1;


    SSpatialLayerConfig *spartialLayerConfiguration = &encoderParemeters.sSpatialLayers[0];

    spartialLayerConfiguration->uiProfileIdc = PRO_BASELINE;//;

    encoderParemeters.iPicWidth = spartialLayerConfiguration->iVideoWidth = m_nVideoWidth;
    encoderParemeters.iPicHeight = spartialLayerConfiguration->iVideoHeight = m_nVideoHeight;
    encoderParemeters.fMaxFrameRate = spartialLayerConfiguration->fFrameRate = (float)30;

    encoderParemeters.iTargetBitrate = spartialLayerConfiguration->iSpatialBitrate = 500000;
    encoderParemeters.iTargetBitrate = spartialLayerConfiguration->iMaxSpatialBitrate = 500000;


    spartialLayerConfiguration->iDLayerQp = 24;
    //spartialLayerConfiguration->sSliceCfg.uiSliceMode = SM_SINGLE_SLICE;
    spartialLayerConfiguration->sSliceArgument.uiSliceMode = SM_SINGLE_SLICE;


    nReturnedValueFromEncoder = m_pSVCVideoEncoder->InitializeExt(&encoderParemeters);

希望它能帮助你。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openh264 - bEnableFrameSkip=0,比特率无法控制 的相关文章

随机推荐

  • 您没有浏览服务器的权限?

    我将 kcfinder 与 ckeditor 一起使用 改变的同时disabled to false在 kcfinder 的配置文件中没有问题 但是用以下命令覆盖它 SESSION KCFINDER array disabled gt fa
  • EF Core 中的 AddRange 和 AddRangeAsync 有什么区别

    我正在使用 EF Core 插入条目 我注意到当我调试这行代码时context MyEntityDbSet AddRangeAsync records 加载需要一秒钟 而不是context MyEntityDbset AddRange re
  • 列族 ID 不匹配(发现为 cebcc380-72d4-11e7-9a6b-bd620b945799;预期为 c05d6970-72d4-11e7-9a6b-bd620b945799)

    我该如何解决这个错误列族 ID 不匹配 发现为 cebcc380 72d4 11e7 9a6b bd620b945799 预期为 c05d6970 72d4 11e7 9a6b bd620b945799 Caused by java uti
  • 按多个单词的主题标签拆分术语

    我正在尝试拆分包含多个单词的主题标签的术语 例如 I am great 或 awesome dayofmylife 那么我正在寻找的输出是 I am great awesome day of my life 我所能实现的就是 gt gt g
  • 如何使用java访问SVN中的文件

    我需要你的帮助 我想使用 java 代码从 SVN 打开一个文件 任何人都可以告诉我访问文件的流程 或者任何人都可以向我发送该文件的示例代码 任何人都可以向我发送使用java通过HTML访问svn的示例代码吗 你需要看看SVNKIT Jav
  • CancellationToken 不会在 Azure Functions 中触发

    我有这个简单的 Azure 函数 public static class MyCounter public static int timerRound 0 public static bool isFirst true FunctionNa
  • 如何将我的 app.yaml 迁移到 2.7?

    我正在将我的 gae 应用程序迁移到 python 2 7 这是我的新 app yaml application webfaze version main runtime python27 api version 1 threadsafe
  • 如何修复 ReactforwardRef(Menu) Material UI?

    我创建了非常简单的自定义组件MuiMenu and MuiMenuItem 但是当我尝试显示这些组件时 我看到一个错误 如下所示 Function components cannot be given refs Attempts to ac
  • 如何对歌曲中的专辑进行排序?

    所以我的问题是 当我尝试对专辑进行排序时 专辑标题和专辑艺术是错误的 我尝试对专辑 ID 进行排序 但这并不能解决问题 因为专辑 ID 显然与对艺术进行排序无关 当我忽略排序时 一切都是正确的 但是当我尝试对它们进行排序时 专辑名称与专辑封
  • 更改表的列名后,所有单元和功能测试均出错

    我重命名了表的 3 列 突然我的所有单元和功能测试都抛出了相同的错误 即它们找不到具有旧列名称的表 即使对与我修改的表无关的模型的测试也会抛出相同的错误 Example 54 Error test should show user User
  • 即时编译与提前编译相比有何优点?

    我最近一直在思考这个问题 在我看来 最大的优势是JIT编译或多或少应该归因于中间格式 而抖动本身并不是生成代码的好方法 那么主要就是这些pro JIT我经常听到的编译参数 即时编译可实现更大的可移植性 这不是中间格式的原因吗 我的意思是 一
  • 使用 CSS/jQuery 的响应式字体大小

    我想在 div 内创建响应文本 I tried jquery 文本填充 https github com jquery textfill jquery textfill and FlowType http simplefocus com f
  • 有没有办法检测手机和手持设备上的3G和2G连接速度?

    有没有办法检测手机和手持设备上的 3G 和 2G 连接 就像如果我想在用户使用 3G 时提供高端网站 如果用户使用 2G 则提供高度优化的版本 在 Android 2 2 中 有一个 JS 对象可以实现这一点 您可以根据连接类型编写一个供
  • 如何在 PHP 中将字符串的第一个字符变为小写?

    我无法使用斯特洛尔 https www php net manual en function strtoupper php因为它会影响所有角色 我应该使用某种正则表达式吗 我收到一个字符串 它是产品代码 我想在不同的地方使用此产品代码作为搜
  • 寻找最接近的斐波那契数列

    我正在尝试解决一个更大的问题 并且我认为该程序的重 要部分花费在低效的计算上 我需要计算给定数字 N 的区间 P Q 其中 P 是 到 N 的最小斐波那契数 目前 我正在使用地图来记录斐波那契数的值 查询通常涉及搜索最多 N 的所有斐波那契
  • 使用按钮更新 Matplotlib 中的注释

    我正在修改 Matplotlib 文档中的按钮示例 以在图中添加文本注释 我的问题是 我无法找到每次按下按钮时更新注释的正确方法 因为注释重叠 我尝试了remove 方法 但不起作用 import numpy as np import ma
  • 使用 Core Reporting Google API v4 (Java) 显示超过 10000 行

    我正在使用以下方式获取 Google Analytics 数据核心报告 API v4 https developers google com analytics devguides reporting core v4 对于给定的维度和指标组
  • 数据访问库返回数据集或对象

    在使用调用存储过程的库时是否存在普遍共识 返回数据集或使用 sqldatareader 填充自定义对象 数据传输对象的序列化成本是否低于数据集 就我个人而言 我将 SqlDataAdapter 与 DataTables 一起使用 数据表有W
  • 如何原子地否定 std::atomic_bool?

    朴素的布尔否定 std atomic bool b b b 似乎不是原子的 我怀疑这是因为operator 触发转换为普通bool 如何原子地执行等效的否定 下面的代码说明了朴素的否定不是原子的 include
  • openh264 - bEnableFrameSkip=0,比特率无法控制

    关于 opencv H 264 有很多问题 但是 他们都没有给出详细的解释 我在 Visual Studio 中使用 openh264 openh264 1 4 0 win32msvc dll 以及 opencv 3 1 使用启用 ffmp