Сжатие видео в Virtual Dub

http://vangers.bilakaifa.com/

Модератор: [W]Dimon

Ответить
Аватара пользователя
[W]D3NL
Game Master
Сообщения: 751
Зарегистрирован: Сб окт 19, 2002 2:39 pm
Откуда: Kazan

Сжатие видео в Virtual Dub

Сообщение [W]D3NL » Ср авг 16, 2006 9:39 pm

Сжатие полученного видео в Virtual Dub

Данная статья написана для сжатия видео полученного из Вангеров, поэтому в качестве примера везде рассматриваются они, но в принципе в данном руководстве описываются базовые возможности Virtual Dub'а и они подходят для сжатия и редактирования любого видео.

Сжимать видео можно в различных программах и различными кодеками, но поскольку нам необходимо сжать уже готовый AVI файл, а не .vob, .mov или какие-нибудь другие форматы, то проще всего воспользоваться Virtual Dub’ом. Кодек же возьмём ON2 VP6. Он разрабатывался изначально для сжатия видео с низким битрейтом для передачи видео по интернету, и он значительно лучше, чем DivX и др. В принципе описываться будет в основном Virtual Dub, так что вы сможете воспользоваться любым кодеком на своё усмотрение.

1) Установка
Скачиваем , разархивируем, запускаем, соглашаемся с лицензионным соглашением.
2) Открытие файла
Дальше открываем наш файл, полученный в Catch3D: File\Open Video File или просто нажимаем Ctrl-O. Вы увидите два окошка рядом, слева – исходное изображение, справа – с учётом применённых фильтров. Если какое-либо окно не отображается, то проверьте, стоят ли галочки в Options\Display input video и Display output video. Тут же можно поменять эти панели местами Option\Swap input/output panels. Это может быть очень полезно, если у вас низкое разрешение экрана, или высокое разрешение исходного видеоматериала, вообщем если оба окна не умещаются на экране, а более важно для нас именно output panel, так как нам важен выходящий видеоряд. Также можно включить Options\Vertical display, потому что разрешение видео по вертикали обычно меньше чем по горизонтали (пропорции от 4:3 (монитор) до 16:9 (широкоформатное видео) и более).
Ниже под окошками находится ряд кнопок для навигации по видео:
1 – Стоп.
2 – Проигрывать необработанный (входящий) видеопоток.
3 – Проигрывать обработанный (с учётом применённых фильтров) видеопоток.
4 – Перейти в начало ролика.
5, 6 – перейти к предыдущему/следующему кадру.
7 - Перейти в конец ролика.
8, 9 – перейти к предыдущему/следующему ключевому кадру (keyframe).
10, 11 – отметить начало/конец выделения. Необходимо для вырезания ненужных частей ролика.

