Видеокодирование, рабочий процесс.

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

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

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

Начнем с описания технологии в общем, а затем перейдем к подробному изучению каждого ее этапа.

Не секрет, что самые смелые решения появляются зачастую в свободнораспространяемом програмном обеспечении, так почему бы не воспользоваться этими готовыми разработками. Цепочка Virtualdub, Avisynth, ffmpeg позволяет гибко и без напряга комбинировать все самое лучшее из этих программ.

Итак, общий процесс обработки видео представлен на следующем рисунке (я не художник, поэтому нарисовал, как мог):


процесс видокодирования
1-й этап: редактор (любой, например, Virtualdub)
2-й этап: Frameserver
3-й этап: Avisynth
4-й этап: кодирование видео

Теперь поподробнее про каждый этап.

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

Первый этап — это видеоредактор. В видеоредакторе вы склеиваете ролики, накладываете текст, делаете переходы между клипами и так далее. То есть, занимаетесь обычным редактированием. Главное требование к видеоредактору — это поддержка фрэймсервера.
Второй этап — здесь начинает работать фрэймсервер. Что такое фрэймсервер и для чего он вообще нужен? Попытаюсь объяснить на пальцах. Допустим вам надо передать видео поток (вместе с аудио потоком) из одной программы в другую. Ну например, в одной программе вы добавили текст и переходы, а в другой программе хотите почистить видео от шумов. Как это сделать? Есть простой способ, результат работы первой программы записать в один файл (скажем в avi), затем запустить вторую программу, открыть только что созданный файл и почистить его от шумов. Прекрасно, именно так и можно сделать. Но появляется одно «но», тот самый промежуточный файл является результатом кодирования первой программы, то есть он был сжат каким-нибудь кодеком и качество видео в нем изменилось не в лучшую сторону от оригинала. да потом вы откроете его во второй программе и еще раз запишете на диск (повторное кодирование) и еще раз внесете искажения. То есть вариант с промежуточным файлом хорош из-за его простоты, но накладывает сильные ограничения на качество закодированного видео. Но некоторые воскликнут «Постойте! А как же losless кодеки?» И будут правы. И вот в чем. После работы первой программы результирующий файл надо создавать не с помощью xvid или h264 кодека, а с помощью кодека, который записывает изображение на диск без потери качества (losless). Таких кодеков существует много и вы можете выбрать любой для себя. Но эти кодеки имеют одно ограничение, размер создаваемого файла просто огромен, ведь данные пишутся фактически без сжатия. И вся возня с этими файлами размером в десятки гигабайт отобьет всю охоту заниматься созданием фильмов. «Так что же делать?» спросите вы, если оба метода вообщем-то неприменимы на практике, за исключением редких случаев. Выход есть. И это — фрэймсервер. Данные между приложениями при использовании фрэймсервера передаются не через диск (выше я уже объяснил, что это такое), а напрямую через память компьютера или даже по сети. На диск почти ничего не пишется (за исключением нескольких килобайт служебной информации) все сразу передается в другую программу. Самым популярным является <ahref=http://www.debugmode.com/frameserver/>DebugMode фрэймсервер. Он поддерживает большинство видеоредакторов и с его установкой никаких проблем не возникает. Далее на примере Sony Vegas я покажу, как использовать фрэймсервер. Допустим вам надо передать отредактированное видео в другое приложение, все что вам нужно сделать это выбрать в качестве кодека DebugMode Frameserver. Далее, когда запустите процесс кодирования появится диалог, в котором нужно сделать настройки параметров кодека. Поставьте YUY2 и нажмите кнопку «Next».



Диалоговое окно DebugMode Frameserver

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



Результат работы фрэймсервера

Список видеоредакторов поддерживающих Debugmode frameserver:
Sony Vegas Pro
Adobe Premiere Pro
Ulead MediaStudio Pro
Ulead VideoStudio
Pure Motion EditStudio
Я думаю этого вполне достаточно.

