воскресенье, 7 декабря 2008 г.

Полноценный ffmpeg в Ubuntu

В связи с тем, что в некоторых странах (Америка, Австралия) можно патентовать алгоритмы, поддержка некоторых форматов в ffmpeg в Ubuntu искуственно отключена. В частности пострадал формат mp3. Бинарный пакет из репозитория может декодировать mp3, но не может его создавать. Дабы обойти сие ограничение, необходимо пересобрать пакет вручную.

Итак, для начала потребуются кое какие доп пакеты:
 sudo aptitude install build-essential fakeroot  
Достаём исходный код ffmpeg:
 apt-get source ffmpeg  
Будет выкачан и распакован архив с исходным кодом, на него будут наложены специфичные для дистрибутива патчи, и будут добавлены скрипты сборки пакета. Далее необходимо перейти в директорию с исходными кодами ffmpeg-debian... название директории может зависеть от версии пакета.

Теперь необходимо разрешить сборку дополнительных кодеков. Для этого нужно добавить в переменную DEB_BUILD_OPTIONS ключ externalcodecs (это актуально для 8.10, меня терзают смутные сомнения, что раньше нужно было использовать ключ risky):
 export DEB_BUILD_OPTIONS+=externalcodecs  
После этого нужно установить библиотеки необходимые для сборки пакета:
 sudo aptitude build-dep ffmpeg  
Теперь можно собрать и установить deb-пакеты:
 dpkg-buildpackage -b  
 cd ../  
 sudo dpkg -i *.deb  
Теперь можно использовать 100% возможностей ffmpeg

Video watermark

Сняв что-нибудь интересное на видекамеру и потратив пару часиков на редактирование этого самого чего-то интересного, хочется выложить результат куда-нибудь в сеть. Разумеется при этом ещё хочется как-то отметиться, что автор именно я и никто другой. Можно добавить титры, но их с неплохой вероятностью могут вырезать за ненадобностью.

Но есть куда более ндёжный способ. Можно добавить в видео водяной знак. Он отчётливо виден, но не акцентирует на себе внимания, и его достаточно проблемно устранить. Настолько проблемно, что из любительского видео его точно вырезать никто не станет.

Итак, изначально у нас есть полностью отредактированное видео в файле final.dv, мы хотим получить видео с водяным знаком, которое можно раздовать друзьям for_share.dv. Я продпочитаю работать с сырым DV, но, на самом деле, формат не имеет значения, главное, чтобы его понимал ffmpeg. Собственно добавлять водяной знак будет именно он.

Для начала создадим шаблон водяного знака. Это должен быть рисунок с однородным цветом фона, лучше всего если это будет рисунок в оттенках серого. Сам шаблон водяного знака это всё то, что отличается от цвета фона. Я создаю шаблон следующим образом:
 convert -size 1024x576 xc:#000000 -font Bookman-DemiItalic -pointsize 50 -fill "#909090" -draw "text 810,560 'VestniK'" -gaussian 2,10 -shade 180x30 watermark.gif  

для видео в формате 16:9. Если требуется соотношение сторон 4:3, то нужно поменять размер.

Терерь можно подписать исходное видео:
 ffmpeg -i final.dv -vhook '/usr/lib/vhook/watermark.so -f watermark.gif -t 0x7F7F7F' -target dv for_share.dv  


Ещё одна мелочь по поводу видео. На видео хостингах как правило закаченное видео пережимается в flv со звуком в mp3. Если заливать видео в этом формате, то оно пережиматься не будет. Так можно получить больший контроль над качеством видео. Готовый рецепт по сохранению видео для публикации в интернете выглядит следующим образом:
 ffmpeg -i for_share.dv -f flv -vcodec flv -qscale 15 -maxrate 512k -bufsize 1M -s 480x270 -padtop 30 -padbottom 60 -acodec mp3 -ab 128k -ar 44100 for_internet.flv  

Помимо всего прочего здесь я подгоняю видео под соотношение сторон 4:3, так как у меня видокамера снимает видео с соотношением сторон 16:9. Если у вас видео имеет соотношение сторон 4:3, то команда для конвертации видео упростится:
 ffmpeg -i for_share.dv -f flv -vcodec flv -qscale 15 -maxrate 512k -bufsize 1M -s 480x360 -acodec mp3 -ab 128k -ar 44100 for_internet.flv  
.