Assine a Lista Dicas-L
Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.
Fazendo download de videos do youtube via shell script
Colaboração: Tiago Barcellos Peczenyj
Data de Publicação: 05 de Julho de 2007
Apresentação
Não é incomum encontrar algum video curioso no site youtube.
Cerca de um ano atras eu pesquisei uma forma de fazer o download automatico de videos do youtube informando o id ou a url inteira. Ele é bem didático, basta ser um pouco nerd e conhecer um pouco de expressões regulares.
Minha inspiração para postar este script surgiu do feito do Warren Harding, que baixou um vídeo do referido site usando o Lynx e usou o Mplayer para exibir o vídeo no modo ASCII. O resultado é divertido.
#!/bin/bash
# youtube downloader
# usage: script
# YouTube URL: http://www.youtube.com/watch?v=[video_id]
[ -z "${1}" ] && { echo 'Error! Missing url or video_id!' ; exit 1 ; }
URL="http://www.youtube.com"
# download link: http://youtube.com/get_video?video_id=[video_id]&t=[t_id]&...
DOWNLOAD=`wget -qO - "${URL}/watch?v=${1/*=}" | grep -oE 'video_id=.*&t=[^\"&]*' | head -1`
wget -O "${1/*=}.flv" "${URL}/get_video?${DOWNLOAD}"
Eu poderia ter feito tudo em uma unica linha usando xargs, porém ficaria um pouco poluído para publicar neste formato, mas fica aí a dica.
Veja a relação completa dos artigos de Tiago Barcellos Peczenyj
Referências Adicionais
Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.
Avalie esta dica
Opinião dos Leitores
06 Fev 2009, 03:42
http://www.explorando.viamep.com/2009/02/baixar-videos-do-youtube-sem-programas
tem um javascript q é só colar na barra de endereços, e da pra baixar em alta qualidade!
07 Out 2008, 15:47
http://www.freefileconvert.com
Também é possivel fazer conversões de arquivo nesse site
Uma boa dica pra quem não ta conseguindo baixar
21 Ago 2008, 15:24
errei
21 Ago 2008, 15:23
Obrigado pelos códigos
13 Ago 2008, 10:31
08 Jun 2008, 18:50
Não sou programador e estou iniciando o estudo do bash e outras linguagens de script.
18 Mai 2008, 16:38
18 Mai 2008, 13:39
06 Mar 2008, 22:39
$ ./youtube.sh "url"
Sobre a barra de contagem acompanhar o processo, dá para usar a regra de três...
Mas, precisaria saber o tamanho do arquivo de destino...
Arq.Origerm 100
---
Arq.Destino
Dê uma olhada neste dialog...
E tire suas próprias conclusões...
#!/bin/bash
# copydir.sh - Copia o diretório mostrando uma barra de progresso
# Este script faz parte do http://aurelio.net/shell/dialog
#
# Uso: copydir.sh <dir-origem> <dir-destino>
#
# Exemplo de uso da caixa de barra de progresso (gauge), que é
# diferente e meio complicada de usar. Ela espera receber a
# porcentagem da barra via STDIN, sendo um número de 0 a 100.
#
# O Gauge só mostra na tela a porcentagem que você informar,
# ele não tem inteligência, então todo o controle sobre o
# processo deve ser feito manualmente pelo programador.
#
# O procedimento se resume em duas ações:
#
# 1) Saber como quantificar o TOTAL, para conhecer o 100%.
# No caso de uma cópia de arquivos, o TOTAL é o tamanho
# total de todos os arquivos a serem copiados.
#
# 2) Saber como descobrir de tempos em tempos o STATUS
# corrente do procedimento, enquanto ele está sendo
# executado, para poder calcular o quanto ainda falta
# para o final (100%). No caso de uma cópia de arquivos,
# o STATUS é a quantidade de arquivos que já foi copiada,
# ou o espaço em disco ocupado por eles.
#
# Tendo os dois dados não, uma simples regrinha de três lhe dá
# a porcentagem atual do andamento: STATUS*100/TOTAL.
#
# 12 Agosto 2004 - Aurélio Marinho Jargas
#................................................................
TITLE='Copiando...'
MSG='Copiando o diretório $ORIGEM para $DESTINO'
INTERVALO=1 # intervalo de atualização da barra (segundos)
PORCENTO=0 # porcentagem inicial da barra
#................................................................
ORIGEM="${1%/}"
DESTINO="${2%/}"
die() { echo "Erro: $*" ; exit 1 ; }
sizeof() { du -s "$1" | cut -f1; }
running(){ ps $1 | grep $1 >/dev/null; }
#................................................................
# tem somente dois parâmetros?
[ "$2" ] || die "Uso: $0 dir-origem dir-destino"
# a origem e o destino devem ser diretórios
[ -d "$ORIGEM" ] || die "A origem '$ORIGEM' deve ser um diretório"
[ -d "$DESTINO" ] || die "O destino '$DESTINO' deve ser um diretório"
# mesmo dir?
[ "$ORIGEM" = "$DESTINO" ] &&
die "A origem e o destino são o mesmo diretório"
# o diretório de destino está vazio?
DIR_DESTINO="$DESTINO/${ORIGEM##*/}"
[ -d "$DIR_DESTINO" ] && [ $(sizeof $DIR_DESTINO) -gt 4 ] &&
die "O dir de destino '$DIR_DESTINO' deveria estar vazio"
#................................................................
# expansão das variáveis da mensagem
MSG=$(eval echo $MSG)
# total a copiar (em bytes)
TOTAL=$(sizeof $ORIGEM)
# início da cópia, em segundo plano
cp -r $ORIGEM $DESTINO &
CPPID=$!
# caso o usuário cancele, interrompe a cópia
trap "kill $CPPID" 2 15
#................................................................
# loop de checagem de status da cópia
(
# enquanto o processo de cópia estiver rodando
while running $CPPID; do
# quanto já foi copiado?
COPIADO=$(sizeof $DIR_DESTINO)
# qual a porcentagem do total?
PORCENTAGEM=$((COPIADO*100/TOTAL))
# envia a porcentagem para o dialog
echo $PORCENTAGEM
# aguarda até a próxima checagem
sleep $INTERVALO
done
# cópia finalizada, mostra a porcentagem final
echo 100
) | dialog --title "$TITLE" --gauge "$MSG" 8 40 0
#................................................................
echo OK - Diretório copiado
30 Set 2007, 02:50
TITLE="Youtube Downloader"
link=$(zenity --title "$TITLE" --entry --text "Endereço do vídeo:" --width 370 --height 100)
[ $? == 1 ] && exit
[ -z "$link" ] && ( zenity --title "$TITLE" --error --text "Faltou digitar a url..." ; exit 1 ; )
nome=$(zenity --title "$TITLE" --entry --text "Digite um nome para o vídeo:")
[ $? == 1 ] && exit
cd $(zenity --title "$TITLE" --entry --text 'Digite o diretório de destino')
URL="http://www.youtube.com"
DOWNLOAD=`wget -qO - "$link" | grep -oE 'video_id=.*&t=[^\"&]*' | head -1`
wget -O "$nome.flv" "${URL}/get_video?${DOWNLOAD}" 2>&1 | sed -u 's/.*\ \([0-9]\+%\)\ \+\([0-9.]\+\ [KMB\/s]\+\)$/\1\n# Baixando a \2/' | zenity --progress --title "$TITLE" --auto-kill --auto-close
zenity --title "$TITLE" --question --text "Converter video para avi"
[ $? == 1 ] && exit
ffmpeg -i "$nome.flv" -ab 56 -ar 22050 -b 50 -s 320x240 "$nome.avi" | zenity --progress --percentage "1" --auto-kill --auto-close
zenity --title "$TITLE" --question --text "Apagar flv baixado e ja convertido"
[ $? == 1 ] && exit
rm "$nome.flv"
exit
to usando para fazer o download e converter para avi usando o ffmpeg
so q na hora q esta convertendo a barra de progreso nao funciona
alguem faz ideia por q nao entendo muito de zenity mas gostei do script valeu
17 Ago 2007, 11:02
15 Ago 2007, 05:23
#!/bin/bash
#youtube downloader
#Felipe, 15/08/2007
TITLE="Youtube Downloader"
link=$(zenity --title "$TITLE" --entry --text "Endereço do vídeo:" --width 370 --height 100)
[ $? == 1 ] && exit
[ -z "$link" ] && ( zenity --title "$TITLE" --error --text "Faltou digitar a url..." ; exit 1 ; )
nome=$(zenity --title "$TITLE" --entry --text "Digite um nome para o vídeo:")
[ $? == 1 ] && exit
cd $(zenity --title "$TITLE" --entry --text 'Digite o diretório de destino')
URL="http://www.youtube.com"
DOWNLOAD=`wget -qO - "$link" | grep -oE 'video_id=.*&t=[^\"&]*' | head -1`
wget -O "$nome.flv" "${URL}/get_video?${DOWNLOAD}" 2>&1 | sed -u 's/.*\ \([0-9]\+%\)\ \+\([0-9.]\+\ [KMB\/s]\+\)$/\1\n# Baixando a \2/' | zenity --progress --title "$TITLE" --auto-close
zenity --title "$TITLE" --question --text "Download concluído. Deseja abrir o arquivo?"
[ $? == 1 ] && exit
totem "$nome.flv"
28 Jul 2007, 23:51
28 Jul 2007, 07:39
27 Jul 2007, 02:32
26 Jul 2007, 12:21
Obrigado
15 Jul 2007, 22:36
ubuntu rulez.
11 Jul 2007, 15:57
11 Jul 2007, 00:17
09 Jul 2007, 22:04
--- youtube-old 2007-07-09 21:56:00.000000000 -0300
+++ youtube 2007-07-09 21:59:34.000000000 -0300
@@ -10,5 +10,9 @@
# download link: http://youtube.com/get_video?video_id=[video_id]&t=[t_id]&...
DOWNLOAD=`wget -qO - "${URL}/watch?v=${1/*=}" | grep -oE 'video_id=.*&t=[^\"&]*' | head -1`
+FILENAME=`wget -qO - "${URL}/watch?v=${1/*=}" \
+ | grep 'id="video_title"' \
+ | sed -r 's/^.*>([^<]+)<.*$/\1/'`
+
+wget -O "${FILENAME}.flv" "${URL}/get_video?${DOWNLOAD}"
-wget -O "${1/*=}.flv" "${URL}/get_video?${DOWNLOAD}"
06 Jul 2007, 00:26
05 Jul 2007, 12:25
- primeiro vc salva em um arquivo
ex: youtube.sh
- depois dá permissão de execução do arquivo
chmod +x youtube.sh
- depois executa da seguinte forma
./youtube.sh http://www.youtube.com/watch?v=s7uXvqfQvNI
ou
./youtube.sh s7uXvqfQvNI
ou seja, vc pode informar tanto a url do vídeo quanto apenas o 'id' dela. Um arquivo sera salvo no diretorio corrente com extensão flv e mesmo nome do id e vc pode ve-lo com o mplayer, por exemplo.
Tu podes converter o video pra mpeg com esta dica:
http://youmakemedia.com/2006/10/13/converting-flv-to-mpeg-in-linux/
ou pode tentar executar com o mplayer.
05 Jul 2007, 11:39
Salvo o script como ".sh" daí é soh executar?
05 Jul 2007, 09:31












