terça-feira, 24 de agosto de 2010

Marca de água no ffmpeg 0.6 Ubuntu 10.04

Como devem saber o filtro vhook que permitia colocar marcas de água (watermark) sobre vídeos foi descontinuado.
Para o substituir, surgiu o libavfilter que contém um conjunto de filtros para serem aplicados nos vídeos.
Mas o projecto ainda está em fase integração com o ffmpeg. A versão "completa" do libavfilter ainda não está na versão final do ffmpeg.

Se você quiser usar todos os filtros do libavfilter terá que utilizar o "libavfilter repository"

svn checkout svn://svn.ffmpeg.org/soc/libavfilter

Para mais informações:
http://ffmpeg.org/libavfilter.html

Embora no site do ffmpeg somos alertados para uma possível instabilidade do libavfilter (porque ainda se encontra em estado inacabado) o certo é que eu instalei, e até agora não tive problemas em adicionar marcas de água nos vídeos. Funciona tão bem como no antigo vhook.

Então vamos começar.

Adicionando repositórios adicionas. (caso você ainda não tenha)

sudo software-properties-gtk -e universe

sudo software-properties-gtk -e multiverse

sudo apt-get update

Remover o ffmpeg libx264 libvpx do repositório caso você já os tenha instalados.

sudo apt-get purge -y ffmpeg x264 libx264-dev libvpx

sudo apt-get update

Instalando as dependências:

sudo apt-get install -y build-essential subversion checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libtheora-dev libxvidcore-dev libsdl1.2-dev libvorbis-dev libopencore-amrwb-dev libopencore-amrnb-dev git-core libx11-dev libxfixes-dev zlib1g-dev

Vamos para pasta do utilizador.

cd ~

E criamos uma pasta source-ffmpeg, e mudamos para essa pasta.

mkdir source-ffmpeg
cd source-ffmpeg

Vamos começar com o x264(opcional):
Execute os seguintes comandos:

git clone git://git.videolan.org/x264.git

cd x264

./configure

make

sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "2:0.`grep X264_BUILD x264.h -m1 | cut -d' ' -f3`.`git rev-list HEAD | wc -l`+git`git rev-list HEAD -n 1 | head -c 7`" --default

cd ..

Agora o libvpx (opcional):

git clone git://review.webmproject.org/libvpx.git

cd libvpx

./configure --disable-install-docs --enable-vp8

make

sudo checkinstall --fstrans=no --install=yes --pkgname=libvpx --pkgversion "0.9.1-`date +%Y%m%d%H%M`-git" --default

cd ..

Finalmente o "libavfilter/ffmpeg":

svn co svn://svn.ffmpeg.org/soc/libavfilter

cd libavfilter

Agora vamos rodar o checkout.sh (e um script que está dentro da pasta libavfilter) que vai aplicar os pachs, e preparar o ffmpeg para "receber" o libvfilter.


./checkout.sh

Mudamos agora para a pasta do ffmpeg:

cd ffmpeg

./configure --enable-gpl --enable-nonfree --enable-pthreads --enable-libfaac --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-avfilter --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvorbis --enable-x11grab --enable-version3 --enable-libvpx --enable-filter=movie --enable-avfilter

make

sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "4:SVN-r`LANG=C svn info | awk '/Revision/ { print $NF }'`" --default

E pronto! Para começar dê uma olhada em todos os filtros disponíveis para o ffmpeg.

ffmpeg -filters

Filters:
aspect Set the frame aspect ratio.
crop Crop the input video to x:y:width:height.
drawbox (null)
fade (null)
fifo (null)
format Convert the input video to one of the specified pixel formats.
fps (null)
hflip Horizontally flip the input video.
negate (null)
noformat Force libavfilter not to use any of the specified pixel formats for the input to the next filter.
null Pass the source unchanged to the output.
overlay Overlay a video source on top of the input.
pad Pad input image to width:height[:x:y[:color]] (default x and y: 0, default color: black).
pixdesctest Test pixel format definitions.
pixelaspect Set the pixel aspect ratio.
rotate (null)
scale Scale the input video to width:height size and/or convert the image format.
setpts (null)
slicify Pass the images of input video on to next video filter as multiple slices.
split (null)
transpose (null)
unsharp Sharpen or blur the input video.
vflip Flip the input video vertically.
buffer Buffer video frames, and make them accessible to the filterchain.
color Provide an uniformly colored input, syntax is: [color[:size[:rate]]]
movie (null)
nullsrc Null video source, never return images.
nullsink Do absolutely nothing with the input video.

E agora um teste:

ffmpeg -i in.mp4 -sameq -vf "movie=0:png:logo.png [wm];[in][wm] overlay=0:0:1[out]" out.mp4

No comando em cima a imagem que utilizar como marca de água tem o nome de logo.png, e o tamanho da imagem terá de ser igual ao tamanho do frame do seu vídeo. Use o Gimp para criar a imagem e posicionar a sua marca de água ou logótipo, ou alterar a transparência. :)

IMPORTANTE: Como estamos utilizando sempre a ultima "versão" disponível do ffmpeg, libvpx, x264, etc... poderá ocorrer algum erro durante a execução do comando make. Você terá de ter paciência e esperar que o desenvolvedores" corrijam eventuais problemas das últimas revisões que estão no git ou svn.
Se você não pode esperar, a solução é usar uma revisão estável que não tenha dado problemas.
Esta é a versão que estou a usar com libavfilter: FFmpeg version SVN-r24819

Nenhum comentário :