Logotipo Dicas-L, por Ricardo Burile

Busca

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

Mão na Massa LDAP - 1 Profissional por Máquina
Configure um serviço de Diretórios baseado no servidor OpenLDAP!
Dia 6 de Dezembro - São Paulo
Saiba mais


 

Aprenda inglês em casa

Baixe gratuitamente as duas primeiras aulas

English for Reading and Listening

Receba por email, diariamente, mensagens contendo materiais para leitura e audição, incluindo arquivos no formato MP3 gravados por falantes nativos.

Saiba mais e faça sua inscrição

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

 

Mão na Massa Nagios

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Publicar em del.icio.us

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

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

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

Recomende este site
Recomendar este artigo


Versão para impressão


Opinião dos Leitores

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 pagina
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script

Mão na Massa LDAP - 1 Profissional por Máquina
Configure um serviço de Diretórios baseado no servidor OpenLDAP!
Dia 6 de Dezembro - São Paulo
Saiba mais

Biblioteca

Redes - Guia Prático
Por Carlos. E. Morimoto

Hardware - o Guia Definitivo
Por Carlos. E. Morimoto

Kurumin 7 - Guia Prático
Por Carlos. E. Morimoto

Linux: Ferramentas Técnicas, 2ed
Por Carlos. E. Morimoto

VPN: Virtual Private Network
Por Lino Sarlo da Silva

MySQL - Guia do Programador
Por André Milani

Sistemas de Banco de Dados
Por Ramez E. Elmasri e Shamkant Navathe

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

Extreme Programming
Por Vinicius Manhaes Teles

Google Hacking
Por JOHNNY LONG

Elite da Tropa
Por Luis Eduardo Soares, Andre Batista e Rodrigo Pimentel

Harry Potter e as Relíquias da Morte
Por J.K. Rowling

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

PHP para Quem Conhece PHP
Por Juliano Niederauer

O Conhecimento em Rede
Por Carlos Nepomuceno e Marcos Cavalcanti

Enterprise Javabeans 3.0
Por Bill Burke, Richard Monson

Redes de Computadores
Por Andrew S. Tanembaum

Marley e Eu: a Vida e o Amor ao Lado do Pior Cão do Mundo
Por John Grogan

Deus, um delírio
Por Richard Dawkins

Java: Como Programar
Por Harvey M. Deitel e Paul J. Deitel

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

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

1808
Por Laurentino Gomes

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