快轉到主要內容

ytfzf:終端機看Youtube的極簡軟體,無廣告 、可下載影片

分類   Linux系統 Linux好用軟體
標籤   Yt-Dlp Youtube MPV
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

如果不想被演算法綁架,不想被五光十色的詐欺縮圖吸引,那麼乾脆連圖形介面都不要用吧。

ytfzf為一款讓你在Linux終端機看YouTube影片的極簡軟體,使用fzf純文字介面搜尋,再呼叫MPV播放影片。

ytfzf = YouTube + fzf

ytfzf只搜尋你想看的東西,不推薦任何東西給你。

支援訂閱頻道、檢視縮圖、下載影片、播放清單、歷史紀錄、播放佇列

ytfzf還提供擴充介面。你可以自由指定影片播放器,或是用rofi取代fzf作為選單。

背後ytfzf使用 Invidious技術爬取影片,不依賴YouTube API,不可能看到廣告。

除了Youtube以外,ytfzf還支援搜尋PeerTube、Odysee(LBRY)的影片。

1. 安裝ytfzf
#

ytfzf由一系列指令稿組成,主程式ytfzf就只是一個shell script。不需要像yewtube那樣安裝Python,只需要安裝依賴套件就行了。

原作者說ytfzf是A posix script to find and watch youtube videos from the terminal. (Without API),相容POSIX標準,已移植到FreeBSD和macOS,連Android的Termux也有支援。

  1. 根據 Github指示下載編譯安裝,或者用你的Linux套件管理器裝。

  2. Arch Linux安裝以下套件,ytfzf程式本體,fzf負責選單介面,mpv播放影片,yt-dlp下載影片,ueberzugpp當縮圖後端。

sudo pacman -S ytfzf curl jq fzf mpv yt-dlp
yay -S ueberzugpp
  1. Android參考 Github說明,安裝特製版mpv-android,啟用yt-dlp,再於Termux安裝套件:
pkg install ytfzf ncurses-utils

mkdir ~/.config/ytfzf

cat <<EOF > ~/.config/ytfzf/conf.sh
termux_player () {
    am start --user 0 -a android.intent.action.VIEW -d $1 is.xyz.mpv/.MPVActivity
}
url_handler=termux_player
EOF

2. 組態ytfzf
#

詳細說明文件請用man ytfzf指令檢視。

主設定檔
#

設定檔conf.sh用於定義訂閱的頻道列表、偏好設定、函式事件處理。該檔案遵從shell script格式,ytfzf會在執行前source這個檔案取得變數和函式。

  1. 建立設定檔
mkdir ~/.config/ytfzf
vim  ~/.config/ytfzf/conf.sh
  1. 接著設定變數,首先設定播放完影片不要自動關掉。
is_loop=1
  1. 設定預設的縮圖檢視器為kitty,啟用非同步下載縮圖
thumbnail_viewer=kitty
show_thumbnails=1
async_thumbnails=1
  1. 設定搜尋網站為Youtube,搜尋任意內容,設定搜尋國家為台灣。Invidious實例填 比較多人用的或者自己架,防止抽到不好的實例。
scrape="youtube"
search_result_type="all"
search_region="TW"
invidious_instance="https://yewtu.be"
  1. 設定監聽的快捷鍵,全部啟用
shortcut_binds="Enter,double-click,$download_shortcut,$video_shortcut,$audio_shortcut,$detach_shortcut,$print_link_shortcut,$show_formats_shortcut,$info_shortcut,$search_again_shortcut,$custom_shortcut_binds"
  1. 設定 yt-dlp的命令行參數。我設定讓yt-dlp讀取其設定檔來下載影片
ytdl_opts="--config-location ~/.config/yt-dlp/config"
  1. 啟用搜尋Odyssey上的NSFW影片
nsfw=true
  1. 如果你想用rofi取代fzf當選單,那麼就指定使用外部界面,並修改external_menu()函式的指令
interface="ext"

external_menu(){
tr -d '\t' | remove_ansi_escapes | rofi -dmenu -font "hack 16"
}

訂閱頻道
#

嚴格來說是爬取特定頻道的影片。

新增檔案subscriptions

vim ~/.config/ytfzf/subscriptions

該檔案用於放置頻道訂閱列表。網址帶有小老鼠@的頻道請先用ytfzf --channel-link="網址"轉成英數網址。

