繁体   English   中英

在Azure存储Blob上使用.Net Core和C#将图像序列转换为MP4文件

[英]Convert image sequence to MP4 file using .Net Core and C# on Azure Storage Blobs

我有一个具有POST方法的API,该API可以捕获图像并将其存储到Azure上的Blob容器中。 一旦准备好处理,这些图像将构成视频文件的一系列帧。 当应用程序准备好处理序列并取回视频文件时,我将调用另一个端点。

我已经准备好一切并可以进行视频处理,但是我仍然坚持如何实现我认为非常简单的方法! 由于我的终结点计算机在.NET Core中运行,因此我无法使用任何旧版.Net库,并且由于我正在部署到可能需要扩展/扩展的Azure WebApp(Windows OS),因此我无法安装除预编译的.Net Core兼容以外的任何软件。作为我从DevOps部署的一部分,硬件上的Nuget软件包。

我找不到在这种情况下运行的任何好的库或示例。 我在尝试使用与GDI +或FFMPEG相关的任何内容时遇到了问题...

希望找到类似于SixLabors.ImageSharp的东西

我按顺序列出了所有图像,并准备像这样进行处理:

var frames = new List<Image>();

// (Removed for brevity) Retrieve images from blobs & append to frame list...

foreach(var frame in frames)
{
    // Convert frames/sequence to video file
}

// Save to blob storage as .mp4

任何帮助,将不胜感激!

根据我的经验,将图像序列转换为视频流或文件的解决方案通常是使用一些流行的库,例如ffmpeglibav

如果搜索诸如C# ffmpeg images videoC# libav images video类的关键字,您将获得许多有用的内容来帮助实现它,如下所示,您可以引用的线程很少。

  1. 图像序列到视频流?
  2. 使用C#将图像转换为视频
  3. tomaszzmuda / Xabe.FFmpeg

然后,您可以获取视频流或文件作为块Blob上载到Azure Blob存储,请按照官方教程Quickstart: Azure Blob storage client library for .NET了解如何使用适用于.NET标准的Azure存储SDK和C#中的关键类是CloudBlockBlob Class ,该函数在此处输入链接描述(对于视频文件为BeginUploadFromFile或对于视频流为BeginUploadFromStream

但是有关您的应用程序部署存在问题。 由于下图对Azure Web App sandbox的限制(关于Win32k.sys (User32/GDI32) Restrictions ,您无法将任何使用过GDI系统调用的应用程序部署到Azure WebApp。

在此处输入图片说明

因此,通常为您的应用推荐的Azure服务是Azure VM。


更新:

如果您考虑使用dotNet Core来实现它,我建议您可以尝试在基于Docker且对GDI没有限制的Linux上使用Azure App Service 另外, Azure Batch是实现任何语言需求的另一种选择。 希望您能完成评估。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM