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

Dar*_*rko 3 ffmpeg libavcodec

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

avcodec_find_decoder(AVCodecID.AV_CODEC_ID_H264); 
Run Code Online (Sandbox Code Playgroud)

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

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

codec = avcodec_find_decoder _by_name("x264");
codec = avcodec_find_decoder _by_name("libx264");
Run Code Online (Sandbox Code Playgroud)

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

llo*_*gan 6

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

注意事项

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

基准时间

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

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

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

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))
Run Code Online (Sandbox Code Playgroud)

使用libopenh264:

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (libopenh264) -> wrapped_avframe (native))
Run Code Online (Sandbox Code Playgroud)