yt (1975B)
1 #!/bin/sh 2 3 VIDS="${XDG_VIDEOS_DIR:-$HOME/videos}" 4 MUSC="${XDG_MUSIC_DIR:-$HOME/music}" 5 PICS="${XDG_PICTURES_DIR:-$HOME/pictures}" 6 7 # Verificação e instalação de yt-dlp 8 if ! command -v yt-dlp >/dev/null 2>&1; then 9 echo "📦 'yt-dlp' não encontrado. Instalando..." >&2 10 doas apk add yt-dlp || { echo "ERRO: Falha ao instalar yt-dlp." >&2; exit 1; } 11 fi 12 13 _act() { 14 _url="$1" 15 _action="$(printf 'Assistir (720p)\nAssistir (melhor)\nOuvir (stream)\nBaixar vídeo\nBaixar áudio (mp3)\nBaixar thumbnail' \ 16 | dmenu -p 'Ação:')" 17 [ -z "$_action" ] && return 18 case "$_action" in 19 'Assistir (720p)') mpv --ytdl-format='bestvideo[height<=720]+bestaudio' "$_url" ;; 20 'Assistir (melhor)') mpv "$_url" ;; 21 'Ouvir (stream)') mpv --no-video "$_url" ;; 22 'Baixar vídeo') yt-dlp -f 'bestvideo[ext=mp4]+bestaudio/best' -o "$VIDS/%(title)s.%(ext)s" "$_url" ;; 23 'Baixar áudio (mp3)') yt-dlp -x --audio-format mp3 -o "$MUSC/%(title)s.%(ext)s" "$_url" ;; 24 'Baixar thumbnail') yt-dlp --skip-download --write-thumbnail -o "$PICS/%(title)s.%(ext)s" "$_url" ;; 25 esac 26 } 27 28 _search() { 29 _query="$1" 30 # busca os 10 primeiros resultados: "Título\tURL" 31 _results="$(yt-dlp "ytsearch10:${_query}" \ 32 --get-title --get-url --flat-playlist 2>/dev/null \ 33 | paste - -)" 34 [ -z "$_results" ] && { printf 'Sem resultados.\n' >&2; exit 1; } 35 36 _choice="$(printf '%s\n' "$_results" | cut -f1 | dmenu -l 10 -p "\"${_query}\":")" 37 [ -z "$_choice" ] && exit 0 38 39 _url="$(printf '%s\n' "$_results" | awk -F'\t' -v t="$_choice" '$1==t{print $2; exit}')" 40 _act "$_url" 41 } 42 43 # — roteamento — 44 if [ -n "$1" ]; then 45 case "$1" in 46 http://*|https://*) _act "$1" ;; # URL direta 47 *) _search "$*" ;; # termo passado como argumento 48 esac 49 else 50 _query="$(printf '' | dmenu -p 'Buscar no YouTube:')" 51 [ -z "$_query" ] && exit 0 52 _search "$_query" 53 fi