Журнал LinuxFormat - перейти на главную

LXF119:codecs

Материал из Linuxformat
Перейти к: навигация, поиск
Медиа-конверсия Преобразуем медиа-файлы высококачественными кодеками

Содержание

FFmpeg: Чистим вашу музыку

Не попав на Евровидение, Маянк Шарма утешается перекодированием своей аудио- и видеотеки. Споет не хуже!

Наконец-то вы урвали свою давнюю мечту – классные стереонаушники! Скорей надеть их, встряхнуть плей- лист, устроиться в кресле и нажать клавишу «Воспроизведение». И… Робби Уильямс звучит так же скверно, как в старых, дешевеньких недоделках. Почто?! Если исключить аллергию на Робби, то причина кроется в неподходящем кодировании музыки.

Кодирование – это преобразование информации из одного формата в другой. Переводя риппером дорожки аудио- CD в формат MP3, вы дивились компактности полученных файлов. А удивляться нечему: ради уменьшения объема информации риппер отсек изрядную ее долю. В стародавние времена, когда дисковая память стоила дорого, а интернет- подключения еле ползали, такой подход был вполне оправдан. Теперь, когда на персональных компьютерах стоят терабайтные диски, неужто вы пожалеете 100 ГБ для своей музыкальной коллекции? Ведь звучание будет чистым, как на «живом» выступлении. В репозитории вашего дистрибутива есть прекрасные инструменты для кодирования. Лишь чуть-чуть терпения, и музыка зазвучит совершенно по-новому даже на плейере-переноске.

Выбираем инструменты…

Аудио и видео можно закодировать разными кодеками, и упаковать в контейнеры для воспроизведения по стандартам разных стран и для размещения на разных носителях. Возможен ли инструмент, способный справиться с этаким многообразием? Да, есть такой, FFmpeg называется. Он кросс- платформенный, и умеет читать, записывать и конвертировать аудио- и видео- информацию. Мощь ему придает библиотека libavcodec. Родословные почти всех открытых медиа-- плейеров восходят к этим двум программам.

Наиболее популярные альтернативы FFmpeg в мире открытого ПО – Mencoder и Transcode; все, о чем пойдет речь на нашем уроке, можно отнести и к этой парочке. Mencoder – часть медиа-плейера MPlayer, а также DVD- риппера AcidRip. А Transcode используется в другом известном приложении: dvd::rip. И Mencoder, и Transcode тоже построены на библиотеке libavcodec.

Завидев нескончаемый список зависимостей FFmpeg, вы, скорее всего, предпочтете установить его из репозиториев своего дистрибутива. FFmpeg вполне пригоден для кодирования музыки, и мы употребим его для работы с аудиодорожками видеофайлов. Но есть специнструменты, которые справляются с такой задачей гораздо лучше. Пока вы в репозитории, загрузите заодно кодировщики FLAC, OggEnc (часть vorbis-tools) и Lame.

Сладкозвучные мотивы

Если вы кодируете аудио для хранения (а зачем же еще – диски нынче дешевы, и все такое…), то делать это нужно в формате FLAC. Такие файлы занимают немало места, зато дают широкий выбор вариантов в случае переноса музыки на устройства, работающие с новыми форматами сжатия с потерями.

Vorbis хорош при хранении музыки для потокового вещания через приложения типа Icecast. Список плейеров, работающих с OGG- файлами, весьма внушителен. Ну, а если без MP3 все-таки не обойтись, кодируйте их с помощью Lame.

Для начала возьмите аудио-CD и риппером снимите с него WAV-файлы без сжатия. Открытых рипперов полным-полно, такой почти наверняка включен и в ваш дистрибутив. В Gnome на Debian Lenny при установке в привод аудио-CD автоматически запускается программа Sound Juicer – это и есть риппер, хотя он может также и воспроизводить CD.

Если у вас руки чешутся по командной строке, снимите диск с помощью MPlayer:

$ mplayer -fs cdda://9 -ao pcm:file=track9.wav

Эта команда добудет из аудио- CD 9- ю дорожку. Аналогично извлекается аудио с DVD:

$ mplayer dvd://1 -ao pcm:file=gary.wav

Скопируется первая аудио- дорожка.

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

Чтобы кодировать во FLAC, сделайте следующее:

$ flac track9.wav

Создастся файл track9.flac, размер которого при стандартной степени сжатия составит около половины WAV. Уровень сжатия можно задать от -0 (быстрое сжатие) до -8 (максимальное сжатие), уровень по умолчанию равен -5.

