muzuiget / dualsub-support

Dualsub - Dual Subtitles for YouTube
https://www.dualsub.xyz/
281 stars 24 forks source link

D+自動播放時間軸對不上 #484

Closed dogwowo closed 1 year ago

dogwowo commented 1 year ago

之前的版本沒有遇過類似狀況, 但這幾天看D+發現自動播放或手動播放下一部時間軸會整個跑掉 有時候重新整理還是一樣

muzuiget commented 1 year ago

需要账号,原因类似 https://github.com/muzuiget/dualsub-support/issues/471#issuecomment-1341721752

malagebidi commented 1 year ago

需要账号,原因类似 #471 (comment)

给你发邮件了,希望抽空修复一下。

muzuiget commented 1 year ago

这个错位现在是随机的,刷新几下又对得上了。

因为是动态插入出品工作室片头(例如 Disney 那个城堡),<video> 里的时间轴就和字幕对不上了。以前可以在 .m3u8 里判断出来,现在不行了,找不到哪里记录了这个偏移。

最后折腾了半天,我发现最简单的方法:就是把进度条拖回最开始从头播放,这时候不会再显示片头,然后时间轴就对得上了。

hermanho commented 6 months ago

最近我觀看幕府將軍有類似問題. 當劇集從頭開始播放時, Disney+ 會播放 STAR Original 片頭, 而這個片頭並不計算在Disney+ 播放器的時間線內

STAR Original 片頭

https://www.youtube.com/watch?v=rAu8nqR82Hw

我簡單驗證了Disney+ 是如何決定要播放 STAR Original 片頭 是在這個 XHR 請求

https://disney.playback.edge.bamgrid.com/v7/playback/ctr-regular

這個 XHR 回應可以簡化成以下例子

{
  "stream": {
    "insertion": {
      "mode": "SGAI",
      "points": [
        {
          "id": "INT-0",
          "offset": 0,
          "placement": "PREROLL",
          "content": [
            {
              "type": "AUXILIARY_CONTENT",
              "subtype": "BRAND_BUMPER",
              "playoutRequired": true,
              "path": "/ps01/disney/xxxxxxx/unenc-all-xxxxxxxx-yyyyyy.m3u8",
              "duration": 3000,
              "auxId": "xxxxxxx",
              "visuals": [],
              "actions": []
            }
          ]
        }
      ]
    }
  },
  "playhead": {
    "position": 1,
    "last_modified": "2024-01-09T01:19:10.794Z",
    "status": "PlayheadFound"
  }
}

當 playhead.position === 0 && stream.insertion.points 內有 "type" === "AUXILIARY_CONTENT" && "subtype" === "BRAND_BUMPER", 就會播放片頭然後播放器的時間線會重設到0再播放正片

如果playhead.position 係 1, 就會直接播放正片.

這個可以用Fiddler / Proxyman驗證

muzuiget commented 6 months ago

其实我也发现这个“片头效果”叫“bumper”,意思是汽车前面的保险杠,大概 3 秒钟。

在过去这个 bumper 在视频的 .m3u8 文件中,如果发现视频的 .m3u8 文件最开头的视频 .mp4 文件带有 bumper 属性,就需要把字幕偏移 3 秒钟,这样才能和字幕文件的时间轴对的上。这种情况下,看 .m3u8 就知道 bumper 一定显示或者一定不显示。

但是现在改了,视频的 .m3u8 文件就是纯正片内容的视频地址,bumper 的信息被移动到别处,bumper 是随机的。估计给人一种“仪式感”,比如你第一次播放显示,但是中途离开后再回来继续观看,就不显示了。这就是为什么有时刷新一下就正常了。

你这个请求信息,应该表示这个视频有 bumper,不表示是否一定会显示。

所以最简单还是重置进度条方法,其实我应该把这个方法信息显示在字幕菜单页面中的,只是我懒一直都没添加。

muzuiget commented 6 months ago

在 v2.28.0,在字幕菜单页面添加了 #593 的链接。