【问题标题】:Grabbing a thumbnail from a video when uploading. (Azure Blob Storage)上传时从视频中抓取缩略图。 (Azure Blob 存储)
【发布时间】:2014-04-24 21:48:32
【问题描述】:

我目前有一个系统可以将视频上传到 Azure blob 存储并且工作正常。我想实现一个功能,在上传时从视频中抓取缩略图并将其推送到 Azure。

我尝试按照建议使用它:

new FFMpegConverter().GetVideoThumbnail(file, outputJPEG);

问题是我不确定将什么用作 outputJPEG,因为我没有要写入的文件,而是想将该文件写入 Azure 的 blob 存储。

谁能帮我解决这个问题,或者建议一种替代方法?

我试过了:

  • 创建一个新的空 HttpPostedFileBase 作为 outputJPEG 文件,但这是不可能的,因为它只接受用户上传的文件。

  • 使用文件流,但这似乎不起作用,因为它需要它正在写入的文件的位置,而不是让我只推送到 blob 存储。 (通过:blob.UploadFromStream(file.InputStream);)

提前感谢您的帮助!

【问题讨论】:

  • FFMpegConverter 来自哪个库?
  • FFMpegConverter 类是 NReco.VideoConverter 组件的一部分(FFMpeg 工具的.NET 包装器)

标签: c# video azure azure-blob-storage


【解决方案1】:

请注意,GetVideoThumbnail 方法总是为输出 jpeg 文件创建临时文件,即使使用了接受 Stream 的重载。

如果您的目标是避免创建临时文件,您可以使用 FFMpegConverter.ConvertLiveMedia 重载,它接受来自文件的 inputSource 并将结果写入输出流(提取视频缩略图相当于转换为只有 1 帧的 MJPEG 流)。

【讨论】:

    【解决方案2】:

    看起来有一个接受流的覆盖,因此您可以将其写入内存流,然后获取内存流并在 blob 存储中创建一个新文件:

    MemoryStream ms = new MemoryStream();
    var converter = new FFMpegConverter();
    
    converter.GetVideoThumbnail(file, ms);
    
    ms.Position = 0;
    
    // Write ms to a blob object here
    blockblob.UploadFromStream(ms);
    

    【讨论】:

    • 关于这个示例,在调用 blockblob.UploadFromStream(ms) 之前似乎需要 ms.Position=0。
    • 谢谢,我不确定,因为我没有天蓝色的环境来测试它。我将它添加到代码中。
    猜你喜欢
    • 2018-09-04
    • 2020-08-12
    • 2020-04-09
    • 2013-11-08
    • 2019-05-19
    • 2015-11-30
    • 2020-11-07
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多