Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
web - tec / HTML5.pdf
Скачиваний:
45
Добавлен:
12.06.2015
Размер:
2.87 Mб
Скачать

Пакетное кодирование H..264-видео с помощью HandBrake

113

Нажмите кнопку Browse (Обзор) (рис. 5.20), чтобы выбрать имя закодированного видеофайла и место его сохранения.

Рис. 5.20. Выберем имя конечного файла

Чтобы приступить к кодированию, щелкните на пункте Start (Запуск) (рис. 5.21). По мере преобразования вашего видеофайла программа HandBrake будет вы-

водить кое-какую статистику (рис. 5.22).

Пакетное кодирование H.264-видео с помощью HandBrake

Выше было упомянуто о варианте HandBrake для командной строки. Свежую версию этого «издания» можно скачать по адресу http://handbrake..fr/downloads2.. php.

Программа HandBrake для командной строки, подобно ffmpeg2theora (см. раздел «Пакетное кодирование Ogg-видео с помощью ffmpeg2theora» этой главы), может принимать множество разных аргументов. Подробнее о них можно прочесть, набрав HandBrakeCLI --help в окне терминала или командной строке, а я расскажу лишь о нескольких.

114

Глава 5.. Видео в Сети

Рис. 5.21. Итак, не закодировать ли нам видео?

Рис. 5.22. Спокойствие, только спокойствие...

--preset "X", где X — название шаблона HandBrake (оно обязательно должно быть заключено в кавычки). Шаблон для сетевого H.264-видео называется iPhone & iPod Touch.

--width W, где W — ширина кадров закодированного видеофайла. HandBrake автоматически подберет высоту так, чтобы исходные пропорции были сохранены.

--vb Q, где Q — средний битрейт (Кбит/с).

--two-pass — флаг, включающий кодирование в два прохода.

--turbo — флаг, разрешающий при двухпроходной кодировке первый проход в турборежиме.

--input F, где F — имя исходного видеофайла.

--output E, где E — имя конечного (закодированного) видеофайла.

Кодирование WebM-видео с помощью программы ffmpeg

115

Рассмотрим, как можно, работая в командной строке, передать HandBrake те же самые настройки кодирования, которые мы ранее выставили в графической версии программы:

you@localhost$ HandBrakeCLI --preset “iPhone & iPod Touch”

--width 320

--vb 600 --two-pass --turbo --input pr6.dv

--output pr6.mp4

Разберемся с этой записью по порядку. Пользователь запускает HandBrake с шаблоном iPhone & iPod Touch, устанавливает размеры кадра 320 × 240, определяет значение среднего битрейта равным 600 Кбит/с, включает кодирование в два прохода с первым проходом в турборежиме. Программа читает файл pr6.dv и выдает файл pr6.mp4. Отлично!

Кодирование WebM-видео с помощью программы ffmpeg

Я пишу эти строки 20 мая 2010 года. Формат WebM был выпущен в свет буквально вчера (я не шучу), и поэтому ассортимент программ-кодировщиков невелик, а подробных руководств совсем мало. Со временем, когда нужные инструменты будут написаны (или обновлены), запускать кодирование в WebM можно будет одним щелчком кнопкой мыши, но пока нам понадобится следу­ ющий арсенал.

libvp8 и особая версия ffmpeg с дополнениями (обеспечивающими совместимость с libvp8), которые пока не вошли в состав официального репозитория ffmpeg:

yy установка в Linux (http://lardbucket..org/blog/archives/2010/05/19/vp8-webm-and- ffmpeg/) — эти инструкции я проверил лично под ОС Ubuntu Lucid 10.04;

yy установка в Windows (http://www..ioncannon..net/meta/1128/compiling-webm- ffmpeg-windows/) — эти инструкции я не проверял.

Самая свежая версия mkclean (http://www..matroska..org/downloads/mkclean..html).

Готовы? Запустите ffmpeg из командной строки без параметров и удостоверьтесь, что программа была скомпилирована с поддержкой VP8:

you@localhost$ ffmpeg

FFmpeg version SVN-r23197, Copyright (c) 2000-2010 the FFmpeg developers built on May 19 2010 22:32:20 with gcc 4.4.3

configuration: --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab

--enable-libvpx-vp8

116

Глава 5.. Видео в Сети

Если волшебные слова --enable-libvpx-vp8 не появились на экране, то у вас не та версия ffmpeg, которая нам нужна. Если вы голову даете на отсечение, что все скомпилировали правильно, то проверьте, не установлено ли у вас две версии программы. Разные версии ffmpeg, установленные параллельно, не конфликтуют, но в этом случае вам надо вводить полный путь к той из них, которая поддерживает VP8.

Рассмотрим, как делать кодирование в два прохода (см. раздел «Кодирование H.264-видео с помощью HandBrake» этой главы). При первом проходе сканируется входной файл (-i pr6.dv) и кое-какую статистику по нему программа выводит в файл журнала, которому автоматически будет присвоено имя pr6.dv-0.log. Параметр -vcodec отвечает за выбор видеокодека:

you@localhost$ ffmpeg -pass 1 -passlogfile pr6.dv -threads 16

-token_partitions 4 -altref 1 -lag 16 -keyint_min 0

-g 250 -mb_static_threshold 0 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx_vp8 –an -f rawvideo -y NUL

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

При втором проходе ffmpeg прочитает статистику, записанную во время первого прохода, и выполнит собственно кодирование видео- и аудиопотоков. На выходе мы получим MKV-файл, который позднее преобразуем в WebM (в конце концов ffmpeg обязательно научится создавать WebM-файлы напрямую, но пока, по весьма тонким причинам, это невозможно).

Второй проход запускается следующими командами:

you you@localhost$ ffmpeg -pass 2 -passlogfile pr6.dv -threads 16

-token_partitions 4 -altref 1 -lag 16 -keyint_min 0 -g 250 -mb_static_threshold 0 -skip_threshold 0 -qmin 1 -qmax 51 -i pr6.dv -vcodec libvpx_vp8

-b 6 14400 -s 320x240 -aspect 4:3 -acodec vorbis -y pr6.mkv

Здесь пять важных параметров:

-vcodec libvpx_vp8—указывает,чтомыпользуемсявидеокодекомVP8,каки всегда при кодировании WebM-видео;

-b 6 14400 — определяет битрейт. В отличие от других инструментов, libvp8 ожидает, что пользователь введет значение в битах (а не килобитах). Таким образом, для получения видео с битрейтом 600 Кбит/с надо указать 600 × 1024 = 614 400;

-s 320x240 — задает размер кадра в конечном видеофайле (ширину и высоту);

-aspect 4:3 — определяет соотношение сторон кадра. В видео обычной четкости это соотношение, как правило, равно 4:3, а в высокочетком составляет 16:9 или 16:10. Мой опыт показывает, что это соотношение надо в явном виде указать в командной строке, чтобы программа ffmpeg не ошиблась при автоопределении;

Соседние файлы в папке web - tec