我正在尝试使用 ddgrab(在 3080 上,因此使用 nvenc)捕获处于纵向模式的屏幕。这是原始命令:
ffmpeg -f lavfi -i ddagrab=output_idx=0 -c:v h264_nvenc -cq 18 output.mp4
。
我的输出视频看起来是横向的,就像我处于横向一样,这不是我需要的。我尝试在别人的帮助下像这样转置它:ffmpeg -filter_complex "ddagrab=output_idx=0,hwdownload,format=bgra,transpose=dir=clock,format=nv12[out]" -map "[out]" -c:v h264_nvenc -cq:v 18 output.mp4
。
但转置占用了太多的 CPU 开销,并且显著降低了我的系统速度。我看过 libnpp 和 transpose_npp,但由于某种原因没有它的编译版本。然后我发现这在 stackexchange 上查看有关 cuda 加速 openCL 过滤器的信息,并知道有一个 transpose_openCL,我希望它能解决我的问题,但我无法让它工作,因为我真的不知道我在做什么。我希望获得一些关于如何捕捉显示给我的视频或有效应用过滤器以使其正确的信息。
答案1
如果要求视频播放器在播放时旋转是可以接受的,那么添加-metadata:s:v:0 rotate=90
到您的命令中,或者按照此处的说明通过 ffmpeg 将原始捕获的文件路由回来:https://stackoverflow.com/questions/25031557/rotate-mp4-videos-without-re-encoding
本指南包含有关如何使用 CUDA 支持编译 ffmpeg 的说明,并可能帮助您开始使用硬件加速过滤器。请注意,与 NVENC 或 NVDEC 不同,它们对 GPU 性能的影响很小甚至没有影响,而 OpenCL 或 CUDA 加速过滤器将消耗 GPU 资源,并可能影响您捕获的应用程序的性能。
我对遵循屏幕旋转设置的 ffmpeg 捕获功能没有特别的经验,但你可能更适合使用另一种摄取机制,一些其他 ffmpeg 选项详见此处或者使用不同的 NVENC 加速捕获应用程序,例如 OBS。