Третий этап. Здесь у нас работает Avisynth. Бесплатная программа, для которой написаны сотни различных плагинов и фильтров, позволяющих вытворять с видео потоком все что вам захочется. Очень мощная программа. Я пользуюсь этой программой для фильтрации видео от шума и для деинтерлейсинга, а так же для удвоения частоты кадров. Avisynth не является программой в обычном понимании. У нее нет интерфейса к которому мы привыкли. Запускается Avisynth посредством текстового файла, в котором находятся команды по обработке видео. На первый взгляд неудобно, но потом привыкаешь и проникаешься мощью этого продукта. Например, на следующей картинке представлен Avisynth скрипт с помощью, которого я осуществляю фильтрацию шума и деинтерлейсинг. Всего несколько строк, но зато каков результат.



AVISource(«c:\debugmodeframeserver\sv.avi»)
Так как же Avisynth понимает, с каким видео ему нужно работать. Да очень просто. В первой строчке скрипта я указал взять ему файл sv.avi, который в свою очередь является результатом работы фрэймсервера. Видите как начинает выстраиваться цепочка? Подробнее о работе Avisynth я остановлюсь позднее, а здесь пока ограничимся тем, что это программа подхватывает выход с фрэймсервера и все.

Четвертый этап — непосредственно кодирование. Отредактировав видео в редакторе, прогнав через фрэймсервер и отфильтровав в Avisynth, видео теперь необходимо закодировать в нужный нам формат, чтобы затем просматривать его на нужном вам устройстве. Вот этим мы и будем заниматься на этом этапе. Для кодерования видео и аудиопотока вы можете выбрать любую программу, главное, чтобы она поддерживала Avisynth файлы. Навскидку я назому четыре: mencoder, ffmpeg, x264, VirtualDub. Может быть их больше, но для наших целей вполне достаточно и этих. Первые три — это консольные программы (программы запускающиеся из командной оболочки), последняя — это мощнейший видеоредактор, который кодирует встроенными в систему кодеками, впрочем, как и все видеоредакторы. На этапе кодирования нам нужно подхватить видео с Avisynth. как это делается? Тоже с помощью текстового файлика с простым набором команд. Итак, в нашей рабочей директории, наряду с sv.avi и videofilter.avs, появляется третий файлик xvid.bat, содержание, которого приведено на следующей картинке.



Это обычный windows bat-файл в котором вызывается кодировщик mencoder.exe с кучей разных параметров. Этих параметров настолько много, что объяснять я их сейчас не буду, скажу только, что они были подобраны для достижения наилучшего качества видео. После окончания работы кодировщика в рабочей директории появится еще один avi файл, который и будет результатом наших трудов 🙂 А как же запускается вся эта цепочка команд? Что нужно нажать, чтобы получить результат? Спросите вы. Да все очень просто. Начинать нужно с конца, как это не парадоксально звучит. Нужно запустить xvid.bat. Затем он потянет Avisynth скрипт, тот в свою очередь обратится к фрэймсермеру за порцией видео, а фрэймсервер попросит видеоредактор это видео отдать. Все закрутилось-завертелось.

Ссылки для скачивания необходимого софта:
1. Видеоредактор Sony Vegas пробную версию можно скачать здесь: http://www.sonycreativesoftware.com/download/trials/vegaspro.
2. Debugmode Frameserver — бесплатный продукт качаем отсюда: http://www.debugmode.com/frameserver/
3. Avisynth — тоже бесплатен, забираем здесь: http://sourceforge.net/projects/avisynth2/files/AviSynth%202.5/
4. Кодеры:
mencoder — http://oss.netfarm.it/mplayer-win32.php
FFMpeg — http://ffmpeg.zeranoe.com/builds/
x264 — http://mirror01.x264.nl/x264/32bit/8bit_depth/

Почитать еще