0

我正在使用Nreco Video 转换器来创建视频缩略图。这是我正在使用的 C# 代码。

(new NReco.VideoConverter.FFMpegConverter()).GetVideoThumbnail(fileSource, thumbNailPath, (float)0.1);

它工作正常。唯一的问题是方向。我尝试为其创建缩略图的视频记录在移动应用程序上。所以无论视频是纵向还是横向模式,生成的缩略图都是随机的纵向或横向模式。

有谁知道如何以特定模式(横向或纵向)创建视频的缩略图。

4

2 回答 2

0

您可以使用 ffmpeg 从视频元数据中获取旋转,并在缩略图提取期间应用适当的旋转过滤器。由于 NReco VideoConverter 是一个 .NET ffmpeg 包装器,因此它也可用于执行此操作:

  1. 使用实际上不执行任何转换的 Invoke 或 ConvertMedia 方法从 ffmpeg 控制台(LogReceived 事件)中提取视频方向元数据。旋转数据可以与简单的正则表达式匹配。
  2. 为适当的旋转过滤器编写 FFMpeg 参数(如: -vf "transpose=1" )
  3. 使用接受额外 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 包中找到(旋转示例)。

于 2015-03-27T07:53:10.257 回答
0

视频文件中有一个旋转参数,您可以使用各种其他 ffmpeg 包装库来读取它。许多玩家使用它来实际旋转屏幕。见这里。由于 NReco 不直接支持此功能,因此您必须使用其他库读取此值并使用它来旋转流中的 jpeg。

我建议使用 ffmpeg 包装器,您可以在其中直接调用 ffmpeg 进程实例,因为 ffmpeg 能够从文件中读取各种属性。

于 2015-03-26T12:10:24.740 回答