# Brodie Robertson
https://www.youtube.com/channel/UCld68syR8Wi-GY_n4CaoJGA
# Veronica Explains
tps://www.youtube.com/channel/UCMiyV_Ib77XLpzHPQH_q0qQ
# Mental Outlaw
https://www.youtube.com/channel/UC7YOGHUfC1Tb6E4pudI9STA
# 多倫多方臉
https://www.youtube.com/channel/UCzYYzigb1vXR0GQXXBja2kg
# 佑來了
https://www.youtube.com/channel/UCWYa0v8bpGyYr0ycqGXifVQ

3. ytfzf操作方式
#

快捷鍵
#

啟動ytfzf界面後才可以使用。

  • 方向鍵 選取影片
  • Enter 播放
  • Tab 將影片加入播放佇列
  • Esc或Ctrl+C 退出程式
  • Alt + d 下載選中的影片
  • Alt + v 播放選中的影片
  • Alt + m 播放選中的影片(純音訊)
  • Alt + e 彈出播放器,不關閉影片列表
  • Alt + l 印出影片網址
  • Alt + f 播放前選擇畫質
  • Alt + i 印出影片資訊
  • Alt + s 進行另一次搜尋
  • Ctrl + p 載入下一頁搜尋結果

常用啟動指令
#

啟動ytfzf,搜尋Youtube影片。啟動時加-s "關鍵字"直接搜尋影片。

ytfzf

搜尋Odysee影片(可以使用多個--scrape,同時搜尋多重網站)

ytfzf --scrape=odysee

搜尋Youtube播放清單,搜尋音樂專輯的時候很好用。如果要自動播放按Tab鍵將其加入播放佇列。

ytfzf --scrape=youtube --type=playlist

搜尋播放歷史紀錄(歷史紀錄檔案位於~/.cache/ytfzf

ytfzf --scrape=history

列出搜尋紀錄

ytfzf --search-source=hist

列出區域熱門影片

ytfzf --scrape=youtube-trending

搜尋本機訂閱列表

ytfzf --scrape=youtube-subscription

列出播放清單網址的影片

ytfzf --scrape=youtube-playlist "播放清單網址"

直接從網址播放影片

ytfzf --scrape=url "網址"

從網址爬取影片留言

ytfzf --scrape=url "網址"

4. 製作ytfzf本機影片播放清單
#

ytfzf的播放清單資訊是json格式,每部影片資訊組成一個json物件:

[
  {
    "scraper": "invidious_playlist",
    "ID": "qfNmyxV2Ncw",
    "url": "https://youtube.com/watch?v=qfNmyxV2Ncw",
    "title": "Aerosmith - Cryin' (Official Music Video)",
    "channel": "Aerosmith",
    "thumbs": "https://invidious.drgns.space/vi/qfNmyxV2Ncw/hqdefault.jpg",
    "duration": "5:31",
    "date": null,
    "description": null
  },
  {
    "scraper": "invidious_playlist",
    "ID": "NMNgbISmF4I",
    "url": "https://youtube.com/watch?v=NMNgbISmF4I",
    "title": "Aerosmith - Crazy (Official Music Video)",
    "channel": "Aerosmith",
    "thumbs": "https://invidious.drgns.space/vi/NMNgbISmF4I/hqdefault.jpg",
    "duration": "6:14",
    "date": null,
    "description": null
  }
  ]

你可以把影片網址組成播放清單並存在本機(影片還是線上播放的)

使用ytfzf -I VJ --force-youtube啟動,接著開始搜尋,所有點選的影片都會在終端機印出json資訊, 將其複製下來存成json檔案。

或者用ytfzf --scrape=youtube --type=playlist --force-youtube啟動,搜尋播放清單,進入播放清單界面後,開啟暫存檔/tmp/ytfzf-1000/實例/[playlist]/videos_json,取得目前螢幕顯示的影片列表,將其另存新檔。

接著就可以用指令播放本機播放清單了

ytfzf  --scrape=json-file "json檔路徑"

相關文章

提昇影片播放效果 ~ Linux用MPV Handler播放瀏覽器的Bilibili、Youtube、巴哈動畫瘋串流影片
分類   Linux系統 Linux好用軟體
標籤   MPV Video Upscaling Linux Bilibili Youtube Yt-Dlp Browser Extension
ani-cli 用終端機免費線上看動漫的程式,支援電腦與手機
分類   Linux系統 Linux好用軟體
標籤   Anime Linux Termux Windows MacOS MPV
電腦看Youtube的開源程式:FreeTube,無廣告、下載影片
分類   Linux系統 Linux好用軟體
標籤   Youtube Invidious Linux Windows MacOS

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用圖床網站。