3)
Если вы хотите сжимать видео в оригинальном разрешении и с очень хорошим качеством (для Вангеров это будут разрешения 640х480 или 800х600), то вам не нужно возиться с фильтрами, поэтому можете переходить сразу к пункту <5>. Но вам придётся ставить на такое разрешение очень большой битрейт, особенно с учётом того, что в Вангерах очень много движущихся объектов, точнее во время движения там двигается вся поверхность, к тому же перемещаются всякие мелкие объекты: бибы, рои и др.
Так имеет смысл сжимать для домашнего хранения и/или записи на СД/ДВД диск.
4) Уменьшение разрешения (ресайзинг)
Если вы хотите сжать видео для того, чтобы выложить в интернете для всеобщего ознакомления, то имеет смысл уменьшить разрешение, или даже обрезать лишние участки, оставив только мехос по центру и некоторую достаточную область вокруг него. Например, вы хотите показать выполнение какого-то трюка, в котором не нужна большая область обзора, или то как в вас кто-то врезался и взорвал ;).
Для этого зайдите в Video\Filters (Ctrl-F). Там нажмите Add… и откроется список установленных фильтров. Для наших целей хватит внутренних фильтров, хотя вы можете установить дополнительные для различных целей и эффектов, просто скопировав их в папку …VirtualDub\Plugins.
Из списка фильтров выберите null transform [internal] и нажмите Ок. Теперь вы увидите этот фильтр в списке выбранных. Выделите его и нажмите Cropping… Откроется окно, где вы увидите своё видео. Тут можно перемещаться по видео и обрезать края. Это делается изменением значений X1, X2, Y1, Y2 offset либо вручную, либо стрелочками. Также можно просто взять за края и потянуть их, а потом подкорректировать вручную.
Для видео из Вангеров можно обрезать панель справа, где карта и др. Потому что карта будет забирать битрейт, а большой необходимости в ней нет, так как каждый Вангер должен знать все миры наизусть ;).
Теперь надо уменьшить разрешение. Выберите resize [internal], откроется окошко, где нужно задать новое разрешение и filter mode. Советую ставить по максимуму Lanczos3, чтобы было более качественное получаемое изображение. Nearest neighbor даёт на наклонных прямых линиях очень сильную “лесенку” (как в 3Д играх на низком разрешении), чем более сложный метод “ресайзинга”, тем лучше будет изображение, но тем медленнее будет работать фильтр (но фильтр будет работать только один раз (или два при двухпроходном кодировании), а смотреть ваше видео скорее всего будут много раз.)
ВАЖНО: Необходимо при изменении разрешения делать его кратным 16, для избежания возможных проблем с проигрыванием. Также следите, чтобы пропрции оставались примерно такими же, как и в оригинале. Т.е. если вы не обрезали края, то 4:3, или же те, какие получились после обрезки. Расчёт разрешения (а также и битрейта) можно выполнять при помощи программки AdvBitrateCalc .
Для выкладывания в интернет вполне достаточно разрешения 400х304, 320х240 или около того. (Справка: На качественном ДВД видео записано в разрешении 720х576 или 720х480, в сжатых DivX фильмах обычно 512х288, в “супер” сборниках N фильмов на (где N>4) вообще 352х192).

5) Вырезание ненужных частей:

а) Для этого необходимо установить ползунок на начало участка, который вы хотите вырезать. Это можно сделать мышью, подкорректировать стрелочками покадрового воспроизведения, а также перейти непосредственно на нужно место нажав Ctrl-G и выбрав точный номер кадра или время.
б) Нажмите Home или кнопку [10], чтобы отметить начальный кадр выделяемого участка, потом также перейдите на конец нужного участка и нажмите End или кнопку [11]. У вас выделиться кусок видео от начального выделенного кадра, до конечного. Нажав Delete выделенный участок можно удалить.
Примечание: Если вы вырезаете куски из материала пожатого DivX, VP6, XviD и другими кодеками, которые создают keyframe’ы и дельта-кадры, то желательно для большей точности устанавливать границы вырезаемых кусков именно на ключевых кадрах.
ВНИМАНИЕ!!! Если вы будете вырезать какие-либо части, то необходимо проследить, чтобы открываемый файл был уже со звуковой дорожкой (если она вообще есть), и чтобы стояла галочка Audio\Source audio. Тогда звук корректно вырежется вместе с видео. Если у вас звуковая дорожка лежит в отдельном файле, то тогда надо выбрать Audio\WAV audio… причём ДО вырезания кусков, тогда при сохранении видеофайла все будет нормально. Иначе можно получить рассинхронизацию, то есть звук не будет соответствовать действию на экране.

Дополнение: Настройки кодеков можно сохранить в конфигурационный файл и потом загружать для других видефайлов. Это делается через File\Save processing settings... (Ctrl+S). Но в этом случае сохраняться ТОЛЬКО настройки фильтров, звука и кодека. Если вы хотите сохранить настройки редактирования (то что вы вырезали), то при сохранении настроек надо поставить галочку на Include selection and edit list. Тогда после загрузки того же файла и настроек вы сможете продолжить редактирование с того места, где остановились.