Примерно так же создается OGG (как из WAV, так и из FLAC):

$ oggenc track9.flac

В результате получится замечательно компактный файл, и это при стандартной степени сжатия. Если вам медведь на ухо наступил, сжимайте по максимуму, с ключом -q10.

А теперь – старый добрый MP3:

$ lame -h -V 6 track9.wav track9.mp3

Создастся MP3 с переменным битрейтом. Доступны уровни от 0 до 9: чем меньше число, тем больше файл и лучше качество. Все эти команды могут обработать всю коллекцию одним махом, если применить шаблон имен файлов *. Перечисленные инструменты умеют также считывать метаданные и пользоваться тэгами для задания перекодированным файлам вразумительных имен.

Кроме качества, регулируются количество каналов и частота дискретизации. Например, правый динамик одного из моих музыкальных плейеров с поддержкой OGG надорвался от грохота классики 60‑х. И вот, чтобы насладиться California Dreamin’, мне пришлось слить стереоканалы в один, ключом -C 1.

Хотя я и рекомендую использовать для кодирования специальные инструменты, с таким же успехом можно применить и FFmpeg, все равно библиотеки будут одни и те же:

$ ffmpeg -i gary.wav -acodec libmp3lame -ac 1 -ar 22050 -ab 64k gary.mp3

Здесь мы велели FFmpeg кодировать WAV-файл для моего сломанного плейера MP3‑ кодировщиком Lame. Файл получился очень маленький: всего один канал (-ac 1), частота дискретизации 22 050 Гц, битрейт 64 кбит/с

FFmpeg поддерживает множество форматов. Наберите в командной строке ffmpeg -formats – сами увидите.

Скорая помощь

Кодек – например, MP3 – это всего лишь алгоритм кодирования. Полученные данные упаковываются в контейнер (например, FLV), куда можно поместить и информацию, сжатую другим кодеком, допустим, MPEG

Наведем справки о файлах

Прежде чем двигаться дальше, разберемся, как получить сведения о видео- и аудио-файлах с помощью FFmpeg. Пусть у нас есть AVI-файл под названием green.avi:

$ ffmpeg -i green.avi
FFmpeg version SVN-r13582, Copyright (c) 2000-2008
Fabrice Bellard, et al.
configuration: -- -- prefix=/usr -- -- libdir=${prefix}/lib
<snipped-configuration-options>
libavutil version: 49.7.0
libavcodec version: 51.58.0
libavformat version: 52.16.0
libavdevice version: 52.0.0
libavfilter version: 0.0.0
built on Oct 22 2008 15:22:08, gcc: 4.3.2
Input #0, avi, from ‘green.avi’:
Duration: 00:37:02.92, start: 0.000000, bitrate: 1320 kb/s
Stream #0.0: Video: mpeg4, yuv420p, 624x352 [PAR 1:1
DAR 39:22], 23.98 tb(r)
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 32 kb/s
Must supply at least one output file

Ваш вывод может быть более информативным, чем в приведенном примере: в него включаются все параметры, с которыми скомпилирован FFmpeg. Но главное – присмотреть за строками, начинающимися со ‘Stream’. В них приводятся подробные сведения о видео- и аудио-потоках, содержащихся в исследуемых файлах.

Скорая помощь

Фанатам объемного звучания следует устанавливать в своих настройках максимальное значение -C, чтобы не посрамить свою аппаратуру.

Эти сведения необходимы для правильного кодирования информации. Иногда файлы можно кодировать как есть, иногда лучше перевести в другой формат. Необходимо выработать привычку выяснять сведения о файлах перед тем, как передавать их в кодировку.

Расчленение видео

Топор нам не понадобится, но суть процесса примерно такая же. Львиную долю моих загрузок с YouTube занимают гоночные репортажи. Будучи автоманьяком, я обожаю слушать рычание приемистого двигателя, когда болид резко замедляется перед крутым поворотом, а после пилот снова перебирает передачи снизу доверху. Экран при этом только отвлекает. В MPlayer видео выключается легко (-vo null). А если охота послушать аудиодорожку на iPod (или другом аудиоплейере)?

В таком случае просто извлеките аудиосоставляющую из видеофайла с помощью FFmpeg. Сначала получим данные о файле и определим параметры звуковой дорожки. Допустим, у нас есть FLV-ролик под названием mcrae.flv, звук в котором идентифицируется как 'Stream #0.1: Audio: mp3, 44 100 Hz, stereo, s16, 80 kb/s'.

