上传时从视频中抓取缩略图.(Azure Blob存储)

本文关键字:略图 Azure Blob 存储 抓取 视频 | 更新日期: 2023-09-27 17:59:43

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

我试着按照建议使用这个:

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

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

有人能帮我解决这个问题吗,或者提出一个替代方法吗?

我试过:

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

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

提前感谢您的帮助!

上传时从视频中抓取缩略图.(Azure Blob存储)

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

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

看起来有一个覆盖可以获取流,所以您可以将其写入内存流,然后获取内存流并在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);