mpv 0.41.0 是命令行驱动的视频播放器,Windows 压缩包 77205127 字节,解开只有 6 个文件共 287539608 字节,主程序 mpv.exe 57294336 字节。
它要解决的是:图形播放器把参数藏在设置面板里,而你要的是「按这个比例铺满、用这个缩放算法、只输出这一路音轨」。这 3 件事在 mpv 里都是一行参数,写进配置文件就永久生效。
这次量了三件事:包里 6 个文件各占多少、窗口多久出来、以及拿掉显示和音频之后纯解码能跑到多少倍速。
6 个文件,287539608 字节
官方 release 的 Windows 包是 77205127 字节,解开只有 6 个文件。压缩比 3.7,因为最大的那个文件是调试符号,压缩率极高。
| 文件 | 字节 | 说明 |
|---|---|---|
| mpv.pdb | 229097472 | 调试符号,运行不需要 |
| mpv.exe | 57294336 | 主程序 |
| vulkan-1.dll | 1139712 | Vulkan 加载器 |
| mpv.com | 7680 | 控制台包装,用来接管道 |
| mpv-register.bat | 202 | 注册文件关联 |
| mpv-unregister.bat | 206 | 撤销关联 |
| 压缩包 | 77205127 | 压缩比 3.7 |
| 删掉 pdb 后 | 58432136 | 6 个文件少一个 |
| pdb 占比 | 79.7% | 229097472 / 287539608 |
229097472 字节的 pdb 占 79.7%
调试符号占了整个包的近八成,删掉之后剩下 58432136 字节,程序照常运行。它只在你要用调试器看崩溃栈时才需要,日常播放留着纯属浪费空间。
mpv.exe 和 mpv.com 是同一个程序的两种入口
mpv.exe 走图形子系统,双击不弹控制台;mpv.com 7680 字节,走控制台子系统,能把日志打到标准输出。要看解码细节就用后者。
窗口 513 毫秒
从启动到窗口可见用了 513 毫秒,其中大部分是加载 57294336 字节的主程序和初始化解码器。
| 指标 | 值 |
|---|---|
| 首帧 | 513 毫秒 |
| 主程序 | 57294336 字节 |
| 解压后目录 | 287539608 字节 |
513 毫秒里没有解码时间
窗口先出来,第一帧画面随后才贴上。测的 1 个指标是窗口创建,不是首个关键帧解码完成的时刻,后者取决于文件本身和磁盘速度。
不打开文件也能起窗口
加 --force-window=yes 会在没有输入的情况下也建一个空窗口,这个参数是给纯音频场景用的,顺便让「启动要多久」这件事能被单独量出来。
1080p60 能跑到 15.82 倍速
把显示和音频都换成空输出(--vo=null --ao=null),再加 --untimed 解除实时限制,10 秒的 1080p60 内容 0.63 秒解完。
| 场景 | 10 秒内容耗时 | CPU 峰值 | 倍速 |
|---|---|---|---|
| 1080p60 纯软解 | 0.63 秒 | 810.1% | 15.82x |
| 4K30 纯软解 | 0.85 秒 | 1082.0% | 11.81x |
| 1080p60 开 hwdec=auto | 0.63 秒 | 888.2% | 15.81x |
| 这台机器的逻辑核 | 12 个(6 物理核) | ||

