FlixMedia · 播放

转码

放不了的格式转成 HLS,HDR 色调映射、字幕烧录和核显加速。

浏览器或播放器放不了的格式(MKV 里的某些音轨、HEVC、DTS / TrueHD 等)由服务器转成 HLS:H.264 + AAC 双声道,6 秒一段,按需生成。

网页播放器

  • 检测到格式放不了会自动走转码;原画能直接播放的(mp4 + H.264 + AAC 等)不转码。
  • 播放器上的「⚙ 音轨 / 字幕 / 画质」菜单:
    • 音轨:列出视频里所有音轨,换音轨会用服务器转码(浏览器没法切 MKV 里的音轨)。
    • 字幕:文本字幕(外挂的和内嵌的 srt / ass)用 <track> 显示,不占转码;图形字幕(PGS / VobSub)只能烧录进画面,会转码。内嵌字幕第一次加载要把字幕从视频里提取出来(要读完整个文件,网盘上的大文件会比较慢),提取结果会缓存。
    • 画质:原画(尽量直接播放)/ 1080p / 720p / 480p,不放大,不超过设置里的上限。

转码本身

  • HDR → SDR 色调映射:HDR 片源转码时自动做色调映射,颜色不发灰。核显用 tonemap_vaapi,CPU 用 zscale + tonemap(先缩放再映射,4K 源也不至于太慢)。设置里可以关掉。
  • 字幕烧录:外挂字幕 / 内嵌文本字幕 / 内嵌图形字幕都能烧录;烧录时用 CPU 转码,保证字幕和画面的时间线对齐。Emby 客户端要求「编码进画面」或选了图形字幕时才会烧录。
  • 硬件加速:默认「自动」,有 /dev/dri/renderD128 就用 VAAPI。某部片核显转码失败(例如 HDR 片源缺少母版显示元数据时 tonemap_vaapi 会失败)自动改用 CPU,且这部片之后都用 CPU;好几部不同的片都失败时,30 分钟内整个服务不再用核显。
  • 会话管理:一个播放会话对应一个持续运行的 ffmpeg,往后连续转;领先播放位置 10 段就暂停(不白白转完整部),拖到很远的位置时从新位置重启,播放器停止请求两分钟后结束。同一部片换音轨 / 画质 / 字幕时,旧会话立刻让位;名额满了会让给最久没有请求的会话。
  • 并发上限:设置里的「同时转码路数」,超出返回 503。
  • Emby 客户端:只有客户端在 PlaybackInfo 里明确不要直接播放(EnableDirectPlay=false)时才返回转码地址,所以 Infuse 等能直接播放的播放器始终拿到原文件。转码地址会带上客户端选的音轨(AudioStreamIndex)、画质(MaxHeight)和烧录字幕。
  • 片源读取失败(网盘限频、文件不存在)时,该会话 60 秒内不再起 ffmpeg,避免播放器自动重试时继续冲击网盘。

音乐转码

浏览器放不了的音频格式(APE、WMA、DSD、AIFF…)或请求里带 transcode=1 时,边转边播 MP3(默认 192kbps,AudioBitRate 可调)。流式输出,不支持拖动。网页播放条遇到放不了的格式会自动重试转码。