找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 12|回复: 0

Proxy_Bink32w — Bink视频API代理DLL [v2.0.0]

[复制链接]
发表于 昨天 20:16 | 显示全部楼层 |阅读模式
Proxy_Bink32w — Bink视频API代理DLL [v2.0.0]

作者:YoWassup | GitHub:https://github.com/YoVVassup/Proxy_Bink32w
最新版本:v.2.0.0 | 许可证:CC BY-NC-SA 4.0




这是什么?

Proxy_Bink32w 是一个 binkw32.dll 代理DLL,可以拦截游戏与真实Bink视频DLL之间的所有API调用。它作为一个"中间人",在不修改游戏本身的情况下,为 红色警戒2尤里的复仇 提供以下增强功能:

  • 视频音轨替换:用自定义WAV/OGG文件替换过场动画的音频
  • Full HD视频支持:支持1920×1080分辨率视频,自动保持宽高比缩放到游戏分辨率
  • 兼容67个Bink版本:覆盖19个版本组,适用于大量经典游戏



  1. gamemd.exe → binkw32.dll (代理) → binkw32_1.0q.dll (真实Bink SDK)
复制代码





下载

预配置版本(RA2 + RA2YR 开箱即用):
https://pan.huang1111.cn/s/4R7O4hg

下载包包含:
  • RA2YR:11条音频轨道(配音)+ Full HD视频(可自动缩放到更低分辨率)
  • RA2:13条音频轨道(配音)+ Full HD视频(可自动缩放到更低分辨率)
  • 代理DLL + RA2/RA2YR所需的真实Bink DLL + 预配置 binkw32.cfg


GitHub源码编译:
https://github.com/YoVVassup/Proxy_Bink32w/releases/tag/v.2.0.0




安装步骤

方法一:使用预配置包(推荐)

  • 下载预配置包,解压到游戏目录
  • 确认 binkw32.dll 和 binkw32_1.0q.dll 都在游戏目录中
  • 如果需要替换音轨,将 BinkWAV 文件夹放到游戏目录中
  • 编辑 binkw32.cfg 配置音频替换映射(见下方配置说明)
  • 启动游戏


方法二:自行编译

环境要求:
  • Visual Studio 2022 或更新版本
  • CMake 3.28+


编译命令:


  1. # RA2/RA2YR默认组(Group 5)+ 最佳视频质量(Group 7)
  2. cmake -B build -G "Visual Studio 17 2022" -A Win32
  3. cmake --build build --config Release
复制代码


编译完成后,在 build/GROUP_5/Release/ 目录中找到:
  • binkw32.dll — 代理DLL
  • binkw32_1.0q.dll — 真实Bink DLL
  • binkw32.cfg — 配置文件


将 GROUP_5 文件夹中的所有文件复制到游戏目录即可。




音频替换配置

支持的音频格式

格式说明
WAVPCM,8/16位,任意采样率,单声道/立体声(最多8声道)
OGGVorbis,任意采样率,单声道/立体声(通过stb_vorbis)


注意:不支持24位WAV文件。

配置文件 binkw32.cfg


  1. [exception]
  2. ; 指定哪些.mix文件需要特殊处理
  3. 0=movies01.mix
  4. 1=movies02.mix
  5. 2=movmd03.mix

  6. [movies01]
  7. ; .bik文件名 = 替换音频路径(相对于DLL目录)
  8. westlogo.bik = BinkWAV\RA2\westlogo.wav
  9. a00_f00e.bik = BinkWAV\RA2\a00_f00e.wav
  10. a01_f00e.bik = BinkWAV\RA2\a01_f00e.wav
  11. a01_p01e.bik = BinkWAV\RA2\a01_p01e.wav
  12. ; ... 更多映射

  13. [movies02]
  14. s01_f00e.bik = BinkWAV\RA2\s01_f00e.wav
  15. s01_p01e.bik = BinkWAV\RA2\s01_p01e.wav
  16. ; ... 更多映射

  17. [movmd03]
  18. ; 尤里的复仇过场动画
  19. a00_f00e.bik = BinkWAV\RA2YR\a00_f00e.wav
  20. a01_f00e.bik = BinkWAV\RA2YR\a01_f00e.wav
  21. ; ... 更多映射

  22. [audio]
  23. ; 全局回退(当exception中未找到时使用)
  24. ; s01_f00e.bik = BinkWAV\s01_f00e.wav

  25. [log]
  26. ; enabled = false   ; 禁用日志(默认:true)
  27. ; wait = true       ; 记录BinkWait调用(默认:false)
