如果不想被演算法綁架,不想被五光十色的詐欺縮圖吸引,那麼乾脆連圖形介面都不要用吧。
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也有支援。
根據 Github指示下載編譯安裝,或者用你的Linux套件管理器裝。
Arch Linux安裝以下套件,ytfzf程式本體,fzf負責選單介面,mpv播放影片,yt-dlp下載影片,ueberzugpp當縮圖後端。
sudo pacman -S ytfzf curl jq fzf mpv yt-dlp
yay -S ueberzugpp
- 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這個檔案取得變數和函式。
- 建立設定檔
mkdir ~/.config/ytfzf
vim ~/.config/ytfzf/conf.sh
- 接著設定變數,首先設定播放完影片不要自動關掉。
is_loop=1
- 設定預設的縮圖檢視器為kitty,啟用非同步下載縮圖
thumbnail_viewer=kitty
show_thumbnails=1
async_thumbnails=1
- 設定搜尋網站為Youtube,搜尋任意內容,設定搜尋國家為台灣。Invidious實例填 比較多人用的或者自己架,防止抽到不好的實例。
scrape="youtube"
search_result_type="all"
search_region="TW"
invidious_instance="https://yewtu.be"
- 設定監聽的快捷鍵,全部啟用
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"
- 設定 yt-dlp的命令行參數。我設定讓yt-dlp讀取其設定檔來下載影片
ytdl_opts="--config-location ~/.config/yt-dlp/config"
- 啟用搜尋Odyssey上的NSFW影片
nsfw=true
- 如果你想用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檔路徑"