6) Сжатие звука
Сжать звуковую дорожку можно как в VirtualDub’е, так и внешними кодеками. Если вы хотите использовать внешние программы, то тогда сначала сожмите видео (+см. п.5б и п7), потом откройте получившийся файл в Dub’е и выберите File\Save WAV… Вы получите звуковой файл вашей дорожки. Теперь его можно обрабатывать в любых программах, но необходимо сохранять его длину, иначе при обратной склейке получиться рассинхронизация.
Для начала проще всего сжать звук вместе с видео прямо в VirtualDub’е. Поставьте Audio\Full processing mode и выберите Audio\Compression. Здесь выберите нужный кодек (обычно делают mp3 и в левом окошечке нужный формат. Для интернета можно поставить битрейт поменьше (от24 до 64 kbps) и моно. Главное чтобы было слышно, фон какой-никакой был.
Примечание: Если вы используете программу Teamspeak одновременно с захватом, то звук будет писаться через микрофон, и все ваши разговоры тоже запишутся. В таком случае имеет смысл звук убрать совсем. Просто выберите Audio\No audio. Или отключить запись звука в самой программе Catch3D.
Если вы захотите сжимать звук отдельно, например с помощью Lame для получения VBR mp3, то для прикрепления получившегося *.mp3 файла к AVI вам понадобится NanDub или VirtualDubMod. Так как сам VirtualDub с мп3 файлами не работает. Я бы посоветовал использовать NanDub, так как в VirtualDubMod’е при VBR MP3 иногда получалась рассинхронизация звука с изображением.

7) Сжатие видео:
Когда всё готово – наложены нужные фильтры, вырезаны лишние куски, необходимо выбрать кодек для видео. Заходим Video\Compression (Ctrl+p) и выбираем VP62® Heightened Sharpness Profile. Жмём Configure.

Настройки кодека:
а) Bitrate: это количество информации в секунду выделяемой на видеопоток, от него зависит качество и размер получаемого файла. Чем выше битрейт, тем лучше качество, но и больше размер файла. В этом то и заключается главная хитрость, умение выбрать подходящий битрейт в зависимости от видеоматериала.
Вообще считается, что 910 kbps вполне достаточный битрейт для фильмов разрешением 512х288. Если исходное изображение было качественным, без шумов, не «экранка» и применялось двух проходное кодирование с переменным битрейтом, то получается вполне хорошее качество. Хотя, конечно, все зависит от фильма. Если фильм светлый и/или с большим количеством динамичных сцен, то может не хватить, если тёмный и/или спокойный, то будет очень хорошее качество.
Применительно к Вангерам можно сказать, что изображение там сложное, много движения. Поэтому битрейт требуется высокий. Иначе будет смазываться земля, появляться много артефактов изображения.
Поэтому для личного просмотра ставьте побольше – 1500-3000 kbps. Для интернета более важен меньший размер, чем качество, главное чтобы была понятна суть. Посчитать битрейт можно при помощи программы AdvBitrateCalc . В ней можно задать длину фильма в минутах, аудиодорожку и желаемый объём готового файла, и она выдаст битрейт, или задать битрейт и она выдаст размер файла получаемый. Также с помощью неё можно считать пропорции разрешения.

Дополнение: По своему опыту говорю, что при разрешении 400х304 и битрейте около 400 kbps получатеся вполне неплохо. ПО крайней мере видно кто кого. ;) В качестве примера смотрите мой видеорепортаж с Июльских игр.

