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.097 ]

Por: M4iir1c10 em 05/03/2012 | Blog: https://github.com/mauricioph


Criando um Pacote DEB



Outra maneira de fazer o seu Script, que agora já podemos chamar de programa, ser distribuído para amigos que tenham outras distros diferentes da sua, é criando uma versão em DEB.

Como eu demostrei na última página, fazer um pacote RPM ou DEB, vai garantir que a distro do seu amigo tenha o seu programa completamente funcional, mesmo que o sistema dele não tenha os programas usados pelo seu Script.

Assim, como fizemos um pacote RPM, a maneira de criar um pacote DEB é bem semelhante, mas com algumas diferenças. Um ponto que vale expressar também, é que você não precisa estar em um ambiente DEB para criar um pacote DEB, ou em um ambiente RPM, para criar um RPM.

Para esclarecer aos novatos que não entenderam meu último parágrafo, ambiente DEB quer dizer que o padrão da distribuição é instalar pacotes DEB, e a mesma coisa para RPM.

Por exemplo, o PCLinuxOS usa o RPM, então todos os seu repositórios contém pacotes RPM. Já o Ubuntu, usa o DEB, por isso seus repositórios só tem pacotes DEB.

As mais conhecidas distros em DEB são Debian, Ubuntu, Knoppix, Kurumim, Damn Small Linux (DSL).

Os mais conhecidos do lado RPM são: Red Hat, Fedora, PcLinuxOS, Mandriva e um que não vem de uma base RPM, porém implementa o RPM como padrão é o SUSE (SUSE vem do Slackware).

Vamos ao ponto principal, criando um pacote DEB.

Caso você pulou o pacote RPM porque DEB interessa mais a você, no passo anterior, juntamos todos os arquivos usados pelo nosso programa em uma pasta, você deve fazer o mesmo no terminal com os comandos:

