Разбираемся с видео. Часть первая (теория)

Аватар пользователя kyky kyky 26 июня 2008 в 4:36

Содержание:

  1. Введение
  2. Общая информация о видео на сайте
  3. О видеомодулях
  4. О ffmpeg
  5. Ffmpeg на денвере
  6. Тонкости пересчета видео
  7. В следующей статье

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

Общая информация о видео на сайте
Как поставить видео на свой сайт?
Есть гиганты вроде Ютуба, Гугла и некоторых других служб, позволяющих хранить видео на стороне и внедрять на свою страницу. Каждому видео соответствует ссылка, вставив которую в контент получишь кино. Очень удобно, тут даже расписывать не стоит. Гораздо интереснее, как показывать видео, не связываясь со сторонними службами.
Идеология проигрывания видео родственна понятиям в операционных системах: видеофайлы проигрываются программой-плейером. В вебе аналогично – в страницу внедряется код, загружающий плейер, которому скармливается видеофайл. Какие применяются форматы файлов? Ну, во-первых, это Flash video (flv), самый популярный и распространенный тип видео; Quick Time Movie (mov), пользующийся успехом в основном в Америке; Windows Media (расширение не помню), очень юзер-френдли, для тех, кому лень заморачиваться с форматом и пересчетом. В статье в уделено внимание в основном первому формату.
Если хочется вставить видео на сайт, стоит подумать, нужно ли подключение специального модуля. Когда вставка видео планируется в исключительных случаях, следует ограничиться ручной подстановкой кода. Помним, что любой модуль – это дополнительная память, запросы к базе и так далее, поэтому вебмастера, я полагаю, не затруднит скопировать из демонстрашки десять строк кода и заменить одно имя файла на другое.
Пример:

<div id="container"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
                var s1 = new SWFObject("mediaplayer.swf","mediaplayer","300","185","8");
                s1.addParam("allowfullscreen","true");
                s1.addVariable("width","300");
                s1.addVariable("height","185");
                s1.addVariable("file","video.flv");
                s1.write("container");
        </script>

