gpt4 book ai didi

python - 为什么 python 中的 pyav 包无法识别 h264_cuvid 编解码器,而 ffmpeg 可以?

转载 作者:行者123 更新时间:2023-12-04 23:18:30 48 4
gpt4 key购买 nike

我有一个如下的 python 脚本来从视频中读取 byte_stream。我想使用 h264_cuvid 代码来做 GPU 硬件加速而不是 CPU 编码或解码。当我运行此命令时,我的 FFmpeg 确实有 h264_cuvid 编解码器:

ffmpeg -c:v h264_cuvid -i input.mp4 output_codec.mp4
它运行成功,但在 pyav 包中,当我尝试创建如下 h264_cuvid 编解码器时:
import av

video = av.open(VIDEO_FILE_PATH)
target_stream = video.streams.video[0]
ctx = av.Codec('h264_cuvid', 'r').create()
它给了我一个错误,上面写着一个未知的编解码器:
ctx = av.Codec('h264_cuvid', 'r').create()
File "av/codec/codec.pyx", line 184, in av.codec.codec.Codec.__cinit__
File "av/codec/codec.pyx", line 193, in av.codec.codec.Codec._init
av.codec.codec.UnknownCodecError: h264_cuvid
av version = 9.0.2

ffmpeg version 7:3.4.8-0ubuntu0.2
注意:我通过 pip install av 安装了 av
任何帮助,将不胜感激

最佳答案

除非您从源代码编译 pyAV,否则它将与 ffmpeg 的供应商版本一起预编译,该版本是在不支持硬件加速的情况下构建的。这样做有两个原因(1)更好的设备兼容性,以及(2)维护效率。
人们通常列举使用 hwaccel 的三个主要原因:(1)更快的编码,(2)更快的解码,或(3)更好的能源效率。关于 (1),硬件编码器在实践中倾向于生成质量低于软件编码器的视频(比特率相等)。关于 (2),硬件解码器确实比软件解码器快,但必须将帧复制回主机内存 (RAM) 以使其可用于 python 层。这将减少或抵消任何速度增益。关于(3),如果您追求能源效率,那么切换到编译语言将比引入 hwaccel 更好。
反对 hwaccel 的主要原因是:它很难实现和脆弱,所以你不仅需要一个非常有才华的人来编写初始代码,而且你还需要一个同样有能力的人自愿维护它并在 hwaccel API 完成后修复它更改(它不是最稳定的),或者是否有要添加的错误或新功能。
所以总而言之,pyav 不支持它的主要原因是因为它被认为不够有影响力,而且 - 更重要的是 - 因为没有人愿意维护它,即它不支持效率的维护。

关于python - 为什么 python 中的 pyav 包无法识别 h264_cuvid 编解码器,而 ffmpeg 可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71618462/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com