Convertendo vídeos para celular(mp4)

27 de dezembro de 2009

Algum tempo atrás criei um script, em texto, para converter vídeos(diversos formatos) para rodar em celular. Mas depois fiz umas adaptações e o script passou a converter vários tipos de arquivos de vídeos para um tamanho e qualidade(som e imagem) especificada. O script é bem simples mas funciona muito bem.

Cheguei a iniciar uma interface gráfica (GUI) para o script em kdialog, mas não cheguei terminar. Caso alguém queira dar continuidade, posso disponibilizar o fonte.

Formatos testados: 3gp, asf, avi, mpg, mpeg, ogv, ogg, wmv, flv

*** NOVA VERSÃO DO SCRIPT ***, tanto para celular como para PC

#!/bin/bash
# Simples script que converte qualquer arquivo de video
# para o formato mp4, conpativel com a maioria dos celulares.
#
# Por Tales A. Mendonça // Contribuições de Luciano Martini e
# Bruno Gonçalves do BigLinux
# Última atualização - 24/1/2010

# -------------------------------------------------------
## ALTERE APENAS AQUI

# Caso não queira utilizar alguma opção abaixo, comente a linha com um # no início da linha.

# Configurações do vídeo
frame="15" # quantidade de frames por segundo. Use um valor entre 10 a 30, obtendo menos ou mais quantidade de quadros. | Para PC use de 23 a 25
q_crf="27" # Qualidade do vídeo. Máxima = 5, mínima = 50 | Para PC use de 20 a 25
q_subq="6" # Qualidade máxima = 8, mínima = 1
contraste="1.0" # Máxima = 2.0, mínima = -2.0
brilho="0.0" # Máxima = 1.0, mínima = -1.0
saturacao="1.0" # Máxima = 3.0, mínima = -3.0
resolucao="352:-3" # Rasolução do vídeo, mude apenas o primeiro valor, pois o "-3" atribui um valor automatico para não distorcer o vídeo. | Para PC, comente essa linha para pegar a resolução padrão do vídeo.

# Configuração do som
q_som="40" # Qualidate do som, mínimo = 15, máximo = 500 | Para PC use 45, 50 ou 55 que já ficará excelente.
canal="channels=1:mode=3" # Força o áudio sair em mono. Para 2 canais use canal="channels=2"

# -------------------------------------------------------

p="$1"
converte_video() {
p="$1"
# Função para converter o vídeo gerando apenas um arquivo de vídeo "*.264"
mencoder "$1" -ofps $2 -nosound -ovc x264 -x264encopts threads=auto:crf=$3:nocabac:subq=$4:frameref=5:level_idc=12:bframes=0:b_pyramid:weight_b:me=umh -of rawvideo -vf harddup,eq2=1:$5:$6:$7,scale=$8 -o "$(echo -n "$p" | rev | cut -d"." -f2- | rev)".264
}

converte_audio() {
p="$1"
# Função para converter o vídeo gerando apenas um arquivo de audio "*.aac"
mencoder "$1" -ovc frameno -oac faac -faacopts mpeg=4:object=2:quality=$2 -srate 32000 -of rawaudio -af $3 -o "$(echo -n "$p" | rev | cut -d"." -f2- | rev)".aac
}

# Verifica se o mencoder existe.
if [ ! -e "/usr/bin/mencoder" ]; then
echo "             ***********************************************"
echo "             * ERRO: Você não possui o mencoder            *"
echo "             * instalado, favor instalar.                  *"
echo "             * Saindo do script...                         *"
echo "             ***********************************************"
sleep 2
exit 1
fi

# Verifica se o MP4Box existe.
if [ ! -e "/usr/bin/MP4Box" ]; then
echo "             ***********************************************"
echo "             * ERRO: Você não possui o MP4Box              *"
echo "             * instalado, favor instalar o pacote gpac.    *"
echo "             * Saindo do script...                         *"
echo "             ***********************************************"
sleep 2
exit 2
fi

# Verifica se existe arquivo para ser convertido.
if [ "$1" = "" ]; then
clear
echo ""
echo "             ***********************************************"
echo "             * ERRO: Arquivo não encontrado. Por favor,    *"
echo "             * selecione um arquivo de vídeo.              *"
echo "             ***********************************************"
echo "             *        VEJA COMO UTILIZAR O SCRIPT          *"
echo "             *                                             *"
echo "             * $ sh converte-video-mp4.sh arquivo-de-video *"
echo "             ***********************************************"
echo "             * Saindo do script...                         *"
echo "             ***********************************************"
echo ""
sleep 2
exit 3
fi

# Verifica se é um arquivo de vídeo
case "$1" in
*.3gp) ;; *.asf) ;; *.avi) ;; *.mpg) ;; *.mpeg) ;; *.ogv) ;; *.ogg) ;; *.wmv) ;; *.flv) ;;
*)
clear
echo ""
echo "             ***********************************************"
echo "             * Este não é um arquivo de vídeo válido.      *"
echo "             * Favor escolher um arquivo de vídeo.         *"
echo "             ***********************************************"
echo ""
exit 4;;
esac

