Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Dica publicada em Shell Script / Miscelânea
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Olá, pessoal! Atualizando o script da minha dica anterior: Procurando vídeos de YouTube pelo terminal e assistindo via mpv.Se você busca uma forma leve, sem anúncios e sem rastreamento para consumir conteúdo do YouTube, diretamente do seu terminal Linux, esta dica é para você!
Passo a Passo para Configurar o Script
1. Instalação das Dependências
Para o funcionamento do script, precisaremos dos seguintes aplicativos:yt-dlp (para baixar informações do YouTube), mpv (o reprodutor de vídeo) e jq (um processador JSON para linha de comando). Instale-os de acordo com a sua distribuição:No Debian/Ubuntu e derivados:
sudo apt-get install jq yt-dlp mpvNo Fedora/CentOS/RHEL e derivados:
sudo dnf install jq yt-dlp mpv
(Nota: O comando original usava yum para Fedora, mas dnf é o gerenciador de pacotes moderno e recomendado.)2. Criação do Arquivo do Script
Agora, vamos criar o arquivo onde o nosso script residirá. Você pode chamá-lo como quisermos; no exemplo, usaremos "yt" e o colocaremos num diretório comum para executáveis do sistema, como/usr/local/bin/.sudo nano /usr/local/bin/ytEste comando abrirá o editor de texto
nano para que você possa colar o conteúdo do script.3. Inserindo o Código do Script
Copie o script abaixo e cole-o dentro do arquivo que você acabou de criar nonano. Salve e saia do editor (geralmente Ctrl+O para salvar, Enter para confirmar e Ctrl+X para sair).#!/bin/bash
tempfile=$(mktemp)
youtube_dl_log=$(mktemp)
query="ytsearch8:$*"
yt-dlp -j "$query" > "$tempfile" 2>"$youtube_dl_log"
if [ ! -s "$tempfile" ]; then
echo "Nenhum resultado encontrado ou erro no yt-dlp:"
cat "$youtube_dl_log"
rm "$tempfile" "$youtube_dl_log"
exit 1
fi
declare -a youtube_urls
declare -a youtube_titles
mapfile -t youtube_titles < <(jq -r '.fulltitle' "$tempfile")
mapfile -t youtube_urls < <(jq -r '.webpage_url' "$tempfile")
for i in "${!youtube_titles[@]}"; do
printf "[%d] %s\n" $((i + 1)) "${youtube_titles[$i]}"
done
while true; do
echo -e "\nDigite o número do vídeo escolhido (ou 'q' para sair):"
read -r input
if [[ "$input" == "q" ]]; then
break
elif [[ "$input" =~ ^[0-9]+$ ]] && (( input >= 1 && input <= ${#youtube_urls[@]} )); then
mpv "${youtube_urls[$((input - 1))]}" &
else
echo "Entrada inválida."
fi
done
rm "$tempfile" "$youtube_dl_log"4. Concedendo Permissão de Execução
Para que o seu sistema possa executar o script, você precisa dar a ele permissão de execução. Use o comandochmod para isso:sudo chmod +x /usr/local/bin/ytComo Usar o Script
Com tudo configurado, o uso é muito simples:Abra o seu terminal e digite
yt seguido da sua pesquisa entre aspas. Por exemplo:yt "melhores dicas linux"O script retornará uma lista dos 8 vídeos mais relevantes da sua pesquisa (o número de resultados é definido na linha
query="ytsearch8:$*" do script, você pode alterá-lo se desejar mais ou menos resultados).Em seguida, basta digitar o número correspondente ao vídeo que deseja assistir e pressionar
Enter. O mpv será iniciado e reproduzirá o vídeo, sem propagandas e com um consumo de recursos muito baixo.Espero que esta dica seja útil para quem busca uma experiência de YouTube mais limpa e focada no terminal!
Até a próxima!
#!/bin/bash
tempfile=$(mktemp)
youtube_dl_log=$(mktemp)
# Escolher resolução
echo "Escolha a qualidade desejada:"
echo "1) 360p"
echo "2) 480p (padrão compatível: AVC1 + MP4A)"
echo "3) 720p"
echo "4) 1080p"
echo "5) Apenas áudio (MP3/AAC)"
read -rp "Digite o número da opção: " quality_choice
# Definir o formato com base na escolha
case "$quality_choice" in
1) format="bestvideo[height<=360][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
2) format="bestvideo[height<=480][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
3) format="bestvideo[height<=720][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
4) format="bestvideo[height<=1080][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
5) format="bestaudio[acodec^=mp4a]" ;;
*) echo "Opção inválida. Usando 480p como padrão."; format="bestvideo[height<=480][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
esac
query="ytsearch8:$*"
yt-dlp -j "$query" > "$tempfile" 2>"$youtube_dl_log"
if [ ! -s "$tempfile" ]; then
echo "Nenhum resultado encontrado ou erro no yt-dlp:"
cat "$youtube_dl_log"
rm "$tempfile" "$youtube_dl_log"
exit 1
fi
declare -a youtube_urls
declare -a youtube_titles
mapfile -t youtube_titles < <(jq -r '.fulltitle' "$tempfile")
mapfile -t youtube_urls < <(jq -r '.webpage_url' "$tempfile")
for i in "${!youtube_titles[@]}"; do
printf "[%d] %s\n" $((i + 1)) "${youtube_titles[$i]}"
done
while true; do
echo -e "\nDigite o número do vídeo escolhido (ou 'q' para sair):"
read -r input
if [[ "$input" == "q" ]]; then
break
elif [[ "$input" =~ ^[0-9]+$ ]] && (( input >= 1 && input <= ${#youtube_urls[@]} )); then
echo "Iniciando vídeo em mpv com formato: $format"
mpv --ytdl-format="$format" "${youtube_urls[$((input - 1))]}"
break
else
echo "Entrada inválida."
fi
done
rm "$tempfile" "$youtube_dl_log"
#
##
###
#### Conhecimento não vem de graça, valorize o aprendizado e a ajuda recebida! ####