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.
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.
Parte 6: Construindo o Pacote RPM
Bom, agora que já temos o nosso programa funcionando e instalado, vem a seguinte questão:
“ O que fazer se um amigo meu gostou do meu programa e quer usar no Linux dele?
Eu quero passar para ele o programa completo, com ícone e tudo mais, o que fazer?”
- Resposta simples: Empacote em um instalador RPM ou DEB, e distribua para seus amigos de acordo com o sistema deles, nesta página vamos criar um RPM.
- O que é um RPM?
Lembra do Windows e os arquivos “setup.exe” que você clica e instala um programa? Sem muitos detalhes, um RPM ou DEB, é um arquivo desse para o Linux, porém, diferente do Windows, que quase todos tem o mesmo nome “setup.exe”, um instalador no Linux tem o formato "programa"+"versão"+"arquitetura" - “.deb” ou “.rpm”.
Vamos criar nosso RPM, primeiro, vamos ajustar todos os arquivos usados pelo nosso programa em uma única pasta. Digite no terminal:
mkdir ~/my-program
$ cd ~/my-program
$ mkdir opt
$ cp -r /opt/Ps3 opt/
$ mkdir -p usr/share/applications
$ cp -r /usr/share/applications/Ps3.desktop usr/share/applications/
$ mkdir -p usr/local/bin
$ cp /usr/local/bin/Ps3.sh usr/local/bin/
Muito importante notar, que ao digitar: "mkdir", eu não coloco a barra: / na frente do nome da pasta, a mesma coisa quando estou copiando, porque se eu coloco:
mkdir -p /usr/share
. . .Eu estou tentando construir uma pasta onde já exite outra com o mesmo nome, e não é isso que queremos.
O que queremos é criar uma pasta dentro da pasta “my-program”, por isso não incluímos o / no começo.
Agora vamos criar o PostInstall, que vai fazer as tarefas após instalado o programa. Neste caso, estou escrevendo que vai colocar um ícone no desktop do usuário:
mkdir -p opt/Ps3/bin
$ kwrite opt/Ps3/bin/postinstall.sh
Esse é o código do PostInstall:
* Summary é o que vai aparecer, quando a pessoa selecionar o pacote com programas como Synaptic, eu creio que as outras opções você já sabe o que são.
* Source é o arquivo que vai conter o código-fonte, o nome deve ser: Nome_programa-versão-lancamento.tar.gz
* Requires seria as dependências do seu programa. Como eu disse no começo, onde apresentei o código do Script, porém, aqui seria mais detalhado colocando o nome dos programas e a versão.
Como você vai saber a versão correta? Simples: digite no terminal: "apt-cache show programa"
apt-cache show stella
Assim, você deve procurar as dependências. Como no meu exemplo, o meu programa depende do Zenity, MEncoder, Lame, Festival, XVid e Sox.
Outra coisa que você vai notar também, é que no "%post" que é o que será feito depois de instalar. Eu estou chamando o Script “postinstall.sh”, que vai colocar o ícone no desktop do usuário.
Esta técnica funcionava bem até algumas versões do KDE, porém, agora com o KDE4, não é certo que em todas as distro isto vai funcionar.
Também não testei no Unity, porém no Gnome e outras WM, funciona direitinho.
Agora, vamos copiar os arquivos do meu programa que salvei anteriormente na pasta “my-program” para a pasta SOURCES dentro de “src/rpm”. Digite:
cd ~/my-program
$ cp -fr . ~/src/rpm/SOURCES/Ps3-video-1/
$ cd ~/src/rpm/SOURCES
Vale apena lembrar, que você deve colocar um ponto entre "cp -fr" e o caminho "~/src/. . . .", este ponto quer dizer que você está copiando os arquivos e pasta do local onde você está para a pasta indicada.
Agora, vamos colocar o código-fonte em um Tarball.
tar -cf Ps3-video-1-0.tar Ps3-video-1;
$ gzip Ps3-video-1-0.tar
E finalmente, vamos rodar o comando mágico que vai dar o toque final no nosso programa, digite:
rpmbuild -ba ~/src/rpm/SPECS/Ps3-video-1-0.spec
Agora, vamos fazer o teste final. Como Root, vamos instalar o nosso programa pelo RPM.
Dependendo do seu sistema, seu arquivo pode estar em uma das pastas “iNNN”, dentro de “src/rpm/RPMS/”. No meu caso, como eu tenho um i586, preciso digitar:
cd /home/mauricio/src/rpm/RPMS/i586
Após encontrar o arquivo RPM, vamos instalar:
sudo rpm -i Ps3-video-1-0.rpm
Depois de instalado perfeitamente, recebemos a mensagem que você colocar no final do seu arquivo “.spec”:
Como indicado no texto, copie o ícone dentro de “/usr/share/applications”, para o desktop.
Agora você pode clicar no ícone do programa e ver ele em operação.
Outro detalhe, o seu programa aparece na lista do Synaptic, mostrando que foi instalado com perfeição.
“ O que fazer se um amigo meu gostou do meu programa e quer usar no Linux dele?
Eu quero passar para ele o programa completo, com ícone e tudo mais, o que fazer?”
- Resposta simples: Empacote em um instalador RPM ou DEB, e distribua para seus amigos de acordo com o sistema deles, nesta página vamos criar um RPM.
- O que é um RPM?
Lembra do Windows e os arquivos “setup.exe” que você clica e instala um programa? Sem muitos detalhes, um RPM ou DEB, é um arquivo desse para o Linux, porém, diferente do Windows, que quase todos tem o mesmo nome “setup.exe”, um instalador no Linux tem o formato "programa"+"versão"+"arquitetura" - “.deb” ou “.rpm”.
Vamos criar nosso RPM, primeiro, vamos ajustar todos os arquivos usados pelo nosso programa em uma única pasta. Digite no terminal:
mkdir ~/my-program
$ cd ~/my-program
$ mkdir opt
$ cp -r /opt/Ps3 opt/
$ mkdir -p usr/share/applications
$ cp -r /usr/share/applications/Ps3.desktop usr/share/applications/
$ mkdir -p usr/local/bin
$ cp /usr/local/bin/Ps3.sh usr/local/bin/
Muito importante notar, que ao digitar: "mkdir", eu não coloco a barra: / na frente do nome da pasta, a mesma coisa quando estou copiando, porque se eu coloco:
mkdir -p /usr/share
. . .Eu estou tentando construir uma pasta onde já exite outra com o mesmo nome, e não é isso que queremos.
O que queremos é criar uma pasta dentro da pasta “my-program”, por isso não incluímos o / no começo.
Agora vamos criar o PostInstall, que vai fazer as tarefas após instalado o programa. Neste caso, estou escrevendo que vai colocar um ícone no desktop do usuário:
mkdir -p opt/Ps3/bin
$ kwrite opt/Ps3/bin/postinstall.sh
Esse é o código do PostInstall:
Summary: Video converter for PS3 Media
Name: Ps3-video
Version: 1
Release: 0
Group: base
License: GPL
Source: Ps3-video-1-0.tar.gz
BuildRoot: /var/tmp/%{name}-buildroot
Requires: zenity => 2.32.1-3, mencoder => 4.4.1-0, lame => 3.98-2, festival => 1.96-1, sox => 14.3.0-5, libxvidcore4 => 1.2.2-0
%description
The GNU Ps3-video convert most kind of videos into a avi file playable on PS3 console, using the xvid and mp3 codecs.
%prep
%setup -q
%build
%install
cp -rvf $RPM_BUILD_DIR/Ps3-video-1 $RPM_BUILD_ROOT
%clean
if( [ $RPM_BUILD_ROOT != '/' ] ); then rm -rf $RPM_BUILD_ROOT; fi;
%files
/.
%post
echo "Your program has been installed in /usr/local/bin you may want to copy the /usr/share/applications/Ps3 to your desktop";
/opt/Ps3/bin/postinstall.sh
* Summary é o que vai aparecer, quando a pessoa selecionar o pacote com programas como Synaptic, eu creio que as outras opções você já sabe o que são.
* Source é o arquivo que vai conter o código-fonte, o nome deve ser: Nome_programa-versão-lancamento.tar.gz
* Requires seria as dependências do seu programa. Como eu disse no começo, onde apresentei o código do Script, porém, aqui seria mais detalhado colocando o nome dos programas e a versão.
Como você vai saber a versão correta? Simples: digite no terminal: "apt-cache show programa"
apt-cache show stella
Package: stella
Priority: extra
Section: non-free/otherosfs
Installed-Size: 830
Maintainer: Tom Lear <tom@trap.mtview.ca.us>
Architecture: i386
[fonte vermelha] Version: 1.1-2 [fonte vermelha]
Depends: libc6 (>= 2.1), libstdc++2.10, xlib6g (>= 3.3.5-1)
Filename: dists/potato/non-free/binary-i386/otherosfs/stella_1.1-2.deb
Size: 483430
MD5sum: 11b3e86a41a60fa1c4b334dd96c1d4b5
Description: Atari 2600 Emulator for X windows
Stella is a portable emulator of the old Atari 2600 video-game console
written in C++. You can play most Atari 2600 games with it. The latest
news, code and binaries for Stella can be found at:
http://www4.ncsu.edu/~bwmott/2600
Assim, você deve procurar as dependências. Como no meu exemplo, o meu programa depende do Zenity, MEncoder, Lame, Festival, XVid e Sox.
Outra coisa que você vai notar também, é que no "%post" que é o que será feito depois de instalar. Eu estou chamando o Script “postinstall.sh”, que vai colocar o ícone no desktop do usuário.
Esta técnica funcionava bem até algumas versões do KDE, porém, agora com o KDE4, não é certo que em todas as distro isto vai funcionar.
Também não testei no Unity, porém no Gnome e outras WM, funciona direitinho.
Agora, vamos copiar os arquivos do meu programa que salvei anteriormente na pasta “my-program” para a pasta SOURCES dentro de “src/rpm”. Digite:
cd ~/my-program
$ cp -fr . ~/src/rpm/SOURCES/Ps3-video-1/
$ cd ~/src/rpm/SOURCES
Vale apena lembrar, que você deve colocar um ponto entre "cp -fr" e o caminho "~/src/. . . .", este ponto quer dizer que você está copiando os arquivos e pasta do local onde você está para a pasta indicada.
Agora, vamos colocar o código-fonte em um Tarball.
tar -cf Ps3-video-1-0.tar Ps3-video-1;
$ gzip Ps3-video-1-0.tar
E finalmente, vamos rodar o comando mágico que vai dar o toque final no nosso programa, digite:
rpmbuild -ba ~/src/rpm/SPECS/Ps3-video-1-0.spec
Agora, vamos fazer o teste final. Como Root, vamos instalar o nosso programa pelo RPM.
Dependendo do seu sistema, seu arquivo pode estar em uma das pastas “iNNN”, dentro de “src/rpm/RPMS/”. No meu caso, como eu tenho um i586, preciso digitar:
cd /home/mauricio/src/rpm/RPMS/i586
Após encontrar o arquivo RPM, vamos instalar:
sudo rpm -i Ps3-video-1-0.rpm
Depois de instalado perfeitamente, recebemos a mensagem que você colocar no final do seu arquivo “.spec”:
Your program has been installed in /usr/local/bin you may want to copy the /usr/share/applications/Ps3-video to your desktop
Como indicado no texto, copie o ícone dentro de “/usr/share/applications”, para o desktop.
Agora você pode clicar no ícone do programa e ver ele em operação.
Outro detalhe, o seu programa aparece na lista do Synaptic, mostrando que foi instalado com perfeição.
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!!