我有一个视频,我想将其缩小到视频输出,并且每 2 秒使用单个 FFMpeg 命令(硬件加速)创建一个缩略图。 以下是命令:
ffmpeg -hwaccel cuvid -hwaccel_output_format cuda -i "inputVideo.mov" -vf "scale_cuda=1280:720,hwdownload,format=nv12,setsar=1:1" -c:v h264_nvenc -profile:v main -level:v 4 -b:v 2500K "outputVideo.mp4" -vf "scale_cuda=160:90,hwdownload,format=nv12, fps=0.5,setsar=1:1" "thumbnailOutputs_%04d.jpg"
但输入视频的元数据中有一个旋转参数(180度),并且基于FFMpeg 文档该命令会自动旋转输出。我不希望我的输出被旋转。
-autorotate 根据文件元数据自动旋转视频。默认启用,使用 -noautorotate 可禁用。
我把命令改成了添加-noautorotate
。它修复了视频输出,但图像输出仍然在旋转。我甚至尝试将图像命令和使用命令分开,-noautorotate
但仍然不起作用。
另外,一个有趣的观察是,当我不使用硬件加速时,命令的行为会有所不同。以下是基于 CPU 的正常命令:
ffmpeg -i "inputVideo.mov" -c:v libx264 -profile:v main -level:v 4 -b:v 2500K -vf "scale=1280:720,setsar=1:1" "outputVideo.mp4" -vf fps=0.5 -s 160X90 "thumbnailOutputs_%04d.jpg"
以下是观察结果:
硬件加速命令(nvenc)
默认命令
- 视频 - 上下颠倒❌(旋转 180 度)
- 图片 - 上下颠倒❌(旋转 180 度)
带有 -noautorotate 标志的命令
- 视频 - 正确✅
- 图片 - 上下颠倒❌(旋转 180 度)
CPU 命令(libx264)
默认命令
- 视频 - 正确✅
- 图片 - 正确✅
带有 -noautorotate 标志的命令
- 视频 - 正确✅
- 图片 - 上下颠倒❌(旋转 180 度)
所用输入视频的链接:使用输入视频