|
Свой YouTube: конвертирование видео в FLV Создать аналог видеосервиса YouTube - смелая затея. Однако вполне выполнимая, если разобраться в деталях. Мы исходим из того, что в нашем распоряжении имеется выделенный сервер, в противном случае автоматическо перекодирование нам будет недоступно и создание сервиса невозможно. Если отбросить необходимые процессорные мощности, объемы данных и каналы интернета, а оставить лишь технологии, то алгоритм такого сервиса следующий:
- загрузка видеофайлов;
- преобразование их в формат Flash Video;
- создание видеоплеера, способного проигрывать файлы в формате Flash Video.
Мы займемся проблемой конвертирования файлов. Понятно, что пользователь будет загружать свои видеоролики в самых разных форматах: от тех, которые ему доступны в его мобильном телефоне до полупрофессиональной видеокамеры. Для того, чтобы плеер на Вашем сайте смог их проигрывать без затруднений, нужно привести их к одному формату. Причем, к видеоформату будут предъявляться и другие требования. Вот он:
- совместимость с программной средой Macromedia Flash;
- возможность воспроизведения с любого места (потоковость);
- "живучесть" на низкоскоростных каналах интернета;
- небольшой объем на диске видеофайла;
- как следствие низкая частота кадров в секунду.
Всем этим требованиям отвечает формат Flash Video (FLV), который мы и будем рассматривать в этой статье. Несмотря на то, что для потоковой передачи видео используется специальное серверное ПО, формат Flash Video позволяет гибко подходить к воспроизведению видеороликов. Причем, для использования этой возможности мдостаточно использовать стандартные средства Flash. Формат специально был создан для среды интернета и для использования в флеш-проигрывателях. Поэтому нашей задачей станет полуавтоматическое преобразование поступающих от пользователей роликов в файлы FLV.
В интернете существует проект открытого кодера, декодера и проигрывателя FFMpeg, который доступен по адресу http://ffmpeg.mplayerhq.hu/. С сайта можно скачать из раздела "[Download and SVN]" исходные тексты, чтобы откомпилировать их у себя на сервере. Получите ссылку на bare sources и выполните инструкции:
# wget http://www8.mplayerhq.hu/MPlayer/releases/codecs/essential-20071007.tar.bz2 # tar -xvzf essential-20071007.tar.bz2 # cd ffmpeg-export-2008-07-12/ # ./configure # make # make install
После получения исходных кодов и их распаковки, компилируются программы и многочисленные кодеки. Обратите внимание, что в разделе Enabled decoders (разрешенные декодеры) содержится около 200 кодеков. Число же кодеков значительно меньше, но среди них обязательно должен присутствовать FLV - формат Flash Video, преобразование в который нам необходимо. Впрочем, в современных версиях FFMpeg он непременно найдется.

Среди программ нас интересует одноименная ffmpeg, формат использования который следующий:
ffmpeg [[опции входного файла][-i входной файл]]... {[опции выходного файла] выходной файл}...
Обратите внимание, что опции для входного и выходного файлов могут быть идентичными, поэтому во избежание путаницы необходимо их указывать непосредственно перед именем файла.
Ниже приведена таблица наиболее употребимых опций ffmpeg.
| -b |
bitrate, частота потока, бит/с. Например, 64k |
| -r |
frame rate, частота кадров в секунду. По умолчанию 25 |
| -s |
frame size, размер кадра в пикселях. Может быть задана числами или константой. Например, 320x240 |
| -ar |
audio rate, частота звукового потока, бит/с. Например, 11025 |
Все эти значения мы можем выбрать, исходя из условий использования видеоролика. В наших интересах получить файл как можно меньшего объема, поскольку он будет передан пользователю при проигрывании ролика. Выберем разрешение 320x240, что соответствует стандарту qVGA, которое получило широкое распространение. А в качестве частоты аудиодорожки будем использовать 22050 бит/с, что соответствует качеству радиовещания.
И вот, пользователь закачал на наш сервер свой файл voditel.avi, который теперь нам надо преобразовать в voditel.flv, уменьшив его характеристики до требуемых. С этим легко справится ffmpeg:
[root@saytostroy.ru flv]# ffmpeg -i voditel.avi -f flv -s 320x240 -ar 22050 voditel.flv FFmpeg version SVN-r14173, Copyright (c) 2000-2008 Fabrice Bellard, et al. configuration: libavutil version: 49.7.0 libavcodec version: 51.60.0 libavformat version: 52.17.0 libavdevice version: 52.0.0 built on Jul 12 2008 10:56:01, gcc: 3.4.6 20060404 (Red Hat 3.4.6-9) [avi @ 0x83696e0]non-interleaved AVI [NULL @ 0x8380d10]Invalid and inefficient vfw-avi packed B frames detected
Seems stream 0 codec frame rate differs from container frame rate: 30000.00 (30000/1) -> 25.00 (25/1) Input #0, avi, from voditel.avi: Duration: 00:00:55.36, start: 0.000000, bitrate: 557 kb/s Stream #0.0: Video: mpeg4, yuv420p, 352x288 [PAR 1:1 DAR 11:9], 25.00 tb(r) Stream #0.1: Audio: mp3, 32000 Hz, stereo, 96 kb/s File voditel.flv already exists. Overwrite ? [y/N] y Output #0, flv, to voditel.flv: Stream #0.0: Video: flv, yuv420p, 320x240 [PAR 11:12 DAR 11:9], q=2-31, 200 kb/s, 25.00 tb(c) Stream #0.1: Audio: adpcm_swf, 22050 Hz, stereo, 64 kb/s Stream mapping: Stream #0.0 -> #0.0 Stream #0.1 -> #0.1 Press [q] to stop encoding [mpeg4 @ 0x8380d10]Invalid and inefficient vfw-avi packed B frames detected [mpeg4 @ 0x8380d10]Invalid and inefficient vfw-avi packed B frames detected overread, skip -7 enddists: -6 -6 overread, skip -4 enddists: -1 -1

Далее следует череда информационных сообщений, связанных с обработкой данных. Не стоит опасаться большого количество предупреждений: это неизбежно. Кодек постарается самостоятельно решить эти проблемы. Мы видим, что кодек определил тип входного файла: Video: mpeg4/Audio: mp3 и устаноил тип выходного: Video: flv/Audio: adpcm_swf. И в итоге мы получаем видеофайл формата Flash Video с заданными в командной строке параметрами.


Теперь можно отправлять полученный видеофайл для просмотра в флэш-плеере, однако об этом пойдет речь в будущей статье.
|
|
|