复制代码


配置优先级

[exception] 段的优先级 高于 [audio]。

当视频打开时,代理首先检查 .mix 归档名是否匹配exception条目,然后在该exception段中查找 .bik 文件名。如果未找到,才回退到全局 [audio] 段。

RA2和RA2YR的.mix文件

游戏.mix文件
红色警戒2movies01.mix(盟军过场)、movies02.mix(苏军过场)
尤里的复仇movmd03.mix(尤里过场)





WAV转OGG工具

使用 tools/convert_wav_to_ogg.ps1 批量将WAV转换为OGG Vorbis:


  1. # 转换当前目录下所有WAV(递归)
  2. .\tools\convert_wav_to_ogg.ps1

  3. # 转换指定文件夹
  4. .\tools\convert_wav_to_ogg.ps1 "C:\path\to\wav\files"

  5. # 更高质量(0=最差, 10=最佳, 默认=3)
  6. .\tools\convert_wav_to_ogg.ps1 "C:\path\to\wav" -Quality 5

  7. # 预览将要转换的文件(干运行)
  8. .\tools\convert_wav_to_ogg.ps1 "C:\path\to\wav" -DryRun

  9. # 转换并删除原始WAV
  10. .\tools\convert_wav_to_ogg.ps1 "C:\path\to\wav" -DeleteOriginal
复制代码


输出示例:

  1. Found 1022 WAV files, quality=10
  2.   7wolf\a00_f00e.ogg  41098.5KB -> 10584.9KB (26%)
  3.   ...
  4. Done: 980 converted, 42 failed
复制代码





Bink版本兼容性

对RA2/RA2YR最重要的两个组

Bink版本说明
Group 51.0n-1.0t(5个版本)RA2/RA2YR默认 — 83个序数,ExpandBink,RADSetMemory
Group 71.9q-1.9u(3个版本)最佳视频质量 — 73个序数,BinkSetMemory


  • 使用 Group 5 DLL 获得原版播放效果 + 新功能
  • 使用 Group 7 DLL 获得改进的色彩校正 + 新功能


完整兼容列表(19组,67个版本)

版本示例游戏
11.8c-1.8x (12)Dragon Age Origins, Mass Effect, BioShock, COD MW2/MW3
21.5e-1.5v (10)Beyond Good and Evil, XIII, FarCry
31.5x-1.7b (9)Psychonauts, Evil Genius, RACE On
41.9a-1.9h (5)PAYDAY The Heist, Mass Effect 2, The Witcher
51.0n-1.0t (5)RA2 / RA2YR 默认
61.9i-1.9p (5)Batman Arkham Asylum, Sleeping Dogs, Borderlands
71.9q-1.9u (3)最佳视频质量
81.0v-1.0x (3)Fallout Tactics, Red Faction
91.8a-1.8b (2)Just Cause
101.2i-1.5a (2)Morrowind, Syberia
11-19各1-2个版本各种经典游戏





技术原理

工作流程

  • 游戏加载 binkw32.dll(我们的代理)到进程
  • 首次调用 BinkOpen 时,代理延迟初始化,加载真实Bink DLL
  • 所有Bink API函数通过 序数(ordinal) 从真实DLL解析
  • 代理导出108个函数存根,通过 __stdcall 函数指针直接转发到真实DLL


.mix归档解析

代理能解析RA2/YR的 .mix 归档格式:
  • 头部:4字节保留 + offset 4处的uint16文件计数
  • 哈希表:offset 0xA处(每条目12字节:CRC32 + offset + size)
  • LMD文件:CRC32 0x366E051F,包含CRC32 → 文件名映射
  • CRC32按RA2约定计算:大写 + 填充到4字节对齐


