【问题标题】:Video Thumbnail creation in landscape or portrait mode在横向或纵向模式下创建视频缩略图
【发布时间】:2015-03-27 15:53:10
【问题描述】:

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 请注意,NReco 可用于提取视频方向元数据和应用适当的旋转(请参阅我的答案)。
【解决方案2】:

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

  1. 使用实际上不执行任何转换的 Invoke 或 ConvertMedia 方法从 ffmpeg 控制台(LogReceived 事件)中提取视频方向元数据。旋转数据可以用简单的正则表达式匹配。
  2. 为适当的旋转过滤器编写 FFMpeg 参数(例如:-vf "transpose=1" )
  3. 使用 ConvertMedia 方法提取缩略图,该方法接受额外的 ffmpeg 命令行参数(参见下面的代码 sn-p)

(内部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 包中找到(Rotate 示例)。

【讨论】:

  • 什么是rotateFilter ??
  • FFMpeg 视频过滤器参数用于适当的旋转(有关详细信息,请参阅 ffmpeg 文档)。实际上有 3 种旋转情况:90 度 ( transpose=1 )、180 度 ( vflip )、270 度 ( transpose=2 )。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 2015-08-17
  • 2011-09-05
  • 1970-01-01
相关资源
最近更新 更多