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

勾选Prefer 32-bit为何导致检索的视频压缩编解码器不同?

为何勾选/取消Prefer 32-bit时枚举视频编解码器结果不同?

这个差异的核心原因是Windows系统对32位/64位COM组件(包括视频编解码器)的隔离机制,不同位数的进程只能访问对应位数的已注册编解码器。

1. Prefer 32-bit选项的实际影响

当项目目标平台设为Any CPU时:

  • 勾选Prefer 32-bit:在64位Windows系统上,进程会以32位模式运行;在32位系统上则正常以32位运行。
  • 取消勾选:在64位系统上以64位进程运行,32位系统上以32位进程运行。

2. 编解码器的位数隔离规则

Windows系统中,32位和64位的编解码器是分开注册和管理的:

  • 32位编解码器的注册表信息存放在HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Classes分支
  • 64位编解码器的注册表信息存放在HKEY_LOCAL_MACHINE\SOFTWARE\Classes分支
    你代码中使用的ICreateDevEnum是DirectShow的COM接口,它会根据当前进程的位数,仅枚举对应位数的已注册滤镜(编解码器属于DirectShow滤镜的一种)。

3. 对应你给出的结果分析

  • 勾选Prefer 32-bit(32位进程):枚举到的@device:cm:开头的条目是32位VCM(视频压缩管理器)编解码器(如cvid、xvid等),这些编解码器只有32位版本,或者64位进程无法访问它们的注册信息。
  • 取消勾选(64位进程):枚举到了ffdshow video encoder的64位版本,同时无法访问32位专属的VCM编解码器,因此丢失了@device:cm:开头的条目。

你的枚举代码如下:

public static List<string> GetInstalledVideoCompressorCodecs()
{
    var codecs = new List<string>();
    var filterCategory = FilterCategory.VideoCompressorCategory;
    IMoniker[] monikers = new IMoniker[1];

    // Get a system device enumerator
    var devEnum = (ICreateDevEnum)new CreateDevEnum();

    // Enumerate the video codecs installed on the system
    devEnum.CreateClassEnumerator(filterCategory, out IEnumMoniker monikerEnum, 0);
    while (monikerEnum.Next(1, monikers, IntPtr.Zero) == 0)
    {
        monikers[0].GetDisplayName(null, null, out string codecName);

        // Add the codec name to the list
        codecs.Add(codecName);
    }

    return codecs;
}

勾选Prefer 32-bit时的结果:

@device:dmo:{7E320092-596A-41B2-BBEB-175D10504EB6}{33D9A760-90C8-11D0-BD43-00A0C911CE86}
@device:dmo:{D23B90D0-144F-46BD-841D-59E4EB19DC59}{33D9A760-90C8-11D0-BD43-00A0C911CE86}
@device:dmo:{F7FFE0A0-A4F5-44B5-949E-15ED2BC66F9D}{33D9A760-90C8-11D0-BD43-00A0C911CE86}
@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\DV Video Encoder
@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\MJPEG Compressor
@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\cvid
@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\i420
@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\iyuv
@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\mrle
@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\msvc
@device:cm:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\xvid

取消勾选Prefer 32-bit时的结果:

@device:dmo:{7E320092-596A-41B2-BBEB-175D10504EB6}{33D9A760-90C8-11D0-BD43-00A0C911CE86}
@device:dmo:{D23B90D0-144F-46BD-841D-59E4EB19DC59}{33D9A760-90C8-11D0-BD43-00A0C911CE86}
@device:dmo:{F7FFE0A0-A4F5-44B5-949E-15ED2BC66F9D}{33D9A760-90C8-11D0-BD43-00A0C911CE86}
@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\DV Video Encoder
@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\ffdshow video encoder
@device:sw:{33D9A760-90C8-11D0-BD43-00A0C911CE86}\MJPEG Compressor

内容的提问来源于stack exchange,提问作者Mickael Bergeron Néron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:34:53