如何使用 cuda 加速鱼眼到 heirerect 的转换?

如何使用 cuda 加速鱼眼到 heirerect 的转换?

这是我的命令

ffmpeg -y -i in.mp4 -vf v360=input=sg:ih_fov=118.2:iv_fov=69.5:output=hequirect:w=2924:h=2924 -b:v 102400k -bufsize 5000k -c:a copy out.mp4

我试过

ffmpeg -y -hwaccel cuda -hwaccel_output_format cuda -i in.mp4 -vf v360=input=sg:ih_fov=118.2:iv_fov=69.5:output=hequirect:w=2924:h=2924 -c:v h264_nvenc -preset slow -b:v 102400k -bufsize 5000k -c:a copy out.mp4

但这导致

Impossible to convert between the formats supported by the filter 'graph 0 input from stream 0:0' and the filter 'auto_scale_0'
Error reinitializing filters!
Failed to inject frame into filter network: Function not implemented
Error while processing the decoded data for stream #0:0

答案1

简短的回答是“你不需要”

目前,截至撰写本文时(2022 年 5 月),stereo3dv360滤镜均不支持 GPU 加速ffmpeg。这意味着它们只能在您的 CPU 上运行。

使用 GPU“加速” v360 转码/转换的最简单方法是在 GPU 上执行一些操作,而在 CPU 上执行其他操作。

对于 v360 转换,我的流程通常大致如下

(具体情况是,使用宽度/高度为 2:1 的约 5-7k 分辨率双鱼眼 180 度 3D 视频)

ffmpeg -hide_banner -v verbose \
    -hwaccel cuda \
    -init_hw_device cuda=c \
    -filter_hw_device c \
    -hwaccel_output_format c \
    -i "${my_file_to_process}" \
    -vf "${see_filter_chain_section}" \
    -c:v h264_nvenc \
    -c:a aac \
    -b:a 128k \
    "${output_file_path}"

我通常使用的过滤链是

v360=dfisheye:fisheye:interp=line:ih_fov=180:iv_fov=180:d_fov=180
hw_upload_cuda
scale_cuda=w=1080:h=1080:interp_algo=bicubic:format=yuv420p

这通常会给我一个相当可接受的压扁视频,我这样做只是为了使视频缩放能够在移动设备上运行。这主要是作为如何使 CUDA 缩放与 CPU 绑定过滤器一起工作的示例。

答案2

不确定这是否正是您想要的,但您只需从您尝试的命令中删除参数即可使其工作-hwaccel cuda。它将使用硬件进行视频编码,但它仍然会受到使用 CPU 的 v360 过滤器的一定限制。

示例:CPU 搭配 v360 – 10 fps;无滤镜 – 18 fps。NVENC 搭配 v360 – 34 fps;无滤镜 – 118 fps。

相关内容