dotfiles

Repositório dotfiles
git clone git://git.sivaldodavi.com/dotfiles.git
Log | Files | Refs | README

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