# Chama as funções
clear
echo ""
echo "             ***********************************************"
echo "             * Tudo certo, o vídeo                         *"
echo "             * '$1'                                         "
echo "             * começará a ser convertido em 3 segundos...  *"
echo "             ***********************************************"
echo "                        ."
sleep 1
echo "                   ."
sleep 1
echo "              ."
sleep 1
echo ""

# Remove vestígios
thedir_is="$(echo -n "$p" | rev | cut -d'/' -f2- | rev)/"
cd $thedir_is
rm -f *.aac *.264
cd $OLDPWD

# Cria o arquivo .264
clear
echo ""
echo "             ***********************************************"
echo "             * Gerando o arquivo de vídeo, aguarde...      *"
echo "             ***********************************************"
echo ""
converte_video "$p" $resp $frame $q_crf $q_subq $contraste $brilho $saturacao $resolucao &&

# Cria o arquivo .aac
clear
echo ""
echo "             ***********************************************"
echo "             * Gerando o arquivo de áudio, aguarde...      *"
echo "             ***********************************************"
echo ""
converte_audio "$p" $resp $q_som $canal &&

# Cria o MP4
clear
echo ""
echo "             ***********************************************"
echo "             * Gerando o arquivo MP4, aguarde...           *"
echo "             ***********************************************"
echo ""
MP4Box -fps $frame -add "$(echo -n "$p" | rev | cut -d"." -f2- | rev)".264 -add "$(echo -n "$p" | rev | cut -d"." -f2- | rev)".aac -new "$(echo -n "$p" | rev | cut -d"." -f2- | rev)".mp4 &&

# Remove vestígios
thedir_is="$(echo -n "$p" | rev | cut -d'/' -f2- | rev)/"
cd $thedir_is
rm -f *.aac *.264
cd $OLDPWD

Para fzer o download da versão acima, clique aqui.

Para fazer a conversão de um vídeo, basta executar:

$ sh converte-video-mp4.sh arquivo-a-ser-convertido

ou

$ sh celular-mp4.sh arquivo-a-ser-convertido

Segue o código do script:

obs.: Altere apenas as opções de “Configurações do vídeo

Código:

#!/bin/bash
# Simples script que converte qualquer arquivo de video
# para o formato mp4, conpativel com a maioria dos celulares.
#
# Por Tales A. Mendonça // Contribuições de Luciano Martini
# Última atualização - 15/10/2009

# -------------------------------------------------------

# Configurações do vídeo
q_som="128" # Qualidate do som
q_video="450 300" # Qualidade do vídeo
resolucao="352:-3" # Rasolução do vídeo, mude apenas o primeiro valor, pois o "-3" atribui um valor automatico para não distorcer o vídeo
frame="15" # quantidade de frames por segundo. Use um valor entre 10 a 30, obtendo menos ou mais quantidade de quadros

# -------------------------------------------------------

p="$1"
converte() {
p="$1"
# Função para converter o arquivo
mencoder "$1" -of lavf -lavfopts format=mp4 -ovc xvid x264 -oac lavc -lavcopts acodec=libfaac:abitrate=$2 -xvidencopts
-x264encopts bitrate=$3 -vf scale=$4,pp=linblenddeint -ofps $5 -srate 32000 -o "$(echo -n "$p" | rev | cut -d"." -f2- | rev)".mp4
}

# Verifica se o mencoder existe.
if [ ! -e "/usr/bin/mencoder" ]; then
echo "             ********************************************"
echo "             * ERRO: Você não possui o mencoder         *"
echo "             * instalado, favor instalar.               *"
echo "             * Saindo do script...                      *"
echo "             ********************************************"
sleep 2
exit 1
fi

# Verifica se existe arquivo para ser convertido.
if [ "$1" = "" ]; then
clear
echo ""
echo "             ********************************************"
echo "             * ERRO: Arquivo não encontrado. Por favor, *"
echo "             * selecione um arquivo de vídeo.           *"
echo "             ********************************************"
echo "             *        VEJA COMO UTILIZAR O SCRIPT       *"
echo "             *                                          *"
echo "             * $ sh celular-mp4.sh arquivo-de-video     *"
echo "             ********************************************"
echo "             * Saindo do script...                      *"
echo "             ********************************************"
echo ""
sleep 2
exit 2
fi

# Verifica se é um arquivo de vídeo
case "$1" in
*.3gp) ;; *.asf) ;; *.avi) ;; *.mpg) ;; *.mpeg) ;; *.ogv) ;; *.ogg) ;; *.wmv) ;; *.flv) ;;
*)
clear
echo ""
echo "             ********************************************"
echo "             * Este não é um arquivo de vídeo válido.   *"
echo "             * Favor escolher um arquivo de vídeo.      *"
echo "             ********************************************"
echo ""
exit 3;;
esac

# Chama a função
clear
echo ""
echo "             ********************************************"
echo "             * Tudo certo, o vídeo                      *"
echo "             * '$1'                                      "
echo "             * começará a ser convertido em 5 segundos..*"
echo "             ********************************************"
echo "                     ."
sleep 1
echo "                   ."
sleep 1
echo "                 ."
sleep 1
echo "               ."
sleep 1
echo "             ."
sleep 1

converte "$p" $resp $q_som $q_video $resolucao $frame

Clique aqui para baixar o scriptv20-1-2010