Этот код загружает и внедряет в страницу флэш-плейер, а в плейер загружается FLV-файл с нашим видео. Плейеров существует великое множество, в первую очередь порекомендую JW_FLV_Media_Player (http://www.jeroenwijering.com/?about=JW_FLV_Media_Player)
Я хочу обратить ваше внимание на следующий момент: при размещении любой мультимедийной информации, будь то флэш, видео, аудио или 3D-сцена, следует учитывать ту ситуацию, когда воспроизведение невозможно ввиду отсутствия модулей в браузере пользователя. И не стоит его винить. Вместо этого должна выводиться заглушка, которая содержит объяснение причины сбоя, рекомендации, что где скачать и как установить, соответствующие ссылки и, например, кадр из видео или прямую ссылку на видеофайл.
В указанном примере заглушка описывается в первой строке. Если пользователь обрубил в своем браузере флэш, то увидит надпись «Загрузи флэш» и ссылку на адобовский сайт (так как Adobe купила Macromedia, будет произведен редирект на страницу нового владельца продукта). Естественно, для конкретных проектов заглушку следует писать самостоятельно, с применением php-шаблона. Весьма забавный пример заглушки, выполненной в характерной манере, можно наблюдать на сайте Лебедева.
Если же намечается массовое наполнение сайта видеофайлами, или возможность пользователей постить видео, не обойтись без автоматизированных средств. Вот их и рассмотрим чуть ниже.

О видеомодулях
Уважаемый BX делал обзор модулей для вставки видео. Чтобы не перебирать все модули, тестируя их и сравнивая, сделаем общий вывод по принципу работы модулей.
Вставка ссылки с ЮТуба и подобных служб – описывать подробно не стоит, поскольку это можно делать и без видеомодуля, а например, с помощью полей CCK. Помните, что удаление видео автором с сервера ЮТуба приводит к битой ссылке, что очень нехорошо.
Вставка через редактор.
Если честно, готовой вставки видео нет ни в Тини, ни в FCK редакторах. На официальном сайте Тини-редактора такая фишка присутствует, но модуль подключения Тини к Друпалу указанной возможности не дает. Кнопки «Вставить видео» в тулбаре нет. Поэтому в этом случае можно ограничиться добавлением специальной кнопки для BUEditor’а: (аттач video_button.txt)

Этот код был любезно предоставлен пользователем Eretica. В своем первом сайте я использовал слегка модифицированную версию этого кода (был другой плейер), но алгоритм остался неизменным.
Данный код загружает плейер и подает ему выбранный в IMCE файл. Метод хорош тем, что дает загрузку видео без подключения дополнительных модулей. Видео становится неотъемлемой частью контента, и отключение или устарение каких-либо модулей не отразится на содержимом сайта, что является самым что ни на есть «зеленым решением» (привет Разгонке). Как быть, если на сайте используется другой редактор, например Тини или FCK? Насчет Тини - не знаю, но совместное использование FCK и BU редакторов вполне допустимо: отключение FCK (disable rich-editor) делает доступным кнопки BU-редактора. Переключаясь между редакторами, можно и верстать страницы как в ворде, и вставлять видео в контент.

Очень распространен вид модулей, создающий особый тип материала со специальными свойствами. Как правило, при создании ноды этого типа автору предлагается загрузить FLV-файл со своего компьютера. Весьма удобно, но следует выставлять ограничение по размеру файла и длительности потока. Кроме того, отключение модуля сведет на нет все накопленные данные. Перед установкой такого модуля важно внимательно изучить его родословную: как часто обновляется модуль, есть ли внимание к нему у пользователей, занимается ли его разработкой автор, планируется ли портирование под следующие версии. Если функционал модуля очень заманчив, но сам он в DEV-версии, в трекере три неисправленных issues, а автор молчит – доверять такому модулю не стоит, лучше обратить свое внимание на что-нибудь попроще, но понадежнее.

Наконец, та группа модулей, ради которых написана статья – это модули с поддержкой конвертирования видео любых форматов в FLV или 3GP-файлы при помощи ffmpeg (flashvideo, video). Их применение позволяет организовать настоящий видеосервис, включающий размещение видео пользователей и поддержку вставки видео в другие сайты, словом – аналог ЮТуба.
Дело это очень серьезное, поскольку на сервере должен быть установлен ffmpeg и выставлены специальные настройки, отличные от настроек обычных серверов. Так как разработка видеосервиса требует многократного тестирования, а хостинг с поддержкой ffmpeg стоит недешево, стоит рассказать, как поставить ffmpeg на локальной машине. Но сначала – пару слов о самом ffmpeg.

FFmpeg – это программа для конвертирования видео из любого формата в любой формат с возможностью изменения кодеков, частоты кадров, звука, сжатия, размера, обреза, масштабирования и прочих свойств. Библиотека должна быть установлена на сервере самим хостером. Конвертирование видео вызывает колоссальные нагрузки на процессор, поэтому если программы на сервере нет, то ее вам никто не поставит – эта привилегия стоит денег. Работа с ffmpeg осуществляется посредством командной строки, например:

ffmpeg.exe -i "C:\film\PixarBoundin.avi" -f flv -ac 1 -title "Clip Title" -author "Clip Author" -copyright "Clip Copyright" "C:\film\test.flv"

Эта команда переконвертирует файл формата avi в flv.

Установка ffmpeg на денвер
Обыскав весь интернет, не нашел готового способа установки библиотеки на денвер. Предлагаю свой метод.
Качаем ffmpeg.zip из аттача (бинарник).
Качаем http://sergey89.ru/files/ffmpeg-php-win32-all.zip (библиотеки с кодеками).

В папке usr\bin создаем папку ffmpeg
Кидаем туда ffmpeg.exe, SDL.dll, pthreadGC2.dll

В папку usr/local/php5/ext кидаем php_ffmpeg.dll
Открываем php.ini, в группе расширений (extensions) пишем extension=php_ffmpeg.dll
В папку windows/system32 кидаем pthreadGC2.dll, avcodec-51, avformat-51.dll, avutil-49.dll

Делаем рестарт денвера.
Заходим на сайт, создаем блок с кодом:

<?php
     if    (extension_loaded('ffmpeg')) {
         print 'DA!!!';
     }
?>

Формат ввода, естественно, выставляем PHP code.
Если в блоке у вас висит DA!!!, то ffmpeg загружен. Теперь можно ставить flashvideo и тестировать конвертирование. С помощью flashvideo я организовал сайт со всеми клипами, накопленными ранее на винте. Пересчет осуществлялся по хрону.

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

h = 400/(W/H), где h – новая высота, W и H – соответственно ширина и высота исходного материала. Эта функция реализована в модуле video.
Если ширина исходного видеоматериала меньше 400 пикселей, изменять размер не нужно, поскольку это только увеличит размер файла, но не повысит качества.
Если звук в видеофайле моно, нет нужды делать его стерео.
Исходное видео должно удаляться.

Полукадры.
Если видео получено с цифровой камеры или рипом DVD, оно содержит полукадры, или поля. Полукадр представляет собой черезстрочную интерполяцию смежных кадров. Это свойство цифрового видео обусловлено инженерными особенностями телевидения и восприятия видео человечески глазом. При пересчете видео с полукадрами возникает грязь и артефакты на границах объектов. Приведение видео к целым кадрам осуществляется указанием итерполяции полей директивой option{-deinterlace}

В следующей статье
Пока что описана теория. В следующей статье планирую подробно описать как поднять flashvideo и организовать свой видеосервис. Планирую сделать сайт для видеоуроков по Друпалу. Кто поддержит?

ВложениеРазмер
Иконка простого текстового файла video_button.txt2.04 КБ

Комментарии

Аватар пользователя EllECTRONC EllECTRONC 26 июня 2008 в 17:14

Интересно! (в закладках), кстати у кого-то закладки не работают?

А вот что насчет "внедрения в свою страницу", давно мучит вопрос как сделать поле с кодом для вставки медиа как на YouTube, причем интересует не только для видео, а для любого медиа файла - видео, картинка, аудио.
Что нужно: модуль, сниппет???

Аватар пользователя A.L.F. A.L.F. 27 июня 2008 в 10:11

Где же вы были ранее...? ))
Мне пришлось заказать установку ffmpeg за еврики, поскольку у самого почему-то криво вставало. ((

Аватар пользователя A.L.F. A.L.F. 27 июня 2008 в 10:37

Где же вы были ранее...? ))
Мне пришлось заказать установку ffmpeg за еврики, поскольку у самого почему-то криво вставало. ((

Аватар пользователя sadmin sadmin 20 августа 2008 в 11:07

Статья оч интересная, почему раньше ее не заметил, не понимаю))
Сайт видеоуроков по друпалу вещь хорошая

