domingo, 13 de novembro de 2011

Atualização no programa encode-xvid - Agora com interface gráfica

Olá novamente. Neste post venho com uma notícia: o programa que estou desenvolvendo - encode-xvid agora está com uma interface gráfica. Desenvolvi uma em python usando a biblioteca gráfica pyGTK. Este é um wrapper onde eu posso montar a linha de comando com mais facilidade - mas ao mesmo tempo é um hobby onde posso desenvolver em python, que gosto tanto.

Quem quiser conferir o projeto, é só ir lá na página no google code e pegar instruções de como fazer svn checkout, ou conferir os fontes lá mesmo - http://code.google.com/p/encode-xvid/

Por enquanto só vai funcionar no GNU/Linux, porque o script está em shell script, mas pretendo reescrever em python, aí vai rodar em outros SO também, desde que tenham o ambiente instalado.

Grande abraço e até a próxima.

Artigo completo (View Full Post)

segunda-feira, 7 de novembro de 2011

Script para encode xvid agora no google code

O script que criei em outro post para gerar arquivos para dvd agora está no google code. Resolvi colocar ele lá para ficar mais fácil compartilhar o desenvolvimento e manter atualizado.

Se quiser acompanhar a evolução deste script é só pegar em https://code.google.com/p/encode-xvid/

Sei que este script não é coisa muito grande, mas é meu primeiro esforço em desenvolver software livre. vou tentar melhorá-lo com o tempo.

Artigo completo (View Full Post)

domingo, 6 de novembro de 2011

Shell script para gerar arquivos xvid com áudio mp3

Olá pessoal. Neste post vou colocar um script que eu mesmo fiz para fazer encode de arquivos de vídeo no formato avi com o codec de vídeo xvid e áudio mp3.

Faço essa conversão porque tenho dois probleminhas: 1 - meu dvd é velhinho e roda arquivos com legendas, mas não arquivos muito grandes - nesse caso tenho que reduzir o bitrate. 2 - meu xbox 360 não carrega legendas externas (srt) de vídeos e só roda xvid.

O software que eu uso para encode é o mencoder, o SO é GNU/Linux distro Slackware 13.37. O mplayer foi compilado por mim. Versão:

MPlayer SVN-r34308-4.5.2 (C) 2000-2011 MPlayer Team


Meu mplayer foi compilado com as bibliotecas adicionais xvid e libmp3lame, mas para encode do xvid eu estou usando lavc. Para audio estou usando mp3lame.

Antes de postar o script, vale lembrar que é minha primeira aventura de script shell para automatizar alguma tarefa minha, então o código pode não ser o melhor possível. Dicas são muito bem vindas!

Abaixo o script:


#!/bin/bash

function usage {
echo "uso: video-encode -v video -l legenda -ab audio-bitrate -vb video-bitrate [-vol volume] [-sim] -o arqiuvo-output"
}

function error_exit {
echo "$1" 1>&2
exit 1
}

while [ "$1" != "" ]; do
case $1 in
-v )
shift
video=$1
;;
-l )
shift
legenda=$1
;;
-vb )
shift
vb=$1
;;
-ab )
shift
ab=$1
;;
-o )
shift
output=$1
;;
-vol )
shift
vol=":vol=$1"
;;
-sim )
sim=true
;;
* )
usage
error_exit "Parâmetro não reconhecido: $1"
;;
esac
shift
done


# Verificando se o arquivo de vídeo é válido
test -n "$video" -a -f "$video" || error_exit "Arquivo inválido: $video"

# Verificando se o arquivo de legenda (se informado) é válido
test -z "$legenda" -o -f "$legenda" || error_exit "Legenda inválida: $legenda"

# Verificando se o arquivo de legenda (se informado) está no format utf-8
test -f "$legenda" -a $(file -bi "$legenda" | sed 's/\(.*\)charset=//') == "utf-8" || error_exit "A legenda não está no formato utf-8: $legenda"

# Tenta criar o arquivo de saída
touch "$output" > /dev/null 2>&1 || error_exit "Erro ao criar o arquivo de saída: $output"

echo
echo "******************************************************"
echo "Ambiente"
echo "video: $video"
echo "legenda: $legenda"
echo "vbitrate: $vb"
echo "abitrate: $ab"
echo "******************************************************"
echo

function echo_exec {
echo $1
echo $2

if [ -z $sim ]; then
eval $2 || error_exit "Operação cancelada"
fi
}

cmd="mencoder \"$video\" -sub \"$legenda\" -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac mp3lame -ffourcc XVID -o /dev/null"
echo_exec "Encoding 2-pass - parte 1" "$cmd"

cmd="mencoder \"$video\" -sub \"$legenda\" -ovc lavc -lavcopts vcodec=mpeg4:vpass=2:vbitrate=$vb -oac mp3lame -lameopts abr:br=$ab$vol -ffourcc XVID -o \"$output\" -utf8"
echo_exec "Encoding 2-pass - parte 2" "$cmd"


Explicando em termos gerais, o script aceita os seguintes parâmetros de linha de comando:
-v arquivo de vídeo origem
-l arquivo de legendas
-vb bitrate do vídeo
-ab bitrate do áudio
-o arquivo de output
-vol volume do áudio - opcional (para aplicar ganho - pode distorcer)
-sim modo simulação (na verdade só exibe os comandos na tela, sem executar nada)

Estou usando o método 2pass do mencoder porque achei que tive videos de melhor performance assim.

Alguns pontos a melhorar:

O mencoder está sempre usando -utf8, por isso precisa do arquivo de legendas em formato utf-8. Vou tentar criar uma função para converter automaticamente o arquivo para utf-8 caso não seja - atualmente o programa retorna um erro e não prossegue.

Antes de rodar o programa é preciso saber de antemão o bitrate de áudio e vídeo que serão usados. Vou tentar identificar no arquivo de origem e dar suporte ao usuário entrar com as informações através de prompt.

Tornar a seleção da legenda opcional. Embora era minha intenção, ainda não está funcionando.

Acabei de executar o script e na minha máquina está funcionando (bem, na nossa máquina sempre funciona, né...), então espero que ajude outras pessoas da mesma forma que me ajuda aqui.

Grande abraço a todos e até a próxima.

Artigo completo (View Full Post)

 
BlogBlogs.Com.Br