Настройки VP62 1-ый проход:
1) General:
а) Bitrate (kilobits per second) – здесь вы указываете желаемый битрейт.
б) Mode – режим кодирования. Начиная от реального времени, однопроходного и далее. Нас интересуют двухпроходные режимы. Сначала ставите Two pass – first pass. Это первый проход, при котором создаётся только файл статистики и пустой .avi. Правда к этому AVI будет приклеиваться звук, если вы для первого прохода не включите Audio/No audio. Это может быть важным при кодировании длинных роликов с несжатым звуком, так как он может занимать до 800 Мб на один час.
О втором проходе будет сказано дальше, а сейчас настройки для первого прохода.
в) End Usage – CBR – постоянный битрейт, VBR – переменный битрейт. CBR нужен в принципе только для потокового видео, если ваш файл будут смотреть прямо по интернету в реальном времени, что достаточно редко встречается, по крайней мере в России ;). Поэтому ставим VBR, так как он даёт значительно лучшие результаты. Кодек на статических сценах уменьшает битрейт на сколько возможно при сохранении определённого качества, а потом выделяет сэкономленный битрейт на сложные, светлые и динамичные сцены.
Например, если у вас в ролике будут статичные титры, неподвижные места, то на них можно будет очень хорошо сэкономить. (см. Сако 1)
г) Material – кодек умеет сжимать Interlaced видео, что может пригодиться, например, при сжатии видео захваченного с цифровой видеокамеры DV. Причём при воспроизведении он будет автоматически производить Deinterlacing, то есть убирать «гребёнку», возникающую при проигрывании interlaced видео на прогрессивном устройстве, например компьютерах.
д) Noise Reduction – удаление шума, в принципе не надо, так как захваченное из игры изображение и так чистое, а если будете жать зашумлённое видео, то лучше воспользоваться специальными фильтрами VirtualDub’а. Ставим на 0.
е) Sharpness – резкость, кодек при сжатии будет стараться сделать картинку чётче и резче, меньше «замыливать», но могут появляться артефакты сжатия. При малом битрейте ставьте 0, при большом (для вангеров >1500) можно попробовать поставить 3-5. Чем выше битрейт, тем выше можно поставить.
ё) Auto Keyframe – On (галочка должна стоять).
ж) Max Frames Btw Keys – через какое максимальное количество кадров от последнего keyframe’а кодек будет вставлять keyframe, если не было резкого изменения сцены на экране. Keyframe по сути представляет собой просто сжатый кадр, типа как JPEG. У них самое высокое качество, и остальные delta-frames зависят от них. Кажется, что надо их ставить почаще, чтобы было лучше качество, но тогда на них уйдёт много битрейта, а на дельта кадры мало, и итоговое качество будет хуже. Важно найти баланс. Иногда для коротких роликов рекомендуют ставить 999 кадов между кейфреймами, но для Вангеров эта тактика не очень подходит, так как изменений сцены тут практически нету (скроллинг при езде, картинка меняется сильно, но плавно), поэтому качество будет тоже не очень хорошее. Попробуйте поэкспериментировать. Я советую ставить от 100 до 300.

2) Advanced:
а) Undershot (%target) – какой процент от заданного битрейта берётся, как основной, а сколько процентов оставляется про запас для сложных сцен. По умолчанию стоит 90%, так и оставляйте, это значит, что основной поток будет сжиматься с битрейтом составляющим 90% от заданного, а 10% будет добавляться к сложным сценам, для улучшения их качества.
б) Adjust Quantizer – заставить кодек сжимать видео с определённым качеством (определяется квантайзерами, 1 – 100% качество и ниже). Обязательно должно быть включено, иначе получиться полный бред. Качество будет очень плохим, размер маленьким, и не будет подчиняться заданному битрейту.
Ставьте Minimum – 4, Maximum – 56. Для высокого битрейти минимальный квантайзер можно увеличить до 1, и также поднять максимальный, например до 30 или даже 20. Но нужно следить за размером итогового файла, так как если задать неправильные квантайзеры, то при заданном битрейте кодек не сможет сжать с требуемым качеством и сам увеличит битрейт, что выльется в увеличенный размер итогового видео.
в) Temporal resampling – временной «ресэмплинг», если включенно, то при недостатке битрейта выкидывает некоторые кадры, причем в инструкции написано, что выбирает какие можно выкинуть без осоього вреда, то есть которые почти не отличаются от предыдущих. Включать не советую.
г) Spatial resampling – аналогично, но снижает разрешение отдельных кадров при недостатке битрейта, причём при воспроизведении выполняется обратное увеличение. При высоком битрейте ставить не стоит, а вот при очень низком (для выкладывания в интернете) можно попробовать включить. Настройки лучше оставлять по умолчанию.