mkdir -p debian/DEBIAN
$ cd debian
$ mkdir -p usr/local/bin
$ mkdir -p usr/share/applications
$ mkdir -p opt/Ps3/icons
$ cp /usr/share/applications/Ps3.desktop usr/share/applications/
$ cp /usr/local/bin/Ps3.sh usr/local/bin/
$ cp /opt/Ps3/icons/*.png opt/Ps3/icons/
$ cd ~/


Só para atualizar, quem pulou direto para esta página. Volte à página anterior e siga as instruções para criar o Script “postisntall.sh”, salve ele em: “opt/Ps3/bin” e chame-o ou coloque em “debian/DEBIAN” como: postinstall.

você não deve renomear esse arquivo com outro nome.

Agora, para checar se tudo está no local certo, digite:

clear
$ find debian


Você vai ver a lista com todos os diretórios e o que eles têm dentro. Todos os arquivos estão no lugar certo, vamos à parte mais importante.

Usando o seu editor de texto preferido, crie o arquivo “control” dentro da pasta “debian/DEBIAN”. No meu caso, eu uso o KWrite:

kwrite ~/debian/DEBIAN/control

Agora, vou escrever as informações do meu programa assim:

Package: Ps3-video
Version: 1.0-1
Section: Video
Priority: optional
Architecture: all
Depends: bash (>= 2.05a-11), zenity (>= 2.32.1-3), awk, mencoder (>= 4.4.1-0), sed (>= 3.02-8), grep (>= 2.4.2-3), sox (>= 14.3.0-5), lame
(>= 3.98-2), libxvidcore4 (>= 1.2.2-2)
Maintainer: Mauricio Luis de Medeiros <jesusmlmph@gmail.com>
Description: Ps3-video
Convert almost all kind of video to avi playable on PS3 console.

  • Package: é o nome do seu programa. As demais coisas você já sabe oque e só de olhar né?
  • Architeture: seria o tipo de Hardware que o seu programa vai rodar, 32bits | 64bits. Algum processador que não seja Intel ou AMD... como no meu caso, trata-se de um Script que pode rodar independente da arquitetura do Hardware, eu coloquei: all (todas).
  • Depends: é a mesma coisa do que o Requires do pacote RPM. As dependências do seu programa, quais os programas e bibliotecas externas que ele usa, assim quando o seu amigo instalar seu programa, se ele não tem algum dos programas necessários, ou o aplicativo de instalação vai fazer o download e instalar automaticamente, ou ele vai indicar qual o programa que está faltando e pedir para instalar ele primeiro. Isso depende de distro para distro.
  • Description: é a descrição que vai aparecer quando a pessoa vai instalar ou atualizar seu programa, ela verá no Synaptic.

Outra coisa importante, no final do arquivo “control”, você deve deixar 2 linhas vazias apertando o ENTER.

Por que? Eu não sei... Creio que seja para o programa que cria o arquivo DEB reconhecer que esse é o final do arquivo.

Depois de ter salvo o arquivo em seu devido lugar, vamos ao comando mágico para a criação do pacote:

Dando a correta permissão para todos os arquivos:

find debian/ -type d | xargs chmod 755

Criando o pacote como Root:

sudo dpkg-deb --build debian Ps3-1.0-1.all.deb

Entregando ao usuário comum, fazendo dele o dono do arquivo:

sudo chown mauricio:mauricio Ps3-1.0-1.all.deb

Troque o meu nome pelo nome do seu usuário, caso você esteja em um sistema Debian, instale o programa com o comando:

sudo dpkg-deb -i Ps3-1.0-1.all.deb

Caso você esteja como eu, em outro tipo de distro e você quer testar se deu certo, com o programa de ZIP do Linux, abra o arquivo DEB. No meu caso, uso o ARK.

Ao abrir, eu devo encontrar dois arquivos “tar.gz” e um binário, “debian-binary”, “data.tar.gz” e “control.tar.gz”.
  • Debian-binary: é um arquivo binário que você não vai conseguir abrir.
  • data.tar.gz: são os arquivos do seu programa na forma que você colocou.
  • control.tar.gz: é o arquivo que você criou com o resumo do seu programa em: debian/DEBIAN/control

Agora, a única coisa que eu não sei ainda, é como colocar o meu programa no repositório do Ubuntu, por exemplo.

Se alguém souber, nos mande esta dica nos comentários.

No próximo passo, vamos testar a instalação no ambiente Debian.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Configuração do sistema
   3. Problemas comuns ao rodar vídeos no PS3
   4. O Código do Script
   5. Ajustes Finais
   6. Construindo o Pacote RPM
   7. Criando um Pacote DEB
   8. Teste Final
Outros artigos deste autor

Rode o Blackbox no Windows XP

Codificação e decodificação entre ASCII, hexadecimal e unicode

5 comandos que ninguém nunca deve executar no Linux

Colocando Windows, Linux e Mac Os X em um mesmo PC

Áudio Profissional no GNU/Linux

Leitura recomendada

Um pouco da história do Debian GNU/Linux

Relato: Instalação mista dos sistemas Linux, MacOS e Windows na mesma rede

O que é Orientação a Objeto - Mais uma tentativa

Compactação de Arquivos

Masterização de VCD's com menu interativo

  
Comentários
[1] Comentário enviado por itamarnet em 06/03/2012 - 15:29h

Artigo muito interessante, e bem detalhado. Extrapolou inclusive a proposta inicial ao criar os pacotes e detalhar os problemas que encontrou.
Não vou tecer críticas pois o artigo é bem detalhado, mas gostaria de contribuir com algumas sugestões, que podem facilitar ou serem alternativas.
Já tive problemas com o mplayer e mencoder, assim como você, na questão de reconhecimento das dependências, especialmente com o Ubuntu.
O que pode fazer também é usar o ffmpeg no lugar do mencoder para as conversões, mas confesso não lembrar se tem todas as opções disponíveis do seu "Programa".
Outa opção é usar o flite ( http://www.speech.cs.cmu.edu/flite ) em substituição a tríade text2wave, lame e play, o que poderia ser feito nesse formato flite -t "Texto".

De resto está perfeito, Parabéns!!

[2] Comentário enviado por m4iir1c10 em 06/03/2012 - 18:16h

So para corrigir no codigo do programa houve alguns erros durante o processo da publicacao, alguem colocou quebra de linhas onde nao existem quebras ou seja deveria ser uma linha so, se voce seguir o raciocinio que eu vou explicar voce pode consertar ou voce pode esperar eu publicar o codigo :)

Linhas 9 e 10 e uma unica linha, assim linha 11 vira linha 10 por tanto siga passo a passo as instrucoes para voce conscertar o codigo, preste atencao porque a maioria das vezes em que voce fizer isso antes de apertar delete no final da linha voce deve apertar espaco depois delete mais algumas vezes voce nao deve fazer isso por exemplo awk -vRS nao pode ser awk - vRS

Linhas 9 e 10
Linhas 11 e 12
Linhas 19 e 10
Linhas 44, 45 e 46
Linhas 47, 48 e 49
Linhas 50, 51 e 52
Linhas 56, 57, 58, 59 e 60
Linhas 70, 71, 72, 73 e 74
Linhas 91, 92 e 93

Eu vou publicar o codigo para os novatos que nao querem arriscar destriuir o codigo :)


Deixa eu fazer um teste agora vamos ver se no comantario o codigo sai direito:


#!/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/${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/${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}

Pessoal desculpe a falta de ascentos meu teclado e britanico :)

[3] Comentário enviado por m4iir1c10 em 19/03/2012 - 10:46h

Aqui esta o script publicado para evitar problemas de copy and paste.

http://www.vivaolinux.com.br/script/Script-para-conversao-de-video-compativel-com-PS3

[4] Comentário enviado por gidalte em 06/04/2012 - 10:23h

Sensacional!, só assim eu aprendo um pouco mais de script, e com elegância ...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts