суббота, 3 апреля 2010 г.

Как рендерить видео

Относительно недавно наткнулся на одно game-видео. Первые сомнения в том, стоит ли его смотреть, у меня возникли после того, как я увидел его параметры: разрешение 1280*820, длительность 35 минут, и при этом занимает 1.3 ГБ. Первое, что пришло мне в голову - автору было лень прочитать основы кодирования видео. Второе - автору жалко было выделить пару дней на то, чтобы нормально отрендерить свое творение. Так или иначе - было очевидно, что передо мной халява.

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

EDIT: Тут раньше было демонстрационное видео, но срок его хранения на файлообменнике истек, а, судя по количеству скачиваний, перевыкладывать его нет смысла. Поэтому просто кратко опишу его основные параметры: 1280*1024, 30 FPS, длительность 4:42, весит 106 МБ. То есть в среднем 22.5 МБ на минуту видео. При этом видны малейшие детали, никаких артефактов, никакой размытости, никакой пикселяции заднего фона и т.д..

Я пробовал рендерить тот же ролик по видео-туториалу Нолана, ссылку на который бросили и моментально расхватали в соответствующем разделе на woh.ru. Единственное преимущество того, что там описано - высокая скорость рендеринга. Однако, в результате получается файл в 1.5 раза больше, чем мой, причем качество порой хромает, так что приходится поднимать средний битрейт, в результате чего видео получается почти в 2 раза больше, чем то, что отрендерил я.

Собственно, что я тут сделал. Во-первых, Вам понадобятся следующие вещи:
  1. Sony Vegas
  2. Кодек под названием Lagarith
  3. AviSynth
  4. MeGUI
  5. Набор профайлов x264 для MeGUI (их надо скопировать в папку с профайлами в MeGUI)
Линки я сейчас искать не буду. Google знает все и с радостью подскажет Вам, где достать это добро.

После того, как Вы все добыли, начинаем собственно процесс рендеринга:
  1. Подготовьте Ваш ролик в вегасе. Я рекомендую чуть-чуть повысить цветность (если обратили внимание, в моем демо-ролике цвета слегка блеклы, потому что я не стал накладывать никаких фильтров и эффектов).
  2. После того, как все готово, рендерим отдельно видео в формате AVI. Для этого выбираем в качестве кодека Lagarith и тыкаем "Custom...". Тут ставим:
    1. На вкладке Project ставим Rendering quality - Best
    2. На вкладке Video ставим FPS как у исходника
    3. Разрешение - тоже как у исходника
    4. Field order - None (progressive scan)
    5. Interleave every 0.25 sec
    6. Тыкаем "Configure..." и в появившемся окне ставим галочки Enable Null-frames и Use Multithreading, Mode выбираем YV12.
  3. Далее отдельно кодируем аудио.
  4. В результате мы имеем 2 файла: ужатый без потери качества видео-исходник (AVI) и WAV файл со звуками и музыкой.
  5. Запускаем MeGUI.
  6. В меню сверху тыкаем Tools -> AVS Script Creator.
  7. В Video Input выбираем нашу сжатую AVI-шку. Закрываем превью.
  8. Переходим на вкладку Filters. В Source Type выбираем Progressive.
  9. Жмем Save. Закрываем превью.
  10. В основном окне в Encoder Settings выбираем x264: Unrestricted 2pass Insane Fast (спасибо Moira за подсказку!).
  11. Там же в File Format выбираем RAWAVC.
  12. Тыкаем Config.
  13. Вот тут самое важное: правильно задать средний битрейт вашего видео. Скажу так: для своего видео (1280*1024) я пробовал 1000, 2000, 3000, 4000, 5000, 8000 и 10000. При 1000 нормально все видно, но на статичном более-менее монотонном фоне есть заметная пикселяция. Если Вы хотите сделать просто ролик для какого-нибудь видео-дневника, смело выбирайте этот битрейт и не парьтесь. Ведь в таких видео важны сами события, а не вооооон тот холм вдалеке. На 2000 все так же заметны пиксели на фоне, а размер файла уже выше. На 3000 никакой пикселяции, на мой взгляд, отличное изображение. Разницы между 3000, 4000 и 5000 я не заметил совсем - меняется только размер файла (притом, ощутимо). На 8000 качество лучше, но размер выходного файла не обрадует ваших зрителей. 10000 - это уже совсем маразм (как и 8000, имхо). В общем, я остановился на 3000. Однако учтите, что на более высоких разрешениях этого битрейта, возможно, будет не достаточно. Я рекомендую снять коротенький ролик (10 сек) в Вашем родном разрешении и поэкспериментировать с битрейтом, чтобы подобрать оптимальное значение.
  14. Тыкаем OK, в появившемся окне жмем No, чтобы не изменить профиль.
  15. В Audio Input выбираем WAV файл.
  16. В Encoder Settings выбираем FAAC: scratchpad.
  17. В Extension - Raw-AAC.
  18. Жмем Config.
  19. Выберите ABR или VBR. Тут вы много не выиграете, я рекомендую выбрать ABR 256 kbps. Тыкаем OK.
  20. В главном окне жмем Enqueue для видео и то же самое для аудио.
  21. Переходим на вкладку Queue, жмем Start. Будьте готовы к тому, что кодирование займет большое количество времени, которое зависит от параметров Вашего видео. 
  22. Когда все закончилось, жмем Clear, а затем в меню сверху выбираем Tools -> Muxer -> MP4 Muxer.
  23. В поле Video Input выбираем получившийся файл с расширением .264.
  24. Убедитесь, что в поле FPS проставился родной FPS исходника. Если надо, поправьте.
  25. В поле Input на вкладке Audio1 выбираем файл с расширением .aac.
  26. Жмем Queue, на вкладке Queue жмем Start.
