Пишем видео с эмулятора. Как?
Записать видео — не проблема.
Проблема — это сделать хорошо и правильно годно.
Я был уверен, что тема с записью видео давно исчерпала себя, оказалось всё не так радужно на самом деле, как казалось =) Многие испытывают некоторые проблемы с записью видео с эмуляторов с достойным качеством.
Для чего нужна запись видео?
Видео — это хороший способ показать что-то не имея под рукой эмулятора, очевидно.
Видео — это хороший способ распространения, видео можно встроить на веб-страничку в сети и получить моментальный отклик без просмотра на реале или эмуляторе для непосвященных.
Как сделать видео для себя / для друзей / для YouTube / для всех?
Итак, что нам понадобится: эмулятор Unreal, FFmpeg, VirtualDUB.
Что такое эмулятор знают все, FFmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. VirtualDub — свободная утилита для захвата, монтажа и редактирования видеопотока для платформы Windows c поддержкой пакетной обработки и различных фильтров.
Будем пользоваться эмулятором Unreal с блек джеком и танцовщицами.
Ветка эмулятора на DLcorp
Ветка эмулятора на TSlabs с поддержкой ts-conf
Забираем FFmpeg
Забираем VirtualDub
Что теперь?
Теперь всё просто! Закидываем либу FFmpeg в директорию с эмулятором, запускаем Unreal, ctrl+F8 — горячая клавиша записи. После нажатия начинается запись видео в соответствии с настройками в unreal.ini
Повторным нажатием Ctrl+F8 останавливаем запись. Всё! Наше видео находится там, где мы сказали ему быть в настройках unreal.ini
Теперь резонный вопрос: "А зачем тогда VirtualDub? И что там с YouTube?".
Давайте глянем, какое видео мы записали, а записали мы видео в том разрешении, которое стоит в настройках отображения эмулятора. При просмотре этого видео в плеере, картинка растянется на экране со сглаживанием пикселов. Получается не совсем то, что мы ожидали. Теперь нам нужно сделать так, чтобы видео на больших экранах не расплывалось и в этом нам поможет VirtualDub.
Что нам необходимо?
Нам нужно кратно увеличить размер пикселов и при этом не размазать картинку. Вот для этого мы воспользуемся нашим VirtualDub. Он позволит нам отрезать, если необходимо, начало и конец видео и сделать увеличение размера до необходимого. При этом мы выберем кодек для видео и аудио.
Скажу немного о моих настройках. Я использую Unreal с поддержкой ts-conf, там выставляю двойной размер TS full 360x288 на выходе получаю 720x540px.
В unreal.ini использую вот эти настройки для FFmpeg:
;# wav, x264:lossless, fast
ffmpeg.parm=-c:a copy -c:v libx264 -pix_fmt yuvj420p -preset:v ultrafast -qp 0 -ss 00:00:00.500
ffmpeg.vout=video#.avi
А сейчас немного пошаманим в VirtualDub.
В Меню Video->Filters нажимаем кнопочку "Add..." (добавить фильтр), находим там нужный нам resize, жмём "Ok".
Теперь непосредственно в фильтре выставляем необходимый нам размер.
Нам нужно попасть (и желательно ровно) в размер HD video — 1080 пикселов по вертикали. Вспомнив, что на выходе эмулятор нам выплюнул видео с размером кадра 720x540 пикселов, нетрудно подсчитать, что нам нужно всего лишь увеличить каждый пиксел в два раза без сглаживания. Ставим 200% увеличения относительно исходного, Filter mode обязательно ставим Nearest neighbor. Обрезку кадра не делаем.
Стоит еще упомянуть, что с переходом YouTube на HTML5 и полным отказом от Flash проигрывателя видео мы получили долгожданную фичу! Теперь мы можем на YouTube загружать и смотреть видео с фреймрейтом 50 и 60 кадров в секунду. Так что fps нашего видео мы не меняем и обрабатываем все кадры.
Осталось еще немного! Терпение, скоро мы сделаем приличное видео.
У YouTube есть свои требования к загружаемым видео и аудио, а вернее к кодекам и битрейтам, но я их точно не придерживаюсь по ряду причин. Просто покажу свои настройки.
Ах да! Вот еще момент. Unreal на выходе выдувает видео с не очень громким аудио и это мы тоже полечим прямо в VirtulDub. В меню Audio->Volume добавляем усиления. У меня стоит +10dB (если честно я еще даже не смотрел уровень после усиления, стыдно мне, но и лениво =) Однажды подобрал на слух, покатило, сохранил настройки и забыл.
Настройки кодека видео Video->Compression:
Я использую кодек Xvid MPEG-4 с параметрами по умолчанию Xvid HD 1080 и обратите внимание, тип квантизации выставлен MPEG! H263 даёт мыльную картинку, а нам важно получить пикселы с чёткими краями.
Аудио кодек выбираете на вкус. YouTube рекомендует AC-3 ACM, но без особых проблем можно ставить и MP3. Экспериментируйте и выбирайте лучшее для себя.
Собствено, вот и все хитрости, осталось сохранить наш новый файл: File->Save as AVI… и наслаждаться нашим видео на большом мониторе или огромном телевизоре или в YouTube.
А как быть, спросите вы, если какая-то программа не поддерживает выплёвывание видео из себя? Что делать? А вот тут делайте уже как хотите =) Есть множество программ, которые позволяют захватывать экран или часть экрана монитора. Здесь самое главное — выбрать то, что позволит писать с наименьшим выпадыванием кадров и с наибольшим fps. Я рекомендую Action! от Mirillis. Она платная, но цена вполне подъемная, всего 30$. Она позволяет писать видео с высоким фреймрейтом и довольно шустрая, с богатыми настройками.
Именно так я записывал дему Trigona Kalanda by kabardcomp, прямо с окна эмулятора ЮТ-88 в программе Action!..
Очень надеюсь, что сейчас не будет проблемой, высылая работу на какое-нибудь пати, выслать организаторам также и ссылку на видео в достойном качестве.
Всё написанное выше всего лишь путь проб и ошибок и если я в чём-то совершенно не прав с академической точки зрения, поправьте меня и поясните, что и где поправить.
Если еще остались вопросы или я что-то упустил (совершенно неумышленно, естественно), с радостью отвечу в комментариях.
upd 01-02-2015:
nyuk и psb развили мысль до годного результата буквально в одно касание клавиатуры.
в unreal.ini ставим такие настройки для ffmpeg:
;#aac:256 x264 slow
ffmpeg.parm=-c:a libvo_aacenc -b:a 256k -af volume=3.000000 -c:v libx264 -pix_fmt yuv420p -vf scale=iw*2:ih*2 -preset slow -sws_flags neighbor -ss 00:00:00.500
ffmpeg.vout=video_#.avi
Теперь можно и не пользовать VirtualDub вовсе или в нём просто резать начало и конец видео.
Релизьте демосики, пишите видосики!
41 комментарий
Я написал, что не пользую h264 по ряду причин. Для себя нашёл золотую середину между временем кодирования и качеством картинки.
— это видно?
ffmpeg.parm=-c:a ac3 -b:a 320k -af volume=3.000000 -vf scale=iw*2:ih*2 -sws_flags neighbor -c:v libxvid -mpeg_quant 1 -q:v 2 -ss 00:00:00.500
В смысле на качестве видео это не сказывается? (пропусков кадров нет?
И даже следующее пережатие самим YouTube не страшно т.к. качество увеличенных пикселов останется =) YouTube пережмёт в любом случае, сервис ведь подготавливает видео разных размеров. В идеале было бы самому готовить набор из нескольких видео и заливать, но оно пользователю нужно? Где-то в требованиях сказано, что изначальный ролик должен быть годного качества, а уж youtube подготовит для всех разрешений видео сам с приемлемым качеством только по ему известным критериям качества.
Я таки остановился именно на этом варианте, спасибо psb и nyuk
Сравнил вот с этим видео www.youtube.com/watch?v=NruMPejeAZI.
Вариант 1: фуллскрин, каждое видео на макс. битрейте ютуба. Пиксели видно, но границы между ними немного смазаны у обоих видео.
Вариант 2: оба видео в очке ютуба, битрейт максимальный. В видео апогея пиксели смазаны, в видео инвитро — чёткие, как будто в эмуляторе.
Браузер firefox 35.0.1 в линухе.
Видео с инвитрой записано с дефолтными настройками в унрыле 0.38.1 без обработки вообще (записал-залил).
Вопрос — в чём тогда заключается метод автора статьи, если разницы либо не видно, либо получается даже немного хуже?
Давайте найдём отличия.
1. В статье и вправду никаких скриншотов, никаких примеров видео, кроме демы с апогея, что же тебя удивляет?
2. В предыдущем комменте 2 картинки, на одной вообще только менюшка выбора битрейта/разрешения, без самого видео. Что сравнивать — количество пунктов в меню?
3. Вот скриншот видео: i.steppic.com/8/d/2/d/8d2ddf64b92d00c4d6daf7fac273efa6/0.png
Предлагаю тебе сделать так же, ну или хотя бы выложить ссылки на свои видео, и добавить в статью, как правильно, а как неправильно. Меня вполне устраивает то, что по ссылке.
В топике написано не про сравнение видео, а о двух способах его получения. Почему в голову приходит сравнивать какие-то видео, сделанные разными способами в разных разрешениях, и смотренных в разных браузерах мне не понятно.
Цель топика, если кто еще не понял, дать возможность всем и каждому готовить видео для виртуальных пати, чтобы немного разгрузить оргов при подготовке.
Видео для патей (не виртуальных, дихальт, мм) для некоторых работ я делал именно таким методом — ctrl-f8, и ничего, орги плохого слова не сказали.
И да, раз всплыл вопрос сравнения видео в разных браузерах и осях, значит это тоже влияет на качество видео, в каком оно доходит с ютуба до пользователя, и тоже должно как-то отражаться. Например, вот так видео лучше делается для просмотра под виндой, а вот так — под планшет с разрешением 2560х1600, и т.д. Не делать же ВСЕГДА видео в 4к, чтобы пиксели были почётче?
Это не правила и не обязательства. Буду рад, если мои эксперименты и помощь psb в этом вопросе позволят кому-то сделать видео чуть лучше, чем они могли или не могли делать до этого.
Если у lvd есть потребность рассказать о том, как смотреть ролики на YouTube в Firefox под линухом при 50fps, то все бы были рады почитать об этом в новом топике на hype.
ffmpeg-3.2.4-win32-static.zip + us0.38.3.rar + настройки из upd 01-02-2015: прекращена работа ffmpeg.exe (error: no connection from ffmpeg)
Сделал запись с настройками чтоб не запакованные кадры писало, а потом уже в virtualdub ресайзил и громкость повышал.
ffmpeg.parm=-c:a copy -c:v copy -r 50 -ss 00:00:00.500
ffmpeg.vout=video#.avi
или пользуйтесь ламповым тс-эмулятором:)
С такими настройками ffmpeg выдаёт ошибку и не хочет записывать.
Пишет