3)Settings:
Здесь можно сохранить настройки в файл, хотя предыдущие настройки кодека остаются и при следующем использовании они уже будут стоять.
Также здесь можно задать имя и место файла со статистикой 1-ого прохода. Хотя можно и не менять, а оставить по умолчанию.

Теперь нужно запустить первый проход, чтобы создался файл статистики, займёт это времени почти столько же, сколько и нормальное кодирование, так как фактически кодек и производит кодирование видео, но не выдаёт видеофайл, а просто пишет текстовой файл, где для каждого кадра записан ряд параметров. Сам *.AVI файл будет, но занимать примерно несколько килобайт (или, если вы не отключили на время первого прохода звук, будет равен размеру звуковой дорожки (см. выше)).
Итак, выбираем File\Save as AVI… (F7), пишем какое-нибудь имя файла (например temp для первого прохода) и жмём Сохранить. Теперь ждём от нескольких минут, до нескольких часов ;) пока пройдёт первый проход.
Если вы хотите отложить выполнение задачи, чтобы потом запустить сразу несколько приготовленных задач (например первый и второй проход), то нужно поставить галочку при сохранении файла Don’t run this job now; add it to job control so I can run it in batch mode. Это поставит задание на очередь в VirtualDub Job Control List. Это бывает очень удобно, когда вы уже разобрались с настройками и закончили экспериментировать, знаете какие настройки поставить, поэтому можно сразу все приготовить, а потом поставить кодировать сразу на ночь ;). Таким образом можно ставить сразу несколько файлов на обработку. Выполняться они будут по очереди, поэтому можно делать и 2-х проходное кодирование.

После того, как пройдёт первый проход и сгенерится файл статистики, необходимо изменить настройки кодека для второго прохода.
Настройки VP62 2-ой проход:

1) General:
а) Ставим Mode Two pass – Second pass – Best Quality.
Всё остальное оставляем также, как в первом проходе. Хотя можно и поменять битрейт, промежутки между ключевыми кадрами и настройки шумоподавителя и резкости, если вдруг Вас посетила новая идея насчёт размера итогового файла.
2) Advanced:
Здесь открылась секция Two Pass Section Datarate.
а) Variability – насколько кодек сможет изменять переменный битрейт. Вроде бы в процентах. По умолчанию стоит 70, я ставлю 100.
б) Min section (as % targ) – какой самый минимальный битрейт может выделяться на кадр в процентах от заданного среднего битрейта. Если в вашем материале много статичных сцен, ставьте пониже (например 10%). Это даст большую гибкость кодеку в перераспределении битрейта, хотя может ухудшить качество статичных сцен.
в) Max section (as % targ) - самый максимальный битрейт, который может выделяться на кадр в процентах от заданного среднего битрейта. Слишком много ставить не следует, иначе это может сказаться на качестве статичных сцен. Для Вангеров советую поставить 200.
3) Settings:
Здесь менять ничего не нужно, достаточно проверить на всякий случай, что файл для сбора статистики указан тот же самый, что и при первом проходе. Если нет, то можно нажать … и выбрать ваш файл.

Теперь надо включить звуковую дорожку, если вы её отключили на время первого прохода: Audio\Source Audio. Теперь звуковая дорожка будет браться из исходного видео-файла. Не забудьте включить сжатие звука (см. выше).

