您可以使用 ffmpeg 从视频元数据中获取旋转,并在缩略图提取期间应用适当的旋转过滤器。由于 NReco VideoConverter 是一个 .NET ffmpeg 包装器,因此它也可用于执行此操作:
- 使用实际上不执行任何转换的 Invoke 或 ConvertMedia 方法从 ffmpeg 控制台(LogReceived 事件)中提取视频方向元数据。旋转数据可以与简单的正则表达式匹配。
- 为适当的旋转过滤器编写 FFMpeg 参数(如: -vf "transpose=1" )
- 使用接受额外 ffmpeg 命令行参数的 ConvertMedia 方法提取缩略图(参见下面的代码片段)
(内部 GetVideoThumbnail 使用 ConvertMedia 方法):
var thumbSettings = new ConvertSettings() {
VideoFrameCount = 1,
VideoFrameRate = 1,
MaxDuration = 1, // extract exactly 1 frame
Seek = 0, // frame seek position
CustomOutputArgs = String.Format(" -vf \"{0}\"", rotateFilter ) // rotation filter parameters
};
ffMpegConverter.ConvertMedia(inputFile1, null, thumbJpegOutputStream, "mjpeg", thumbSettings);
结果,您将获得根据视频方向元数据旋转的视频缩略图。实现所有步骤的完整代码可以在 VideoConverter 包中找到(旋转示例)。