САЙТОСТРОЙ.РУ

Разработка сайта любой сложности собственными силами - такова задача создателей сайта. Представлены лучшие советы вебмастеров, образцовые технические задания, бесценный опыт веб-мастеринга и советы в области безопасности сайтов, новые технологии веб, инструменты продвижения сайтов. Теперь создание сайтов не будет для Вас загадкой!

Построй свой сайт!

Свой 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 с заданными в командной строке параметрами.

Информация о полчившемся файле

Получившийся файл

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


САЙТОСТРОЙ.РУ - практикум создания сайтов для каждого

Просим с уважением относиться к авторам сайта и при копировании документов указывать ссылки на наш сайт.