Теперь опять нужно также, как и для первого прохода, сохранить файл. Выбираем Save as AVI… (F7). Имя файла пишем уже окончательное и нажимаем Сохранить.
Если вы решили использовать Job Control List, то не забудьте при сохранении поставить галочку в Don’t run this job now; add it to job control so I can run it in batch mode.
Чтобы в процессе кодирования понаблюдать за статистикой выберите Options\Show status Window.

Job Control List:
Итак, вы решили воспользоваться batch mode. Это имеет смысл, когда ролик и фильм достаточно длинный и кодирование занимает много времени, либо если у вас есть много роликов, тогда можно их все поставить в очередь и запустить на кодирование потом сразу все (естественно по порядку).

Если вы, как было описано раньше, поставили галочку для batch mode, то кодирование будет отложено, а задание помещено в Job Control List. Причём в него можно помещать задания с абсолютно различными настройками фильтров, звука, кодека и т.д. Все эти данные сохраняются и при кодировании будут применяться как следует к нужным роликам. К тому же список заданий можно сохранить, и потом открыть опять, если вы случайно удалил что-либо из списка.

Чтобы попасть в Job Control List надо выбрать File\Job control… или нажать F4. Перед вами откроется такое окно <ссылка>. В нём будет список заданий с указанием исходного и целевого файла, времени начала и окончания кодирования (для уже выполненных заданий), а также статус задания.
Здесь же можно поменять очередность заданий(кнопки Move Up / Move down), отложить (Postpone), удалить (Delete), остановить выполняемое задание (Abort), и самое главное запустить выполнение заданий в очереди (Start).
После нажатия кнопки Start задания начинают выполняться по очереди сверху вниз, исключая отложенные (postponed) и выполненные (Done). Если вы хотите остановить выполнение заданий, то нажмите Stop. Если вы нажмёте Abort, то будет остановлено выполнение только текущего задания, но начнёт выполняться следующее в очереди.
Внимание!!! Остановленное задание при повторном запуске начинает выполняться сначала, поэтому не останавливайте без крайней нужды, либо когда новой задание только началось выполняться и на него потратилось еще мало времени.
Внимание 2 !!! Если вы нажали Abort, то начнётся выполняться следующее задание, при этом если вы делаете 2-х проходное кодирование, и для разных роликов у вас заданно одно и то же имя файла, то предудыщий файл статистики будет затёрт, и вы не сможете закончить второй проход, т.е. придётся повтоярть опять с 1-ого прохода.
То есть, либо внимательно следите за ОЧЕРЁДНОСТЬЮ, либо для разных роликов задавайте РАЗНЫЕ имена файлов статистики. Только не забывайте их потом стирать, после проверки полученного результата, иначе в скором времени захламите весь диск ;).
Take my love, take my land
Take me where I cannot stand
I don't care, I'm still free
You can't take the sky from me

Аватара пользователя
[m]klim
Механик
Сообщения: 1925
Зарегистрирован: Вт фев 01, 2005 11:11 pm
Контактная информация:

Сообщение [m]klim » Чт авг 17, 2006 11:47 am

Не знаю насчет ориентированности на битрейт, но мой ноут показывает сако2 с запинками. при этом любой дивыкс и двд идут нормально.
Не нервируйте меня! Мне скоро негде будет прятать трупы!
[upd] нашел новое место

Аватара пользователя
[W]D3NL
Game Master
Сообщения: 751
Зарегистрирован: Сб окт 19, 2002 2:39 pm
Откуда: Kazan

Сообщение [W]D3NL » Пт авг 18, 2006 8:04 pm

Ну не знаю, у меня все нормально смотриться. А дёргания там есть от неловкости оператора (в Сако 2) и от монтажа.

ЗЫЖ поставь в настройках кодека автокачество
Take my love, take my land
Take me where I cannot stand
I don't care, I'm still free
You can't take the sky from me

Ответить