810% 意味着占满 8 个核心
CPU 峰值 810.1% 等于 8.1 个逻辑核同时跑满。这台机器是 6 物理核 12 逻辑核,所以软解 1080p60 用掉三分之二算力。4K30 的 1082% 是 10.8 个核,整机只有 12 个逻辑核,余量已经很薄。
15.82 倍速对应约 950 帧每秒
10 秒内容 0.63 秒解完,折算 15.82 倍速;60 帧每秒的视频乘上 15.82 就是每秒约 949 帧的解码吞吐。这个指标只和 CPU 有关,读这个大文件本身不构成瓶颈。
开硬件解码反而更费 CPU
同一个 1080p60 文件加 --hwdec=auto,CPU 峰值 888.2%,比纯软解的 810.1% 还高,倍速没变。
| 配置 | CPU 峰值 | 倍速 | 原因 |
|---|---|---|---|
| --hwdec=no | 810.1% | 15.82x | 全部在 CPU 上解 |
| --hwdec=auto | 888.2% | 15.81x | 解码搬到 GPU,但要把帧回读到内存 |
| 两者差 | 78.1 个百分点 | 0 | 888.2 减 810.1 |
因为输出是空设备
硬解的价值在于把帧留在显存里直接上屏。测试时用 --vo=null,帧必须回到内存再丢弃,多了一次来回搬运,所以 CPU 反而涨了 78 个百分点。真实播放时这个差别会倒过来。
判断该不该开硬解看场景
4K 以上、或者机器只有 4 个核时,硬解是必需的;1080p 在 6 核以上的机器上,软解的画质和兼容性更稳。
参数就是功能表
没有设置面板,所有能调的东西都是命令行参数,写进 mpv.conf 就变成默认值。
| 参数 | 作用 |
|---|---|
| --vo=null | 不输出画面,纯解码 |
| --untimed | 不等时间戳,尽快解完 |
| --hwdec=no / auto | 关掉或打开硬件解码 |
| --force-window=yes | 没有输入也建窗口 |
| --geometry=1280x720 | 指定初始窗口尺寸 |
| 测试片源大小 | 209 MB,60 秒 1080p60 |
| 实时播放 10 秒 vs 不限速 | 10.46 秒 对 0.63 秒,差 16 倍 |
> mpv.com --no-config --vo=null --ao=null --untimed --length=10 video.mp4
● Video --vid=1 (h264 1920x1080 60 fps) [default]
VO: [gpu-next] 1920x1080 yuv420p
Exiting... (End of file)
--no-config 是为了排除干扰
测基准时必须加这个参数,否则你本地的 mpv.conf 里的缩放算法、缓存大小会混进来,两次测量不可比。它让程序只用内置默认值启动。
默认输出是 gpu-next
日志里 VO: [gpu-next] 说明用的是新一代渲染后端,走 Vulkan 或 D3D11。包里那个 vulkan-1.dll 就是给它用的,系统没装 Vulkan 运行时也能跑。
日志里两行够用了
用 mpv.com 跑起来,输出里真正需要看的只有两行:一路是视频轨的编码信息,一路是输出模块选了什么。
● Video --vid=1 (h264 1920x1080 60 fps) [default]
VO: [gpu-next] 1920x1080 yuv420p
V: 00:00:00 / 00:01:00 (0%)
| 行 | 含义 | 能看出什么 |
|---|---|---|
| ● Video | 视频轨编号、编码、分辨率、帧率 | h264 1920x1080 60 fps,只有 1 路视频 |
| VO | 输出模块与像素格式 | 选了 gpu-next,格式 yuv420p |
| V | 当前时间 / 总时长与百分比 | 总长 00:01:00,即 60 秒 |
帧率写在这里决定后面 15.82 倍怎么算
日志里 60 fps 这个数字就是倍速换算的基数:15.82 倍速乘 60 帧等于每秒约 949 帧。文件如果不是 60 fps,同一个倍速对应的帧数完全不同。
VO 那行告诉你有没有走 GPU
写 gpu-next 说明渲染走了显卡,写 null 就是纯解码。测吞吐时故意让它显示 null,就是为了把渲染开销从测量里剔掉。
几个真踩过的点
下面三条在这次测试里真实出现,附当时的处理方式。
| 现象 | 原因 | 处理 |
|---|---|---|
| 双击 exe 没有任何输出 | mpv.exe 走图形子系统,日志不进控制台 | 改用 mpv.com,或在参数里加 --terminal |
| 脚本里计时的耗时不等于解码耗时 | 默认按时间戳实时播放 | 加 --untimed 才是不限速的真实吞吐 |
| 窗口一闪就退出 | 文件路径写错时程序直接结束 | 用 mpv.com 跑一遍看报错,路径里的空格要加引号 |
不加 --untimed 会白测
第一次测 10 秒内容用了 10.46 秒,看起来像「实时倍率 0.96」,其实是程序在按 60 帧每秒的节奏等时间。加上 --untimed 之后同一段内容 0.63 秒解完,差一个数量级以上。
命令行版本才看得到日志
如果 --length=10 跑完没有任何输出,说明标准输出被丢弃了,此时无法判断解码是否成功;把调用的 mpv.exe 换成 mpv.com 才看得到日志。后者是图形子系统程序,日志不进控制台。
如果把文件路径写错,程序会立即失败退出,控制台只留一行报错;路径里有空格时还要求整段加引号。
什么场景值得上
批量转码前先验证解码能力、或者要把播放器嵌进脚本和自动化流程时,1 个 exe 就能跑完全流程,比带界面的播放器好安排。
| 场景 | 合适度 | 说明 |
|---|---|---|
| 命令行播放 / 批量处理 | 高 | 参数即功能,能写进脚本 |
| 测机器解码能力 | 高 | --vo=null --untimed 直接出倍速 |
| 日常看片 | 中 | 没有播放列表和图形设置,需自己配 |
| 需要拖拽字幕、DVD 菜单 | 低 | 这些要靠脚本或外部工具补 |
它不提供播放列表管理
一次只吃命令行给的文件,队列要靠参数或外部脚本拼。想要「打开文件夹自动连播」得自己写 --playlist 或换别的播放器。
授权与费用
GPL-2.0 或更高,个人和商业环境都不收费。源码在 GitHub 上,主要语言 C,release 里的 Windows 包是官方构建产物,版本号带 git 哈希。







