首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在openH264和x264解码器之间进行选择

如何在openH264和x264解码器之间进行选择
EN

Stack Overflow用户
提问于 2017-02-14 07:21:01
回答 1查看 23.3K关注 0票数 6

我使用的是来自zeranoe.com的dev构建,其中包含了OpenH264和libx264。如何选择这两种解码器来比较解码速度?

代码语言:javascript
复制
avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264); 

只给我起"h264“的名字,但它是哪个解码器呢?

并试图强迫特定的解码器失败,例如:

代码语言:javascript
复制
codec = avcodec_find_decoder _by_name("x264");
codec = avcodec_find_decoder _by_name("libx264");

对于高分辨率(4k及更高)的RTSP视频流,我还需要哪些其他选项来提高avcodec_decode_video2的解码速度?

EN

回答 1

Stack Overflow用户

发布于 2017-02-14 19:02:45

FFmpeg除了使用本机FFmpeg H.264解码器(名为h264)之外,还可以使用OpenH264 (在FFmpeg中命名为libopenh264 )进行解码。还有几个受支持的硬件辅助H.264解码器,但我不打算详细介绍这些。

OpenH264与FFmpeg H.264解码器

  • 文档声明OpenH264支持约束基线剖面的解码,因此它的用处可能是有限的。然而,它能够解码一个主要和高调的视频,我测试。实际的功能似乎没有文档化,因此不清楚它是部分支持还是完全支持Main和High配置文件。
  • 本机FFmpeg H.264解码器具有线程处理能力(帧和片),但OpenH264没有。因此,FFmpeg H.264解码器比OpenH264快得多。
  • OpenH264是许可的BSD 2-条款“简化”许可证。FFmpeg H.264解码器是LGPL2.1或更高版本。

ffmpeg CLI工具示例

您似乎正在使用FFmpeg库,但是下面是一些使用ffmpeg的示例。

要选择您想要的解码器,请使用-c:v输入选项。下面是使用零muxer解码基准测试的两个例子。-map选项也被使用,因此只对(第一)视频流进行解码,并忽略其他非视频流(如音频)。

原生FFmpeg H.264解码器

代码语言:javascript
复制
$ ffmpeg -benchmark -i input.mp4 -map 0:v:0 -f null -
bench: utime=23.557s
bench: maxrss=57752kB
real    0m3.834s
user    0m23.573s
sys     0m0.213s

libopenh264

代码语言:javascript
复制
$ ffmpeg -benchmark -c:v libopenh264 -i input.mp4 -map 0:v:0 -f null -
bench: utime=20.927s
bench: maxrss=37404kB
real    0m21.002s
user    0m20.940s
sys     0m0.060s

基准时间

注意,benchmark选项输出用户CPU时间,而不是经过的实时时间。如果您也希望实时,那么在time命令之前添加ffmpeg命令(如果您在Linux上)。为了比较起见,我在示例(最后三行)中添加了来自time的输出。

以验证所需的解码器是否被使用。

查看控制台输出。例如,使用本机H.264解码器:

代码语言:javascript
复制
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))

使用libopenh264:

代码语言:javascript
复制
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (libopenh264) -> wrapped_avframe (native))
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42220081

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档