非 CPU 密集型视频转码的编解码器选择

非 CPU 密集型视频转码的编解码器选择

我正在尝试在低端(慢速 CPU)平台上实现 mkv/H264 视频的实时转码。

使用以下命令行作为测试工具:

avconv -i test.mkv -c:v mjpeg -q:v 3 -c:a libmp3lame -f (codec) -y /dev/null

我得到以下结果:使用rawvideo编解码器为 37fps,使用mpeg4编解码器为 21fps。

因此,我正在寻找一种可以提供更快压缩的“中间”编解码器。我不需要太高的压缩率,因为生成的数据不会被存储,而是由 UPnP 服务器直接流式传输(但显然,最好不要让原始视频充斥我的网络)。

有什么建议吗?

问候。

答案1

您可以尝试使用 MPEG2 编解码器

MPEG2 编码速度相当快。这应该有效,-c:v mpeg2video -r 25 -b:v 8192k增加比特率应该会让速率控制更加宽松,从而加快编码速度。您还可以尝试-intra禁用运动估计的选项,但代价是比特率会大幅提高。如果这还不够,应该有一个量化步长参数,您可以使用它来加快编码速度,但会牺牲视觉质量。

您还可以尝试使用超快预设的较低分辨率 H264

我不确定你说的低端是指多低端,我已经在 Core 2 Duo 2ghz CPU 上成功实时转码为 720p H264...所以如果你对低端的想法与我的想法相似,我会提供这个:)

libx264解码器接受编码器的预设,以恒定的视觉质量来交换编码速度和比特率。

您可以尝试使用最快的预设:

-c:v libx264 -preset ultrafast -tune zerolatency -profile high10  \
    -bsf:v h264_mp4toannexb

-bsf:v若要进行流式传输,此参数是必需的)

您还可以尝试使用该-cbr参数,它控制比特分配,从而控制视觉质量/比特率。默认值为 23;0 表示无损,51 表示质量最差/比特率最低。

分辨率在编码速度中起着重要作用,我发现经过上采样的低分辨率 h264 视频看起来与未经下采样的 mpeg2 相当(比特率更低,编码速度有望更快,不要引用我的话:3)。

所以你也可以尝试一下:

-filter:v scale=-1:480

这会将您的视频重新缩放为 480 线高并保持相同的纵横比。

(我刚刚自己设置了转码为 H264,如下:在 Matroska 容器中实时转码为 H264+AAC如果你想看的话。

相关内容