Давайте извлечем его:

$ ffmpeg -i mcrae.flv -vn -acodec copy mcrae-subaru.mp3

Переключатель -vn ясно выражает наши намерения: FFmpeg незачем утруждаться с видео. Затем мы указали ему copy, предписав кодировать файл с помощью того же кодека, которым он раскодируется. Для упрощения задачи частоту дискретизации и битрейт оставим без изменений.

Сейчас многие учебные заведения размещают в Сети видеолекции, и нашу технологию можно использовать для извлечения из этих лекций звуковой информации. Можно даже извлечь аудио из AVI с высококачественной звуковой дорожкой, и закодировать его с расчетом на прожиг аудио-CD. Только проследите, чтобы полученный аудиофайл соответствовал требованиям спецификаций, приведенных в стандарте Красной книги [Red Book]:

$ ffmpeg -i burns.avi -vn -acodec pcm_s16le -ar 44100 -ac 2 burns.wav

Будет получена несжатая двухканальная аудиозапись с 16-битным качеством и частотой дискретизации 44 100 Гц.

Можно извлечь видео из FLV или другого видеофайла:

$ ffmpeg -i mcrae.flv -an -vcodec copy mcrae-mute.flv

Параметр -an – это противоположность -vn: наказ FFmpeg игнорировать аудио. И вновь мы применили copy, чтобы избежать мороки с кодеками.

Заявить о себе

Скорая помощь

Подробный вывод сведений о FFmpeg поможет решить еще одну задачу: узнать, поддержка каких кодеков была установлена при компиляции.

Давно ли вы брались за видеокамеру, думая, что снимаете захватывающий сюжет, достойный выгрузки на YouTube? Ну, если камера это допускает. Если нет, на помощь придет FFmpeg: он позволяет доработать видео с учетом ограничений YouTube.

Моя камера записывает видео в формате MPEG. Для выгрузки на YouTube я конвертирую его так:

$ ffmpeg -i MOV0010.mpg -ar 22050 -acodec libmp3lame -ab 32K -r 25 -s 320x240 -vcodec flv throwing-nuts.flv

Здесь мы кодируем MPEG с помощью кодека FLV, как того требует спецификация YouTube. Кроме параметров аудио, рассмотренных выше, тут множество новых ключей. Например, -r задает частоту кадров для видео. Это значение равно либо 25 для PAL, либо 29,97 для NTSC – в зависимости от региона, где вы находитесь. Наконец, разрешение мы установили 320 × 240 – как положено на YouTube. Подобную конверсию можно проделать для любого видеохостинга, зная его требования.

Еще один интересный переключатель – -t, он ограничивает продолжительность фрагмента. Например, в случае -t 10 закодируются первые 10 секунд. Можно перейти к указанному моменту времени в файле переключателем -ss и задать время кодирования, начиная с этой точки. Например:

$ ffmpeg -i MOV0010.mpg -acodec copy -r 25 -s 320x240 -vcodec flv -ss 00:10:00 -t 128 throwing-nuts.flv

Здесь кодируется 128 секунд видео, опуская первые 10 минут. Время для -t, и для -ss можно задавать либо в секундах, либо в формате чч:мм:сс (что удобно, если вы не любитель умножать на 60).

Если вас больше заботит объем файла, чем продолжительность ролика, можно воспользоваться параметром -fs и указать размер в байтах. Например, -fs 10485760 создаст видеофайл размером 10 МБ.

Имейте в виду, что -fs – не волшебное заклинание и не возможность упаковать весь файл в заданный объем. Этот ключ используется лишь затем, чтобы не превысить установленный вами предел. Процесс кодирования прерывается сразу по его достижении, а остаток пропадает.

Развиваем успех

Доработка видео для Интернета – одно дело, подготовка для телевещания – совсем другое. Это гораздо проще.

Если вы живете в стране с PAL-стандартом, сделайте так:

$ ffmpeg -i my-vid.avi -target pal-vcd audition.mpg

Вот и все. Строка -target pal-vcd сделает всю черную работу (как то: установит битрейт и задаст кодек) за вас. Существует множество готовых целевых форматов, например, NTSC DVD или заурядные VCD, DVD, DV и пр. Пригодится также для обмена отпускными репортажами или семейным видео.