Все, Ваше видео готово!

У кого-то, возможно, возникнет вопрос: "И нахрена мне вся эта байда, если я могу отрендерить все абы как за 5 минут?".

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

7 комментариев:

Unknown комментирует...

12 часов на 10тиминутное видео?

Killan комментирует...

Больше похоже на 6 часов. Если видел мое видео с героик Саурфанга - оно рендерилось чуть меньше, чем 1.5 часа.

Unknown комментирует...

сделайте на woh.ru хороший гайд и полноценный гайд, думаю многи будут благодарны.
а за этот гайт спасибо, помог.

Killan комментирует...

Спасибо за позитивный отзыв. Рад, что смог помочь.
В том, что Вы предлагаете, есть 2 важных момента:

1. То, что описано тут, будет полезно далеко не всем. Как видите, для обладателей не самых сильных процессоров описанный выше метод превращается в пытку, когда 10 минут рендерятся по полсуток.

2. К моему огромному сожалению, мне до сих пор не удалось добиться оптимального варианта кодирования видео в формате 1080 HD. То, что получается в итоге, либо выглядит плохо, либо сильно тормозит. А, учитывая, что YouTube уважает только "широкоформатки", умение рендерить такие ролики очень важно. Без этого гайд будет не полон.

В целом, я могу посоветовать Вам лишь одно: если возникают проблемы, пишите сюда или в соответствующую тему на woh.ru - постараюсь помочь. Как только я пойму, что знаю и умею достаточно для написания качественного гайда, который подойдет всем, я это сделаю. А пока - увы.

Moira комментирует...

Отличный гайд, стали получатся длинные видео отличного качества и которые мало весят. Сжатие не такое длительное если вместо 10.В основном окне в Encoder Settings выбираем x264: Unrestricted 2pass Insane. выбрать надо x264: Unrestricted 2pass Fast. У меня это было порядка часа-двух в зависимости от длины видео. Подсказал знакомый, выяснивший это экспериментальным путем. Надеюсь кому то поможет =)

Killan комментирует...

Рад, что понравилось, и спасибо за подсказку насчет скорости! :)

Анонимный комментирует...

Проблема появляется на шаге 7. Когда открываю сжатую авишку вылазит ошибка и программа закрывается. Пробовал другие мувики открывать (рендеренные не Lagarith) все ок. Что это может быть?