Logotipo Dicas-L, por Ricardo Burile

Busca

Visite também: UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

PHP CONFERENCE

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

Stumble Upon Digg This Del.icio.us Twitter Recomendar este artigo a um amigo Entre em contato Formato PDF
Newsfeed RSS
Formato para impressão
StumbleUpon Digg Del.icio.us Twitter Recomendar Contato PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 3.07/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.1 /5 (780 votos)

Opinião dos Leitores

jussara
06 Fev 2009, 03:42
tou procurando no google e achei varios, um deles foi esse:

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!
Salvio
07 Out 2008, 15:47
A melhor maneira de fazer download de videos do youtube e metacafe é através desse site

http://www.freefileconvert.com

Também é possivel fazer conversões de arquivo nesse site


Uma boa dica pra quem não ta conseguindo baixar
Cordadeluz
21 Ago 2008, 15:24
sendo com 's' essa é boa!!!!
errei
Cordadeluz
21 Ago 2008, 15:23
Esses códigos em Shell Script está cendo o meu ponta pé inicial em misturar Shell script com Zenity muito bom!!!

Obrigado pelos códigos
HEITOR
13 Ago 2008, 10:31
USO o kurumun 7 e quero baixar videos do you tube, o que me recomendam?
Marcio Carneiro
08 Jun 2008, 18:50
Poderiam fazer o script usando o kdialog ou o kommander?
Não sou programador e estou iniciando o estudo do bash e outras linguagens de script.
Didio
18 Mai 2008, 16:38
Gostaria de experimentar baixar alguns videos do youtube.Como devo faze-lo passo a passo.
Marcio
18 Mai 2008, 13:39
Nossa quanta facilidade !!! muito bom !!! Seja feliz use Linux/SL
lkjç
08 Mar 2008, 16:27
pqp que topico noob ;

Antonio Francisco
06 Mar 2008, 22:39
Executa no terminal (console)
$ ./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

radames
30 Set 2007, 02:50
#!/bin/bash

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
viviane lopes da silva
17 Ago 2007, 11:02
eu quro a baixa video
felipe
15 Ago 2007, 05:23
usando zenity, pra embelezar :)

#!/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"
Fabio
28 Jul 2007, 23:51
Muito bom!
carlos josè lobo de assis
28 Jul 2007, 07:39
eu quero que algum internalta envie atravês de e-mail fotos e imagens de sacanagem que estejam colocando ao meu respeito na internet.urgente
adilson guilherme marcilio
27 Jul 2007, 02:32
eu baixar clipes
Bruk
26 Jul 2007, 12:21
Tem como colocar esse script para pegar musicas do http://www.goear.com.

Obrigado
charles
15 Jul 2007, 22:36
funcionou perfeitamente, ótimo trabalho kra.

ubuntu rulez.
camila
11 Jul 2007, 15:57
sou uma pessoa legal
José Antonio Meira da Rocha
11 Jul 2007, 00:17
Tenho obtido melhores resultados com o Xvid. Melhor qualidade e menos processamento.
Narcélio Filho
09 Jul 2007, 22:04
Muito bom! Acrescentei umas linhas pra fazer com que o nome do arquivo salvo seja o mesmo do título do vídeo em vez do ID dele. Aqui vai patch:


--- 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}"
flycode
06 Jul 2007, 00:26
Testei aqui cara, muito bom mesmo. Parabens.
Tiago Peczenyj
05 Jul 2007, 12:25
Israel, pra executar o script é simples.

- 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.
Israel
05 Jul 2007, 11:39
Olá, gostei da dica, mas como sou meio noob em Linux, como faço para rodar esse script?
Salvo o script como ".sh" daí é soh executar?
Tiago Peczenyj
05 Jul 2007, 09:31
Atenção! Devido a formatação do HTML, o comentario download link foi quebrado, a linha de baixo também é um comentário.
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

English for Reading and Listening
Enriqueça o seu vocabulário recebendo diariamente mensagens divertidas em inglês, com áudio em MP3.
Saiba mais

Biblioteca

Desenvolvendo Websites com PHP
Por Juliano Niederauer

O Monge e o Executivo: uma História sobre a Essência da Liderança
Por James C. Hunter

Extreme Programming
Por Vinicius Manhaes Teles

UML: Guia do Usuário
Por Grady Booch, James Rumbaugh e Ivar Jacobson

O Vendedor de Sonhos
Por Augusto Cury

Segurança de Redes em Ambientes Cooperativos
Por Emilio Tissato Nakamura e Paulo Licio de Geus

O Conhecimento em Rede
Por Carlos Nepomuceno e Marcos Cavalcanti

Utilizando UML e Padrões
Por CRAIG LARMAN

Sistema de Banco de Dados
Por Abraham Silberschatz

Hardware PC: Guia de Aprendizagem Rápida
Por Carlos E. Morimoto

Manual Completo do Linux: Guia do Administrador
Por Evi Nemeth, Trent R. Hein, Garth Snyder

Redes de Computadores e a Internet
Por James F. Kurose e Keith W. Ross

O Segredo
Por Rhonda Byrne

Os Segredos da Mente Milionária
Por T. Harv Eker

Construindo Sites com CSS e (X)HTML
Por Mauricio Samy Silva

Use a Cabeça!: JSP & Servlets
Por Brian Bashan, Kathy Sierra, Bert Bates

Expressões Regulares: Uma Abordagem Divertida
Por Aurélio Marinho Jargas

Qualidade de Software
Por Andre Koscianski Michel dos Santos Soares

Descobrindo o Linux: Entenda o Sistema Operacional GNU/Linux
Por Joao Eriberto Mota Filho

Enterprise Javabeans 3.0
Por Bill Burke, Richard Monson