OBS plugin obs-text 顯示播放中音樂, display playing music


只適用Microsoft Windows

透過修改的OBS內建plugin obs-text來達成,替換掉我改過的檔案就能用了 (OBS版本差異過大時,只換檔案會無法使用)
或是用我做的OBS,整個OBS(含plugin)都換我改的 (公開程式碼,無添加惡意程式碼)
https://craftwarblog.blogspot.com/2017/09/obs-studioby-craftwar.html

使用方法
obs-text設定中選歌名模式,其他我新增的功能請參考相關文章


支援的播放器 

1.瀏覽器上的
驗證可用: Firefox, Chrome, Edge(新版用Chromium做的,logo像Firefox的)

播歌的網頁必須是現在分頁 (開一個獨立視窗只開一個分頁也可以)
除了youtube以外,都需要再安裝對應的 使用者腳本(userscript)才能抓到
點進對應的usercript後,會打開github,下面有兩個站選一個你喜歡的去裝

不會用userscript的,先看 https://craftwarblog.blogspot.com/2017/11/userscript-install.html

  1. YouTube
  2. YouTube Music
    https://github.com/craftwar/userscript/tree/master/Youtube-Music-song-name-helper
  3. Spotify
    https://github.com/craftwar/userscript/tree/master/Spotify-song-name-helper
  4. ニコニコ動画 (Niconico)
    https://github.com/craftwar/userscript/tree/master/Niconico-song-name-helper
實況點歌用
  1. Nightbot AutoDJ
    https://github.com/craftwar/userscript/tree/master/NightBot-song-name-helper
  2. MooBot
    https://github.com/craftwar/userscript/tree/master/MooBot-song-name-helper

2. 瀏覽器以外

直接支援,不像瀏覽器多數需要userscript
  1. foobar2000 v1.4 以後版本
  2. osu!
    只有在打圖的時候會抓
  3. Spotify應用程式版
  4. iTunes
    大概知道怎麼做了,暫時沒空處理
    直接抓視窗畫面吧 (同樣方法無效,我還沒想出好方法,等人教我)
    應該寫個iTunes plugin可以做到,這對使用者太麻煩了。等我哪天有iOS裝置(iPhone, iPad)可能會來研究更好的做法
  5. VLC media player
  6. YouTube Music Desktop (requested by 丹丹)
    如果沒有YouTube Music Premium可能會抓成播放的廣告 (因為在播放廣告後title會改變)
3. 不打算支援的程式
  1. KMPlayer (KMP), PotPlayer
  2. 千千靜聽

其他combo技巧
Youtube只播放聲音,不放畫面省資源 youtube-audio_only (點歌放youtube的也有效)

網頁播放器可搭配虛擬桌面擷取影片,讓播放器不影響工作/遊戲桌面
https://craftwarblog.blogspot.com/2019/02/win10-virtual-desktop.html


和其他軟體/方案比較
其他非整合進OBS的必須另外開程式,把歌名寫入檔案再讓OBS讀取,OBS隔一段時間就要檢查檔案是否改變 + 取得歌名的程式的額外消耗(可能也是不斷查詢的作法),消耗較多資源,更新的延遲: 程式取得歌名延遲未知 + 檔案系統最多兩秒(ntfs檔案系統,或是在fat32系統最多4秒)

我的方法歌名改變時會主動回報給OBS,不持續檢查,節省資源,更新延遲較低
比抓播放器的畫面省資源,視窗最小化也能抓到,抓畫面還需要知道歌名多長 
可顯示任何長度的歌名 (用跑馬燈方式或自動換行)


注意事項
開多個播放器只會抓到其中一個 (請關掉不用的,才會去抓別的)
換播放器要讓歌名不顯示才會重抓,有這三種方式可以重置播放器選擇
  1. 關掉再打開source的顯示 (點擊像眼睛的圖示)
  2. 切換到其他scene讓顯示歌名的obs-text不顯示,再切回去
  3. 去設定把模式改成別的再改回去按確定
可以建議新的播放器,我有興趣就會加 (可能是很多人用,或是好用)
如果是網頁播放器,有興趣的人可以自己寫,寫好連結給我,我可以加進清單
技術上,我是把window title改成和youtube一樣,這樣obs-text的code就不用增加,效率比較好


===忽略下面,自己用的紀錄=== 或是你對技術有興趣可以看
其他人寫抓歌名的,除了有網路API可用以外,都是抓Window title
我的方法也一樣,只是效能更高

programing related note

iTunes是UWP,顯示的歌名似乎是用畫的,無法直接用windows API抓到文字

EnumWindow/FindWinow 都只找top level window
FindWindowEx才能找其他的,應該不會有問題就沒做
OBS也是只抓top level

要改成non-active tab也抓到,技術上可以,只是懶,要讓firefox送message給OBS接
好像也有port被佔用的可能,總之懶得寫,似乎要寫成web extension不能用user script
我覺得使用者安裝設定上會更麻煩

有人建議提供選項combobox? 或下拉選單選擇開啟哪些player,目前的plugin UI限制不好做,等以後再考慮

Spotifyu要改@inject-into content
https://violentmonkey.github.io/2018/11/23/inject-into-context/

新版改用hook monitor target window title change,不用polling,減少CPU用量
歌名有改變OBS才需要去處理,大量節省資源
SetWinEventHook 不知道會不會有程式擋掉? chrome都可以應該沒問題吧?

這個網誌中的熱門文章

OBS 抓不到畫面, 視窗, 遊戲擷取, 黑或白畫面, 當掉 ,卡住, black/white screen, window game capture, crash, freeze

優化實況(一) OBS設定 streaming settings