视频缩略图创建在横向或纵向模式下

时间:2015-03-26 10:47:10

标签: c# asp.net video video-thumbnails

我正在使用Nreco Video converter来制作视频缩略图。这是我正在使用的C#代码。

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

它只是工作正常。唯一的问题是方向。我正在尝试创建缩略图的视频会记录在移动应用上。因此,无论视频是纵向模式还是横向模式,生成的缩略图都是纵向或横向模式。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

  1. 使用实际上未执行任何转换的Invoke或ConvertMedia方法从ffmpeg控制台(LogReceived事件)中提取视频方向元数据。旋转数据可以与简单的正则表达式匹配。
  2. 为适当的旋转滤镜编写FFMpeg参数(例如:-vf" transpose = 1")
  3. 使用接受额外ffmpeg命令行参数的ConvertMedia方法提取缩略图(请参阅下面的代码段)
  4. (内部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包中找到实现所有步骤的完整代码(旋转示例)。