При кодировании видео необходимо учитывать еще один фактор: соотношение сторон. Моя камера записывает в стандартном 4:3 и широком 16:9 форматах. Формат 4:3 дает запись с разрешением 320 × 240. Можно попытаться подогнать разрешение параметром -s, рассмотренным выше, но тогда у вас круглолицый человек будет выглядеть яйцеголовым.

Скорая помощь

Чтобы нарезать MPEG или AVI на кусочки для удобства передачи, подойдут специализированные программы вроде mpgtx или Avisplit.

Другой вариант – пожертвовав несколькими битами изображения, подогнать разрешение как можно ближе к 16:9. Например, 320 × 240 необходимо переработать следующим образом: 320 × [320/(16/9)], или 320 × 180. Это означает, что придется срезать лишние 60 пикселей, например, так:

$ ffmpeg -i centre.mpg -croptop 30 -cropbottom 30 -padtop 30
-padbottom 30 -padcolor 000000 -target ntsc-dvd centre-dvd.mpg

Эта команда уберет по 30 пикселей сверху и снизу, заменив их черными полосами. Цвет полос задается шестнадцатеричным числом (аналогично используемым HTML). Конвертировать 16:9 в 4:3 можно, убрав лишнее справа и слева параметрами -cropright и -cropleft.

Самопальная синхронизация

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

$ ffmpeg -i break.flv -vcodec mpeg2video break-video.m2v -acodec copy break-audio.mp3

Песня уже знакомая. Мы получим два отдельных контейнера: аудио и видео. Для внесения сдвига воспользуемся параметром -itsoffset. Чаще всего речь идет о миллисекундах, но для наглядности я предположу, что аудио отстает от видео на 10,2 секунды, и выстрел злодея из предыдущей (батальной) сцены некстати заменяет реплику героя в следующей (любовной).

$ ffmpeg -i break-audio.mp3 -itsoffset 00:00:10.2 -i break-video.m2v bugle-still-dies.flv

Создастся новый FLV-файл, в котором аудио записано как было, а для изображения устанавливается задержка 10,2 секунды. И наоборот, если финальная сцена напрочь испорчена преждевременной репликой героя, можно придержать спешащий звук.

Допустим, разница составляет две или три миллисекунды:

$ ffmpeg -i break-video.m2v -itsoffset 00:00:00.3 -i break-audio.mp3 no-saving-the-bugle.flv

Легко! Теперь пора навести лоск на домашние видеозаписи! LXF

Шаг за шагом: Конвертируем видео для YouTube

Шаг 1

  • 1 Linux Video Converter
    Linux Video Converter – простой скрипт, которому нужны лишь Mencoder и PyGTK+. Найдите в репозитории своего дистрибутива эту парочку и скачайте скрипт с http://rudd-o.com/new-projects/linuxvideoconverter. Разархивируйте и запустите: ./linuxvideoconverter

Шаг 2

  • 2 Выберите видео
    Используя простой интерфейс, с помощью команды Source Video File [Исходный видеофайл] укажите ролик для конвертирования. Программа основана на Mencoder и работает со всеми распознаваемыми им форматами, то есть почти с любыми

Шаг 3

  • 3 Выберите целевой формат
    В настоящее время программа конвертирует видео только для YouTube. Выберите пункт AVI For YouTube в выпадающем списке и нажмите кнопку OK. Кодированный видео-файл будет размещен рядом с исходным, с добавкой ‘converted’ к имени

Шаг за шагом: Делаем видео переносным с HandBrake

Шаг 1

  • 1 Выбор видео
    Кроме содержимого жесткого диска, HandBrake может извлекать видео с DVD. Имейте в виду, что это не риппер, поэтому не ждите от него взлома защиты. Если на вашем DVD несколько глав, то для кодирования можно выбрать любую

Шаг 2

  • 2 Предустановки
    Выделив исходное видео, можно задать преобразования в формат определенного устройства, выбрав его в списке предустановок. HandBrake содержит предустановки для большинства известных устройств, включая iPod, iPhone, PSP, Xbox, PS3 и др.

Шаг 3

  • 3 Тонкая настройка
    Назначив предустановки, можно разнообразить настройки: например, задать картинку для предварительного просмотра, выбрать аудио- и видеокодеки и контейнер. Можно оптимизировать видео под Интернет. Добавьте процесс в очередь и, собрав все конвертируемые файлы, нажмите кнопку Start [Пуск].
Персональные инструменты
купить
подписаться
Яндекс.Метрика