MEncoder - Criando Programa Gráfico Para Conversão
Você gosta do MEncoder? Porém, acha um problema ter que memorizar os comandos? Não seria melhor ter um Script que,
com dois ou três cliques, faz o trabalho para você? Aqui vamos fazer um Script e transformá-lo em um programa, com
direito a ícone e tudo mais... Meu alvo principal é um Script que converta vídeos e que sejam compatíveis com o sistema
do PS3.[ Hits: 30.790 ]
Por: M4iir1c10 em 05/03/2012 | Blog: https://github.com/mauricioph
#!/bin/bash # Os programas que serão usados e onde eles se encontram MENCODER="$(builtin type -P mencoder)" ZEN="$(builtin type -P zenity)" LAME="$(builtin type -P lame)" PLY="$(builtin type -P play)" # A resolução ou o tamanho do vídeo, embora eu coloquei algumas opções para vídeos em HD lembre se que no PS3 # você vai ter problemas para rodar qualquer vídeo com resolução superior a 720x576. RESOLU="$(${ZEN} --list --text "Selecione a resolução do vídeo final" --column "Resolução" --radiolist --column size A "640x480" B "640x360" C "720x404" D "720x416" E "954x544" F "1280x720" G "1920x1080" | tr x :)" # Agora vamos basear o bitrate do video de acordo com o tamanho do video BITRATE="$(echo $RESOLU | sed 's/:/ /g' | awk '{print $1}')" # Vamos selecionar o vídeo a ser convertido INFILE="$(${ZEN} --file-selection)" # Só para ter certeza que o usuário sabe oque esta escolhendo e não clicou # sem querer em um arquivo que não é um vídeo, vamos olhar que tipo de # arquivo foi selecionado se não for um vídeo damos uma bronca nele. ENTRADA=$(file -bi "$INFILE" | awk '{print $1}'| grep video | awk 'BEGIN{FS="/"}{print $1}') echo $ENTRADA function intro(){ while [ "$ENTRADA" != "video" ] do ${ZEN} --error --text "Voce não escolheu um arquivo de vídeo válido" INFILE="$(${ZEN} --file-selection)" ENTRADA=$(file -bi "$INFILE" | awk '{print $1}'| grep video | awk 'BEGIN{FS="/"}{print $1}') echo $ENTRADA done } intro # agora que estamos certos que é um vídeo vamos definir o nome dele como a variável de entrada ENTRADA="$(echo $INFILE)" LOC=$(basename "${ENTRADA}") # vamos criar uma pasta temporária para colocar todos os logs e arquivo usados # durante a conversão, definindo os nomes para os mesmos TEMPO="$(mktemp -d /tmp/mauricio.XXXXXXXXX)" SAIDA="$(echo ${LOC} | sed 's/ /_/g')" LOGI="$(echo ${TEMPO}/${SAIDA}.log)" #Primeira função de conversão, colocamos os atributos necessários para o mencoder e # jogamos a saída de dados para o zenity com o awk filtramos as informações do mencoder e # criamos uma função que da um refresh no zenity para que o mesmo possa indicar a porcentagem da # conversão junto com as demais informações. function primeiropasso(){ ${MENCODER} "${ENTRADA}" -ovc lavc -lavcopts vcodec=mpeg4:vpass=1:vbitrate=${BITRATE} -oac mp3lame -lameopts cbr:br=128:mode=0 -vf scale=${RESOLU},harddup -ffourcc XVID -o "$HOME/${SAIDA}.PS3.avi" -passlogfile ${LOGI} 2>&1 | awk -vRS="\r" '$1 ~ /Pos/ {gsub(/Pos:/," ");gsub(/%\)/," ");gsub(/ \(/," ");print $3"\n#Convertendo o vídeo para pasta do usuário \\nPosição :\\t"$1"\\nQuadros :\\t"$2"\\nPorcentagem :\\t"$3"%\\nMédia de Quadros :\\t"$4"\\nTempo Restante :\\t"$6; fflush();}' | ${ZEN} --progress --title "Convertendo ${LOC} 1 passo" --text "Convertendo ${LOC}" --auto-close } # fazemos a mesma coisa para o segundo passo, o motivo pelo qual estou colocando # os passos em funções separadas é porque se algum dia você perdeu um usb com o vídeo # convertido e quer converter do original para outro vídeo para o PS3 o programa vai identificar que # você já converteu esse vídeo uma vez e vai lembrar dele fazendo assim só uma vez o segundo passo, # quer dizer não precisa assistir o vídeo que ele já assistiu. function segundopasso() { echo "Second Stage" | text2wave -o ${TEMPO}/audio.wav lame -V3 -b 192 ${TEMPO}/audio.wav ${TEMPO}/audio.mp3 play ${TEMPO}/audio.mp3 ${MENCODER} "${ENTRADA}" -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=${BITRATE} -oac mp3lame -lameopts cbr:br=128:mode=0 -vf scale=${RESOLU},harddup -ffourcc XVID -o "$HOME/Desktop/${SAIDA}.PS3.avi" -passlogfile ${LOGI} 2>&1 | awk -vRS="\r" '$1 ~ /Pos/ {gsub(/Pos:/," ");gsub(/%\)/," ");gsub(/ \(/," ");print $3"\n#Convertendo o vídeo para pasta do usuário \\nPosicao :\\t"$1"\\nQuadros:\\t"$2"\\nPorcentagem :\\t"$3"%\\nMedia de Quadros :\\t"$4"\\nTempo Restante :\\t"$6; fflush();}' | ${ZEN} --progress --title "converting ${LOC} 2 passo" --text "converting ${LOC}" --auto-close echo "The file is ${SAIDA}.PS3.avi, You will find it on your home folder" | text2wave -o ${TEMPO}/audio.wav lame -V3 -b 192 ${TEMPO}/audio.wav ${TEMPO}/audio.mp3 play ${TEMPO}/audio.mp3} # vamos lembrar do vídeo que foi convertido criando nossa pasta de "memória" if [ ! -d $HOME/.videologs ] then mkdir $HOME/.videologs fi LOGTWO=$(basename "${LOGI}") function usedsecondpass() { ${MENCODER} "${ENTRADA}" -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=${BITRATE} -oac mp3lame -lameopts cbr:br=128:mode=0 -vf scale=${RESOLU},harddup -ffourcc XVID -o "$HOME/Desktop/${SAIDA}.PS3.avi" -passlogfile "${HOME}/.videologs/${LOGTWO}" 2>&1 | awk - vRS="\r" '$1 ~ /Pos/ {gsub(/Pos:/," ");gsub(/%\)/," ");gsub(/ \(/," ");print $3"\n#Convertendo o vídeo para pasta do usuário \\nPosição :\\t"$1"\\nQuadros :\\t"$2"\\nPorcentagem :\\t"$3"%\\nMédia de Quadros :\\t"$4"\\nTempo Restante :\\t"$6; fflush();}' | ${ZEN} --progress --title "converting ${LOC} 2 passo" --text "converting ${LOC}" --auto-close echo "Mission Acomplished, your file is at the Desktop. The name is ${SAIDA}.PS3.avi" | text2wave -o ${TEMPO}/audio.wav lame -V3 -b 192 ${TEMPO}/audio.wav ${TEMPO}/audio.mp3 play ${TEMPO} /audio.mp3} # Lembra desse vídeo? então pula para o segundo passo. if [ -f ${HOME}/.videologs/${LOGTWO} ] then echo "I remember this, lets do it again." | text2wave -o ${TEMPO}/audio.wav lame -V3 -b 192 ${TEMPO}/audio.wav ${TEMPO}/audio.mp3 play ${TEMPO}/audio.mp3 usedsecondpass else primeiropasso segundopasso fi # vamos limpar a bagunça que essa conversão fez rm -f ${TEMPO}/audio.wav rm -f ${TEMPO}/audio.mp3 # mais não vamos apagar tudo, esse programa tem que se lembrar desse vídeo para a próxima vez que for necessário, caso você decidir limpar o seu sistema um dia para economizar espaço, essa pasta ~/.videologs deve ser um das que você definitivamente deve dar uma olhada, em uma semana ou um mês não acumula muito mais depois de uns 6 meses pode ultrapassar a marca dos GB de arquivos. for i in $(ls ${TEMPO}/*.log | xargs ) do mv $i $HOME/.videologs/ done #agora acabamos com todo o lixo. cd ~/ rm -fr ${TEMPO}
5 comandos que ninguém nunca deve executar no Linux
Como controlar todas as mídias da sua casa somente com 1 controle remoto e 1 Linux
Colocando Windows, Linux e Mac Os X em um mesmo PC
GRUB com imagens aleatórias e KDM com vídeo de fundo
Como fazer hackergotchi (ou avatar de cabeça flutuante)
Colocando ícones e wallpapers no IceWM usando o DFM (desktop file manager)
Tutorial de instalação LTSP 4.2 (Linux Terminal Server Project) no OpenSuSE 10.2
Software Livre e Matemática Financeira
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Debian 12 (net inst) instalado Pendrive erro ao inicializar (3)
Agora temos uma assistente virtual no fórum!!! (246)