- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF136:Видео
Материал из Linuxformat.
- Конвертируем видео
Содержание |
Видео: Меняем формат
- Неформатное кино – это, может быть, и интересно, но только не в том случае, если вы в трансатлантическом перелете; у вас с собой пара фильмов, а смартфон их не показывает. Но с Александром Бербером такого никогда не случится.
Давайте поговорим о конвертации видео в Linux. Известный факт: для решения разных задач люди предпочитают разные способы – кто-то более простые, а кто-то те, к которым он привык. Для решения такой задачи, как конвертация видео, в Linux существует сразу несколько путей, как консольных, так и графических. В данной статье я постараюсь уделить основное внимание консольным методам конвертации.
Для решения задач конвертации видео в Linux существует два основных инструмента: это ffmpeg – утилита, входящая в состав пакета FFmpeg, и Mencoder, входящий в состав мультимедиа-плейера MPlayer, не говоря уже о множестве сторонних библиотек, которые могут быть как отдельными, так и смежными проектами; например, библиотека x264 для конвертации и воспроизведения видео в формате HD или библиотека libavcodec, содержащая большое количество популярных кодеков.
К сожалению, и графический, и консольный методы имеют свои маленькие недостатки. Скажем так, существующие графические утилиты базируются все на том же FFmpeg, однако их графический интерфейс, к сожалению, не в состоянии донести до пользователя всю безграничную функциональность этой утилиты. Консольный метод, в сущности, идеален, за исключением одного: пользователю необходимо быть знакомым с базовыми принципами сжатия/конвертации видео, существующими кодеками и форматами. Справедливым будет заметить, что для применения графических программ эти знания тоже нужны. В графических приложениях задачу пользователя могут существенно облегчить профили, в консольных программах это помогут сделать скрипты; смысл один, только завернуто по-разному.
Однако давайте не будем пугаться: не все так плохо. Навскидку, ежедневно пользователь сталкивается с набором приблизительно однотипных задач. Отсняли день рождения своей дочери на новенькую видеокамеру – перед вами встала задача сбросить записанное видео на компьютер, при этом желательно было бы его сжать: тридцатиминутный ролик может смело занять каких-нибудь 5–10 ГБ места на жестком диске, поскольку камеры не делают сжатия, а записывают как есть, в так называемом формате RAW [англ. «сырой»] (или, на худой конец, в MP2). Или, например, захотелось скинуть новый фильм или видеоклип на свой iPhone, чтобы посмотреть в дороге. А может, вы приверженец свободных форматов, таких как OGG и OGV, и вам непременно нужно, чтобы ваши аудио- и видеозаписи хранились именно в них. Или же вы предпочитаете смотреть любимые фильмы в формате HD. Все эти задачи можно без труда решать в консоли.
FFmpeg и Mencoder
Теперь давайте попробуем немного разобраться в том, что такое FFmpeg и Mencoder. Не станем создавать интригу: FFmpeg – это пакет, изначально разрабатываемый только для платформы Linux, состоящий из целого набора свободных библиотек, создателем которого является некто по имени Фабрис Беллар [Fabrice Bellard].
FFmpeg (Fast Forward MPEG) состоит из следующих компонентов: ffmepg, ffserver, ffplay, libavutil, libavcodec, libavformat, libavdevice, libswscale. В рамках данной статьи нет необходимости описывать возможности и функционал каждого компонента в отдельности: достаточно остановиться на интересующей нас утилите ffmepg, с помощью которой и производится преобразование видео- и аудиофайлов из формата в формат. Второй интересный нам компонент – библиотека libavcodec – содержит всевозможные аудио- и видеокодеки; часть из них была написана командой разработчиков FFmpeg фактически с нуля.
Как вы уже догадались, FFmpeg позволяет записывать, конвертировать, передавать и захватывать цифровое видео и аудио. FFmpeg работает практически со всеми известными ныне видео- и аудиоформатами. Просмотреть список кодеков и форматов более подробно вам поможет команда:
# ffmpeg -formats
Для установки данного пакета в Debian-ориентированных дистрибутивах, таких как Ubuntu, Debian и Linux Mint, достаточно набрать в Терминале:
# sudo apt-get install ffmpeg
Компиляция ffmpeg из исходных кодов позволит вам иметь последнюю, ночную сборку, с исправленными ошибками и полезными дополнениями, но в дальнейшем лишит вас возможности автоматического обновления. Установка ffmpeg из исходных кодов – процесс кропотливый, но при необходимости вы, к примеру, можете собрать себе ffmpeg с поддержкой библиотеки x264, что позволит вам кодировать видео высокой четкости.
MEncoder (MPlayer Media Encoder) – это часть проекта MPlayer. MEncoder предназначен для обработки и конвертирования видео из одного формата в другой. Как и FFmpeg, он обладает огромным количеством опций, прекрасно задокументирован – чего стоит только man в семь с половиной тысяч консольных страниц на русском языке – и, как и FFmpeg, имеет большое количество графических оболочек.
Разработчики позиционируют MEncoder как «простой кодировщик» всех видео- и аудиоформатов, поддерживаемых и проигрываемых самим MPlayer, а это уже означает, что назвать Mencoder «простым кодировщиком» могли только его разработчики. Вот только некоторые из поддерживаемых им разновидностей видео: MPEG/VOB, AVI, ASF/WMA/WMV, RM, QT/MOV/MP4, Ogg/OGM/Ogv, MKV, VIVO, FLI, NuppelVideo, yuv4mpeg, FILM, RoQ, H.264. Поддержка необходимых кодеков может обеспечиваться подключением библиотеки libavcodec.
Для установки MEncoder в Debian-ориентированных дистрибутивах, таких как Ubuntu, Debian и Linux Mint, используйте следующую команду:
# sudo apt-get install mplayer
Для сборки из исходных кодов обратитесь за помощью на сайт http://www.mplayerhq.hu.
Конвертируем видео
Вот мы и приблизились к самой интересной части нашего повествования. Я отобрал наиболее полезные (на мой взгляд) и часто встречающиеся примеры, конечно, руководствуясь при этом собственным опытом работы с видео и исходя из тех задач, которые приходится решать повседневно.
Одним из факторов успешной работы с вышеописанными утилитами является понимание того, что делаешь, поэтому я остановлюсь на каждой из приведенных команд в отдельности и постараюсь уделить внимание каждому флагу и каждой опции. Конечно, может случиться так, что вы не найдете ниже примера, который искали, но так уж получилось, что работа с утилитами ffmpeg и mencoder напоминает работу с конструктором, где вам дано много-много составляющих, и всё, что от вас требуется – это правильно соединить их для достижения желаемого результата. Изучив базовые ключи и флаги, а также разобравшись, какие кодеки для чего используются, вы сможете без труда конвертировать любой формат видео.
Из OGV в AVI
Итак, давайте приступим. Одним из наиболее востребованных примеров является конвертирование видео после его захвата с рабочего стола пользователя в Linux. Как правило, для таких целей используют популярную утилиту вроде gtk-RecordMyDesktop, которая дает на выходе файл в формате OGV, сжатый кодеком Theora. После того, как вы запишете видео, вам, скорее всего, захочется выгрузить его куда-нибудь на YouTube, Vimeo или RuTube, но ни один из этих сервисов не поддерживает относительно редкий Theora. Иными словами, после загрузки видео на хостинг вас будет ожидать разочарование: ролик не воспроизведется ни на одной из вышеперечисленных видеоплощадок.
Для решения этой проблемы необходимо воспользоваться утилитой mencoder, которая и приведет наш ролик к «доступному» для видеохостингов виду. Для сохранения видеопотока лучше всего использовать популярный видео кодек mpeg4, а для звука – mp3lame. Наберите в консоли
# mencoder input_file.ogv -vf scale=848:528 -o output_file.avi \ -oac mp3lame -lameopts fast:preset=standard -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=4000
Для начала стоит выделить наиболее важные опции. Как вы уже догадались, input_file.ogv – это входной, а output_file.avi (аргумент опции -o) — выходной файл. Опция -vf scale поможет вам установить требуемое разрешение; если вы хотите оставить то же разрешение, что и у входного файла, просто пропустите ее.
Следующий, не менее важный параметр – -oac (output audio codec). Он задает аудиокодек, который будет использоваться для сжатия звуковой дорожки. Если в видео отсутствует звук, то опять-таки можно пропустить этот момент. Аналогично, опция -ovc (output video codec) предписывает кодировать заданным видеокодеком (здесь это lavc, означающий, что кодек будет взят из библиотеки libavcodec). -lameopts задает специфичные для каждого отдельного кодека опции кодирования. Мы указали переключиться на быстрое кодирование (fast), с предустановленной стандартной настройкой (standard). Опций для каждого отдельного кодека параметров великое множество, поэтому мы не станем вдаваться в подробности каждого из них. Опция -lavcopts задает параметры кодеков из libavcodec: здесь мы выбираем mpeg4 (как вы помните, libavcodec реализует самые разные кодеки, так что это указание будет не лишним). Последняя (но не по значимости) опция vbitrate указывает битрейт видео; по умолчанию он равен 800 кбит, мы указали для своего видео 4000 кбит. Эта же команда может выглядеть вот так:
# mencoder foo.ogv -vf scale=848:528 -o foo.avi \ -lameopts fast:preset=standard -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=4000 acodec=mp3lame:abitrate=2000
где мы вынесли параметр acodec за ключ -lavcopts с целью кодирования всего потока при помощи семейства кодеков libavcodec. В итоге вы получите файл, готовый к выгрузке на любой из доступных видеохостингов или для просмотра с помощью медиа-проигрывателя.
Кино для iPhone
В предыдущем примере мы научились конвертировать формат OGV в формат AVI и подробно разобрали используемые при кодировании опции, многие из которых мы будем использовать и в последующих примерах. Теперь давайте попробуем сконвертировать видео для вашего iPhone/iPod/iPad. Эти устройства сейчас очень популярны, и многим, думаю, хотелось бы иметь способ без проблем переконвертировать любимый клип или фильм в формат, понятный iPhone/iPod/iPad, загрузить его и наслаждаться.
Сперва давайте посмотрим, какой же формат понятен устройствам от Apple, а также – каким кодеком пережимать и какое разрешение использовать для видео. Начнем с кодека: устройства отлично читают файлы, обработанные кодеками MPEG4 или H.264, для звука необходимо использовать алгоритм кодирования аудио AAC. При этом форматы должны быть только .m4v, .mp4 или .mov.
Для устройств iPhone и iPod Touch идеально подходит разрешение 320 × 480 или 240 × 320. Стоит заметить, что на iPhone 4 поддерживается разрешение 640 × 960 при 30 кадрах в секунду, но, конечно, иногда всеми этими параметрами можно слегка пренебречь с целью экономии места в телефоне или плейере.
Команда для конвертирования AVI-файлов в MP4 будет такая:
# ffmpeg -i input_video.avi -acodec aac -ab 160kb -vcodec mpeg4 \ -b 1600kb -mbd 2 -cmp 2 -subcmp 2 -s 480x320 final_video.mp4
В данном случае мы с вами применяем для кодирования утилиту ffmpeg, а не mencoder, но разница невелика: в большинстве случаев обе они пользуются услугами библиотеки кодеков libavcodec. Теперь давайте рассмотрим наиболее важные из параметров и опций. Ключ -i указывает на входной файл. Параметр -acodec нам уже знаком, и, как было сказано выше, в качестве звукового кодека я установил AAC с битрейтом 160 кбит. Параметр -vcodec тоже знаком нам с предыдущего примера: в качестве видеокодека выбран незаменимый mpeg4 c битрейтом 1600 кбит в секунду. И, наконец, -s – разрешение видео; для своего iPhone я взял 480 × 320.
Не могу не упомянуть, что в идеале в качестве кодека для кодирования необходимо было бы указать libx264, для чего нужно иметь в системе FFmpeg, собранный с поддержкой x264. В репозиториях обычно находится версия FFmpeg без x264, поэтому, если вы захотите иметь FFmpeg с поддержкой библиотеки программных компонентов для кодирования видеопотоков H.264 x264, вам придется собирать ее вручную из SVN.
Видео с камеры
Пример, не менее популярный, чем два предыдущих – конвертирование видео, записанного на фото/видеокамеру в формате AVI. Большинство камер сохраняют видеоролики в формате MOV с весьма слабым сжатием. Например, у меня 33‑секундный ролик занял 44,1 МБ места. Если же вы любитель снимать видео, то понятно, что если вы не будете пережимать отснятое, а оставите его в «сыром» виде, даже ваш 2‑ТБ винчестер очень скоро закончится.
Для этого мы снова прибегнем к помощи mencoder:
# mencoder MVI_1968.MOV -vf scale=720:304 -o movie.avi -oac mp3lame -ovc lavc vbitrate=4000kb
или, в более высоком качестве,
# mencoder input_file.MOV -vf scale=720:304 -o output_file.avi -oac faac -ovc x264 vbitrate=4000kb
Все использованные в примере выше параметры вам уже хорошо знакомы. Могу только пояснить, что в качестве звукового кодека я использовал AAC, а в качестве видеокодека – H.264.
MEncoder может поступать с исходными дорожками двумя разными путями: перекодировать их или просто копировать. Поэтому, если вы хотите сохранить исходное качество видео или аудио, то с параметрами -oac и -ovc стоит использовать copy. Взгляните на коротенький пример ниже:
# mencoder -i input_file.avi -ovc copy -oac copy -o output_file.avi
Также, чтобы знать, какие кодеки есть в распоряжении mencoder (именно в mencoder, а не в сторонней библиотеке libavcodec, которую мы так часто любим использовать), нужно просто ввести в терминале команду
# mencoder -ovc help
для исходящего видеокодека (output video codec), и команду
# mencoder -oac help
для исходящего аудиокодека (output audio codec).
Если по каким-то причинам ffmpeg вам более по душе, чем mencoder, вы можете перекодировать коллекцию вашего видео, используя команду:
# ffmpeg -i input_file.MOV -s 1440x900 -b 4000kb -vcodec mpeg4 -acodec libmp3lame -f avi output_file.avi
Немного об опциях. -s, как вы уже, наверное, догадались – это разрешение видео, -b — это видеобитрейт, -i – исходный файл, -f — файл, который мы получим после того, как команда отработает.
На мой взгляд, ffmpeg лучше справляется с задачей конвертирования MOV-файлов в «нормальный» AVI, чем mencoder, но это сугубо мое мнение.
И еще одно. Как я писал выше, у вас на жестком диске может быть целая коллекция файлов, отснятых за прошлый год или на выходных – не пережимать же вам каждый файл отдельно, вбивая в опцию -i название каждого следующего ролика! А если у вас их пара сотен? Вы быстро устанете. В данном случае лучше всего будет использовать простенький скрипт, который поможет вам сэкономить время и избавит от нудной работы.
#!/bin/bash #MOV to AVI for mov in *.MOV; do avi=${mov//.MOV/.avi} [ -f “$avi” ] || ffmpeg -i “$mov” -s 1440x900 -b 4000kb -vcodec mpeg4 -acodec libmp3lame -f avi “$avi” done
Сделайте его исполняемым командой chmod +x convert.sh, а далее запустите его в директории, где накопились горы ваших видеофайлов в формате MOV:
# sh convert.sh
Если в качестве дистрибутива Linux вы используете Ubuntu, то запускать скрипт следует немного по-другому:
#./convert.sh
Это объясняется тем, что Ubuntu в качестве оболочки по умолчанию используется dash, скрипт же написан на «чистом» Bash. К сожалению, эти две версии совместимы не на все 100 %. Впрочем, ./convert.sh будет работать в любой системе.
По окончании обработки скрипт выдаст вам готовый результат. Вы в это время можете сыграть партию в настольный теннис, особенно если файлов много. Как видите, все очень просто: одна команда – и дело в шляпе, никакой мороки с графическими приложениями. Проявив немного смекалки, вы сможете использовать этот скрипт для конвертации других форматов видео.
Обо всём понемножку
Итак, мы с вами рассмотрели самые интересные, на мой взгляд, примеры, которые стоят отдельного внимания; выучили большинство опций и научились использовать скрипт для конвертации видеомассивов. Но у меня в запасе есть еще пара-тройка примеров, которые также могут пригодиться в каждодневном использовании.
Сейчас очень популярно смотреть ролики со всем известного видеохостинга YouTube, но многим хочется не только наслаждаться ими в Сети, но и скачивать себе на компьютер для дальнейшего просмотра или же для того, чтобы скопировать ролик себе на телефон и позже похвастаться друзьям. Известно, что большинство программ, которые помогут вам скачать любимый ролик с YouTube, выдают видеофайл в формате FLV. Это не всегда удобно, и, собственно, не всегда читаемо некоторыми проигрыва телями, тем более если речь идет о телефонах или PSP. Давайте рассмотрим способ, с помощью которого мы переконвертируем противное FLV в наш любимый AVI, и для пущей верности превратим только что скачанный клип в звуковую дорожку MP3, что может пригодиться владельцам MP3‑плейеров. Хочу заметить, что случай весьма неординарный, но то, что периодически всплывают вопросы: «Как достать звуковую дорожку из видео файла?» – факт.
Я только что скачал файл Toby Keith — As Good As I Once Was.flv. Теперь давайте попробуем превратить его в AVI; с FFmepg это просто.
# ffmpeg -i input_file.flv -vcodec copy -acodec copy output_file.avi
Как видите, всё очень просто, и так как большинство роликов, скачанных с YouTube, не отличаются восхитительным качеством, я решил оставить всё как в оригинале, использовав опцию copy.
После выполнения этой команды у вас будет файл AVI, который с лёгкостью воспроизведется большинством плейеров; в том числе, такие файлы легко читаются медиа-плейерами телефонов. Если по каким-то причинам вам понадобиться переконвертировать AVI в MPG, то снова нам поможет незаменимый FFmpeg:
# ffmpeg -i input_file.flv -ab 56 -ar 22050 -b 500 -s 320x240 output_file.mpg
Кратко об используемых опциях: -ab используется для указания аудиобитрейта, стандартный битрейт равен 64 Кбит. -ar – этот параметр отвечает за частоту дискретизации звука; как вы вероятно знаете, стандартом является значение 44100 Гц. Опции -s и -i нам уже хорошо знакомы.
Ну и, наконец, сделаем из видеофайла аудиофайл в формате MP3:
# ffmpeg -i input.avi -vn output.mp3
Опция -vn отключает видеозапись при конвертации файла программой FFmpeg.
Взглянув чуть выше – а именно, на скрипт – вы можете проделать такую простую штуку: накачать видеороликов с YouTube, чуть-чуть переделать скрипт и одним движением руки перегнать их в MP3, чтобы в дальнейшем залить себе на телефон, или же переконвертировать «неудобный» формат FLV в более привычный AVI.
Думаю, теперь вы согласитесь, что конвертирование видео в Linux – не такая уж сложная задача, а если немножечко разобраться, то выяснится, что конвертировать видео и аудио в Linux – одно удовольствие при минимуме усилий. Как уже былосказано, мощь Bash поможет вам автоматизировать любую рутинную работу с вашими файлами. К тому же FFmpeg давно и активно используются для конвертации на платформе Windows. Объясняется это просто: бесплатностью и доступностью программы, при том, что качество и скорость конвертации даже лучше, чем у дорогих платных аналогов. В Linux также существуют графические утилиты, предназначенные для перекодирования видео- и аудиофайлов. Как правило, это не самостоятельные программы, а графические оболочки для всемогущего FFmpeg. Если вы заинтересованы в графических программах, то советую обратить внимание на такие приложения, как WinFF, De-Ve-De, HandBrake, Avidemux.