You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不使用ffmpeg和DirectshowLib的情况下获取mov与mp4视频宽高

替代DirectshowLib和FFmpeg获取MP4/MOV视频宽高的方法

方法1:Windows原生Media Foundation API(仅Windows平台)

Media Foundation是Windows系统内置的多媒体框架,无需额外安装任何工具或库,适合Windows环境下的开发。

示例C#代码:

using System;
using Windows.Media.Core;
using Windows.Media.MediaProperties;

public static (int Width, int Height) GetVideoResolution(string videoPath)
{
    var mediaSource = MediaSource.CreateFromUri(new Uri(videoPath));
    var playbackItem = new MediaPlaybackItem(mediaSource);
    
    var propsTask = playbackItem.GetDisplayPropertiesAsync().AsTask();
    propsTask.Wait();
    
    var videoProps = propsTask.Result.VideoProperties;
    return (videoProps.Width, videoProps.Height);
}

注意:项目需针对Windows 10及以上版本,需引用Windows.Media相关命名空间。

方法2:使用TagLibSharp托管库

TagLibSharp是纯.NET的元数据处理库,跨平台支持Windows、Linux、macOS,可直接读取MP4/MOV的视频属性,无需外部依赖。

先通过NuGet安装TagLibSharp,再使用以下代码:

using TagLib;

public static (int Width, int Height) GetVideoResolution(string videoPath)
{
    var mediaFile = TagLib.File.Create(videoPath);
    if (mediaFile.Properties.VideoWidth > 0 && mediaFile.Properties.VideoHeight > 0)
    {
        return (mediaFile.Properties.VideoWidth, mediaFile.Properties.VideoHeight);
    }
    throw new InvalidOperationException("无法提取视频宽高信息");
}

方法3:手动解析MP4/MOV文件头

若完全不想依赖任何第三方库或系统API,可手动解析文件结构。MP4和MOV均基于QuickTime格式,核心是读取moov原子下视频轨道的tkhd(Track Header)字段,其中包含宽高数据(单位为1/65536像素,需转换为实际值)。

大致流程:

  • 打开文件并读取头部,定位moov原子的起始位置
  • 遍历moov下的trak原子,识别视频轨道(通过mdia/minf/stbl/stsd中的编码标识)
  • 读取对应trak的tkhd原子,解析其中的width和height字段并转换为像素值

这种方法需要熟悉MP4/MOV的格式规范,适合对性能或独立性有极高要求的场景。

内容的提问来源于stack exchange,提问作者kailash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:50:24