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

时间:2017-02-14 07:21:02

标签: ffmpeg libavcodec

我使用zeranoe.com的开发版,其中包含OpenH264和libx264。 如何在这两个解码器之间进行选择以比较解码速度?

ORM

只给了我一个名字" h264" 但它是哪个解码器?

并尝试强制特定解码器失败,例如:

avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264); 

我还有哪些其他选项可以提高avcodec_decode_video2对高分辨率(4k及更高)RTSP视频流的解码速度?

1 个答案:

答案 0 :(得分:5)

除了本机FFmpeg H.264解码器(名为libopenh264)之外,FFmpeg还可以使用OpenH264(在FFmpeg中命名为h264)进行解码。还有一些支持hardware assisted H.264 decoders,但我不打算详细介绍这些内容。

注意事项

ffmpeg CLI工具示例

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

要选择所需的解码器,请使用-c:v输入选项。以下是使用null muxer的两个解码基准示例。还使用-map选项,因此仅解码(第一)视频流并忽略其他非视频流,例如音频。

Native FFmpeg H.264解码器

$ 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

$ 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

基准时间

注意基准测试选项输出用户CPU时间,而不是实际经过的时间。如果您想要实时,请在time命令之前添加ffmpeg命令(如果您在Linux上)。为了便于比较,我在示例中添加了time的输出(最后三行)。

验证正在使用所需的解码器

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

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))

使用libopenh264:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (libopenh264) -> wrapped_avframe (native))