Аватар пользователя Rim Rim 15 сентября 2008 в 10:44

Воспользовался вашей кнопкой видео для вставки видео ролика, на локальном компьютере все нормально, но когда переношу на сервер, просто белая картинка вместо плеера и ролика (использую dashpaeyr).
В чем может быть причина?

Аватар пользователя kyky kyky 15 сентября 2008 в 12:01

Ну, я только начал разбираться с Дашплейером, так что пока не могу точно сказать, но возможно плейер лежит не там, куда указан путь.

сайм плейер и swfobject.js должны лежать в папке mediaplayer.
возможено, сам плейер называется по-другому, в скрипте он прописан как mediaplayer.swf

проверьте сначала на обычном JW плейере.

Аватар пользователя dilnix@drupal.org dilnix@drupal.org 10 февраля 2009 в 3:01

А что на счет того, чтобы на одной странице можно было отобразить 2 и больше видео? Используя технологию "BUEditor с кнопочкой автора" кнопочка без проблем работает... плеер JW, но второе и все последующие видео не отображаются...

Аватар пользователя ProMax ProMax 12 июня 2010 в 12:33

денвер кака таково мое имхо , лучше использовать XAmpp ( брать тут apachefriends.de) , правда тоже не нашел как в windows к нему подключить ffmpeg

Аватар пользователя seaji seaji 16 октября 2010 в 19:53

Как то в последнее время колбасит drupal.ru статейки двухлетней давности неожиданно опять всплывают в RSS.
По первости это вводило меня в заблуждение. Теперь всегда смотрю на дату.