如何确定和验证视频的分辨率?

How to determine and validate the resolution of the video?

提问人:kanils_ 提问时间:11/7/2023 更新时间:11/9/2023 访问量:75

问:

根据请求从 multipart/form 接收视频文件作为 IFromFile。

public class UploadMediaRequest
{
    [Required]
    public IFormFile Media { get; set; }
}

如何验证此视频的分辨率?例如,视频的分辨率应为 800 像素 x 468 像素,如果收到 1920 像素 x 1080 像素,则返回错误。

使用:.NET 7 ASP.NET Core 7

C# ASP.NET 核心 视频 多部分表单数据 媒体

评论

1赞 Dai 11/7/2023
ffprobe.exe
0赞 DavidG 11/7/2023
正如 Dai 所说,您需要将文件保存在某个地方,然后在其上运行 ffprobe。
0赞 Ghassen 11/7/2023
您是否尝试过 Vlc.DotNet github.com/ZeBobo5/Vlc.DotNet
0赞 LoLo2207 11/7/2023
查看 Nuget.org,您可以尝试使用 FFMpegCore nuget.org/packages/FFMpegCore 或 NReco.VideoInfo nuget.org/packages/NReco.VideoInfo
0赞 DavidG 11/7/2023
@Ghassen 该库已 3 年未更新,已于 2022 年初存档,仅适用于 WinForms

答:

2赞 Qing Guo 11/9/2023 #1

我们可以对输入的 change 事件使用事件侦听器。当用户选择文件时,事件侦听器回调会抓取该文件(使用 event.target.files[0]),创建新的 video 元素,并将 video 元素的 src 设置为包含表示文件对象的 URL 的 DOMString。

元数据加载完毕时,将触发该事件 - 所有属性现在都包含我们需要的信息。在此事件的回调中,我们将检索之前创建的 video 元素的 videoHeight 和 videoWidth。这些值给出了视频文件的分辨率。onloadedmetadata

演示如下:

@model UploadMediaRequest
<form asp-action="CheckPost" enctype="multipart/form-data">
  
    <input asp-for="Media" id="video-upload" type="file" />
  
    <input type="submit" value="Create" />
</form>

 <script>
const fileUpload = document.getElementById("video-upload");
 
 fileUpload.addEventListener("change", event => {
     const resultEl = document.getElementById("meta");
     const file = event.target.files[0];
     const videoEl = document.createElement("video");
     videoEl.src = window.URL.createObjectURL(file);
    
     // When the video metadata has loaded, check
     // the video width/height
     videoEl.onloadedmetadata = event => {
         window.URL.revokeObjectURL(videoEl.src);
         const { name, type } = file;
         const { videoWidth, videoHeight } = videoEl;
         var resolution = `${videoWidth}px x ${videoHeight}px`;
         if (resolution != "800x x 468px") {
             alert("Error! The  resolution of the video should be 800px x 468px ");
             $("#video-upload").val('');

         }
     }
  })

结果:enter image description here

评论

0赞 kanils_ 11/9/2023
好吧,这是一个很酷的解决方案。这也应该在前端进行。但是,问题更多地与后端有关。