Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)

Publicado por Enio Ferlin em 19/06/2025

[ Hits: 1.010 ]

Blog: http://lattes.cnpq.br/0097812690686190

 


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 mpv

No 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/yt

Este 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 no nano. 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 comando chmod para isso:

sudo chmod +x /usr/local/bin/yt

Como 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!

Outras dicas deste autor

Procurando vídeos de YouTube pelo terminal e assistindo via mpv

Complementando o Swaybar

Gravação de tela com temporizador

Bloqueando telemetria no Deepin 23.1

Leitura recomendada

Montando imagens como partições

Unix Emulator Online

Colocando bordas em imagens em lote através de shell script

Clonar HDs em máquinas Windows 7 via servidor openSUSE

Atualizando script id-velox.pl para autenticar no provedor AOL

  

Comentários
[1] Comentário enviado por Zoiudo em 24/07/2025 - 18:02h

Falaí, chefia, vi o seu comentário e adaptei a sua sugestão ao seu script, aqui funcionou:

#!/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! ####

[2] Comentário enviado por lobzmedunimes em 28/07/2025 - 18:05h


[1] Comentário enviado por Zoiudo em 24/07/2025 - 18:02h

Falaí, chefia, vi o seu comentário e adaptei a sua sugestão ao seu script, aqui funcionou:

#!/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&lt;=360][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
2) format="bestvideo[height&lt;=480][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
3) format="bestvideo[height&lt;=720][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
4) format="bestvideo[height&lt;=1080][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
5) format="bestaudio[acodec^=mp4a]" ;;
*) echo "Opção inválida. Usando 480p como padrão."; format="bestvideo[height&lt;=480][vcodec^=avc1]+bestaudio[acodec^=mp4a]" ;;
esac

query="ytsearch8:$*"
yt-dlp -j "$query" &gt; "$tempfile" 2&gt;"$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 &lt; &lt;(jq -r '.fulltitle' "$tempfile")
mapfile -t youtube_urls &lt; &lt;(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]+$ ]] &amp;&amp; (( input &gt;= 1 &amp;&amp; input &lt;= ${#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! ####


Que baita adição! Obrigado, Zoiudo!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts