首页
博客 笔记

把播放链路拆开:MPV、madVR 与字幕

播放器不是「装一个就完事」。渲染链、字幕时轴、音频输出三段拆开之后,同一个片源的观感差别大得离谱。

2 天前 2 分钟读完 506 字

片源固定、屏幕固定、房间灯也固定,剩下能动的只有播放器。这一年我把播放链路拆成三段单独调:解码与渲染、字幕对齐、音频输出。

渲染链:别让缩放算法替你决定画面

默认的 bilinear 缩放在 1080p 屏上还算体面,一到 1440p 放大就糊。换成 madVR 之后最直观的变化是锐度高光不再糊成一团,代价是显卡满载、风扇起飞。

# mpv.conf 里跟渲染相关的几行
profile=gpu-hq
scale=ewa_lanczossharp
cscale=ewa_lanczossharp
dither-depth=auto

ewa_lanczossharp 会比默认的 bilinear 多吃一截显卡,但在 24 帧的片源上,它换来的是线条干净、光晕收敛。反过来,如果你只是看 720p 的电视录制,这套配置只会让风扇更吵。

字幕:mpv 的时轴偏移能救急,但别长期凑

字幕对不齐,九成是版本不同(BD 与 TV 的起始时间差几十帧)。mpv 的 j / J 是 ±0.1 秒粗调,Shift 组合是 ±0.01 秒细调,看完再记录偏移值写进字幕文件名。

我自己的规矩是:偏移超过 1.5 秒就不救了,重新找字幕。硬凑的结果通常是前半段对、后半段又开始漂。

音频:能直通就直通

有独立音箱时,把 AC3 / DTS 直通给解码器比自己混音干净得多;只有在用耳机的时候我才让 mpv 自己做下混,否则夜间对白的音量跳变很难受。

  • 直通:audio-spdif=ac3,dts,eac3
  • 下混到双声道:audio-channels=stereo
  • 动态压缩(夜间):af=dynaudnorm=f=250:g=15

三段拆完的副作用是配置散在三个地方,换机器要重新搬。所以我把这三个文件都丢进 dotfiles 仓库,只留一行 mpv --config-dir 指向它。

一点保守建议

折腾播放器的边际收益掉得很快。把渲染链调对、字幕不再漂、音频不做二次劣化,之后再改基本都是心理作用——包括我上面那行 dither-depth=auto,坦白说我没听出区别。