视频缩放

当 BinkCopyToBuffer 的目标缓冲区小于视频分辨率时,代理使用 保持宽高比的适配缩放(类似CSS object-fit: contain)自动缩放帧。使用预计算查找表的最近邻算法,DDraw负责最终屏幕拉伸。




日志

日志文件 binkw32_proxy.log 创建在DLL目录。

在 binkw32.cfg 中配置:

  1. [log]
  2. enabled = false   ; 禁用所有日志(默认:true)
  3. wait = true       ; 记录BinkWait调用(默认:false)
复制代码





测试

项目包含255个单元测试(Google Test),覆盖31个测试套件:

模块测试数覆盖率
config.cpp(CRC32、.mix解析器、.bik头、.wav解码器、配置解析器)78100%
binkw32_proxy.cpp(TrackVideo、UntrackVideo、FindVideo、缩放等)47100%
wav_player.cpp(分配、释放、启动、停止、暂停、恢复、跳转)35100%
logging.cpp(Log、LogF、TrimRight、文件轮转)1100%
audio_decoder.cpp(WAV、OGG、负面测试)21100%
损坏数据测试(畸形.mix、.bik、.wav、配置)26
集成测试(DLL导出、序数、真实文件)13
第三方(OGG、WAV、跨格式、.mix)15





常见问题

Q: 安装后游戏无法启动?
A: 确保 binkw32_1.0q.dll(真实Bink DLL)与 binkw32.dll(代理)在同一目录。如果缺少真实DLL,会出现错误对话框。

Q: Group 5 和 Group 7 有什么区别?
A: Group 5是RA2/RA2YR原版使用的Bink版本,Group 7是更新的版本,提供更好的视频质量。两个都可以正常使用。

Q: 如何只替换某个过场动画的音轨?
A: 在 binkw32.cfg 的对应 .mix 段中添加映射,格式为 文件名.bik = 音频路径。

Q: 支持中文配音吗?
A: 支持。只需将中文配音的WAV或OGG文件放到 BinkWAV 目录中,并在配置文件中映射即可。

Q: 日志在哪里?
A: 在游戏目录中的 binkw32_proxy.log 文件。




相关项目

  • BikMod — C&C Bink视频模组
  • RA2YR-reMIXer — MIX文件解保护工具
  • Phobos — TS引擎扩展项目





项目结构


  1. Proxy_Bink32w/
  2. ├── binkw32.cfg              # 音频替换配置
  3. ├── Real/                    # 原始Bink DLL(67个兼容版本)
  4. ├── src/
  5. │   ├── binkw32_proxy.cpp    # DLL加载器、视频跟踪、代理导出
  6. │   ├── config.cpp           # 配置解析、.mix解析器
  7. │   ├── audio_decoder.cpp    # WAV + OGG解码器
  8. │   ├── wav_player.cpp       # WaveOut音频播放
  9. │   ├── ordinals.inc         # 自动生成的序数表(19组)
  10. │   ├── exports.def          # DLL导出表(108个导出)
  11. │   └── stb_vorbis.c         # OGG Vorbis解码器
  12. ├── tests/                   # 255个单元测试
  13. └── tools/
  14.     ├── setup.ps1            # 自动下载工具
  15.     ├── generate_ordinals.ps1 # 自动生成序数表
  16.     └── convert_wav_to_ogg.ps1 # WAV转OGG
复制代码





项目地址: https://github.com/YoVVassup/Proxy_Bink32w
最新发布: https://github.com/YoVVassup/Proxy_Bink32w/releases/tag/v.2.0.0
预配置下载: https://pan.huang1111.cn/s/4R7O4hg

评分

参与人数 1DIY币 +15 收起 理由
Noble_Fish + 15

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|Archiver|手机版|管理员邮箱|红警DIY论坛 |网站地图

GMT+8, 2026-7-5 02:50 , Processed in 0.068534 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表