Rev 981 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?
Запись видео в Unreal Speccy emulator (psb)
-------------------------------------
Запись видео реализована с помощью утилиты ffmpeg. Таким образом, всё, что
умеет ffmpeg - все доступно для использования с Unreal Speccy.
Содержание:
* Основные возможности
* Основы работы с ffmpeg
* Настройка эмулятора
* Параметры для записи: набор png/bmp
* Параметры для записи: h264/mp3
* Параметры для записи: DVD
* Онлайн-трансляция видео в интернет
* Наложение звука микрофона
* Где скачать ffmpeg?
* Полезные ссылки по ffmpeg
Основные возможности
--------------------
* Запись видео в файл. Поддерживаются различные кодеки (xvid/h264/mpeg2/bmp/png/
wav/mp3/... - все они встроены в ffmpeg, дополнительно устанавливать не
нужно), контейнеры (avi/flv/mpg/mkv);
* Применение различных фильтров перед сжатием (например, это позволяет на ходу
записывать видео в формате, пригодном для использования при записи DVD -
25 fps interlaced);
* Осуществление онлайн вещания в интернете (с возможностью наложения звука
микрофона поверх звука эмулятора);
* Автоматическая поддержка многоядерных процессоров для кодирования видео.
Основы работы с ffmpeg
----------------------
Изначально ffmpeg предназначен для конвертации/сжатия видео. Работа с ffmpeg
ведется из командной строки. При этом, задаются источники и приемники данных,
а так же опции, определяющие форматы данных/характеристики сжатия. Пример:
ffmpeg -i input.avi output.flv
В этом случае видео из input.avi переконвертируется в output.flv (тип контейнера
определяется автоматически по расширениям файлов, но не всегда, иногда нужно его
указывать явно, например: -f flv).
В общем виде параметры командной строки имеют такой формат:
ffmpeg [input1 options] -i input1 [input2 options] -i input2 ... [output1 options] output1 [output2 options] output2 ...
Ключ -i задает источник данных, при этом ДО этого ключа должны быть заданы все
опции для этого источника. Все, что указано после -i, будет считаться опциями
для следующего источника/приемника.
Описание всех опций ffmpeg можно найти в архиве с программой или на официальном
сайте (ссылка внизу).
Настройка эмулятора
-------------------
Для работы функции сохранения видео, в ini-файле эмулятора необходимо настроить
следующие параметры:
ffmpeg.exec путь и имя утилиты ffmpeg, например, ffmpeg.exe или
C:\ffmpeg\ffmpeg.exe, до 256 байт;
ffmpeg.newconsole 1 - открывать для ffmpeg новую консоль;
0 - использовать консоль эмулятора для вывода ffmpeg
(полезно для отладки параметров);
ffmpeg.parm параметры выходного файла, до 1024 байт;
ffmpeg.vout имя выходного файла (можно использовать символ "#" для
подстановки порядкового номера видео, например, video#.avi),
до 512 байт.
Для записи видео Unreal Speccy запускает ffmpeg в следующем формате:
"%exec%" -i %pipename% %parm% -y %vout%
%exec% - параметр ffmpeg.exec из ini-файла;
%pipename% - имя канала (pipe), через который передается несжатое видео -
недоступно для изменения;
%parm% - параметр ffmpeg.parm из ini-файла;
%vout% - параметр ffmpeg.vout из ini-файла.
Запись видео начинается при первом нажатии CTRL+F8 (если это не изменено в
ini-файле) и останавливается при втором. На слабых компьютерах (даже 2х-ядерных)
возможно торможение эмулятора при записи - это нормально, на качество видео это
не влияет.
Параметры для записи: набор png/bmp
-----------------------------------
Для записи картинок достаточно указать расширение .png/.bmp у выходного файла.
ffmpeg.parm=-r 25
ffmpeg.vout=video#_%06d.png
Здесь "-r 25" задает частоту кадров выходного видео - 25 к/сек, т.е., если
эмулятор будет давать 50 к/сек, то каждый второй кадр будет отброшен. Если не
задавать никаких параметров, будет сохраняться 50 к/сек.
"video#_%06d.png" развернется в "video0_000000.png", "video0_000001.png",
"video0_000002.png" и т.д. для первого видео, "video1_000000.png",
"video1_000001.png", "video1_000002.png" и т.д. для второго видео.
Параметры для записи: h264/mp3
------------------------------
H264 - стандарт сжатия видео, предназначенный для достижения высокой степени
сжатия видео потока при сохранении высокого качества. В ffmpeg для работы с этим
форматом используется кодек libx264.
Для сжатия звука в mp3 используется кодек libmp3lame.
Вот основные параметры (для использования в ffmpeg.parm):
-c:a copy копирование аудио потока без изменения формата
(в нашем случае - без сжатия, wav)
-c:a libmp3lame сжатие звука в mp3
-b:a 320k с битрейтом 320
-af volume=3.0 увеличение громкости звука в 3 раза (полезно,
т.к. в эмуляторе звук тихий)
-c:v copy копирование видео потока без изменения формата
(в нашем случае - без сжатия, rgb24)
-c:v libx264 сжатие видео в h264,
-pix_fmt yuvj420p формат пикселей; без этой опции не работает :)
-preset:v veryfast тип сжатия (влияет на скорость и степень сжатия)
-profile:v baseline тип профиля (см. описание h264)
-crf 10 качество сжатия 0-51 (0 - без потерь, 51 - худшее)
-ss 00:00:00.500 пропустить первые 500 мс видео (не записывать кадры
с надписью "start saving video")
-an исключить аудио
-vn исключить видео
Для создания своих настроек кодирования видео, достаточно просто "склеить"
вышеуказанные опции вместе, разделяя их пробелами.
Например, мы хотим получить несжатый звук и сжатое видео без потерь:
ffmpeg.parm=-c:a copy -af volume=3.0 -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -crf 0 -ss 00:00:00.500
ffmpeg.vout=video#.avi
Или сжатый звук и более сжатое видео:
ffmpeg.parm=-c:a libmp3lame -b:a 320k -af volume=3.0 -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -profile:v baseline -crf 10 -ss 00:00:00.500
ffmpeg.vout=video#.avi
Для записи видео в h264 настоятельно рекомендуется ставить режим отображения
double size (2x) в эмуляторе (иначе будут потери в цвете).
При записи видео с частотой 25 кадров/сек (например, YouTube принудительно
пережимает в такую частоту), каждый второй кадр будет выпадать. Для эффектов
типа gigascreen это критично. Для исправления ситуации при записи таких видео
настоятельно рекомендуется в настройках эмулятора включать режим Noflic
(вкладка Video). Да и даже на видео в 50 кадров/сек Noflic выглядит убедительнее
на gigascreen-эффектах.
Параметры для записи: DVD
-------------------------
Видео для PAL-DVD должно содержать 25 кадров/сек, каждый кадр должен состоять из
полей (полукадров). Задача - упаковывать пару соседних экранов эмулятора в один
interlaced-кадр. Для этого в ffmpeg есть фильтр tinterlace. Также в ffmpeg есть
опция -target pal-dvd, которая сразу устанавливает необходимые кодеки, размер
картинки (720x576 пикселей) для формата DVD.
Для соблюдения оригинальных пропорций рекомендуется делать обрезание/дополнение
исходного кадра до разрешения 720x576. Это делается фильтрами crop/pad
соответственно.
Вот пример опций для записи DVD (исходная картинка в эмуляторе должна быть
больше 720x576 пикселей - double size (2x) + full border, иначе будет ошибка):
ffmpeg.parm=-af volume=3.000000 -bf 2 -vf "crop=720:576,tinterlace=mode=interlacex2" -aspect 4:3 -target pal-dvd -r 25 -b:v 2800k -ss 00:00:00.500
ffmpeg.vout=video#.mpg
Еще пример (исходная картинка меньше 720x576 пикселей - дополняется до этого
разрешения черной рамкой):
ffmpeg.parm=-af volume=3.000000 -bf 2 -vf "pad=720:576:(ow-iw)/2:(oh-ih)/2,tinterlace=mode=interlacex2" -aspect 4:3 -target pal-dvd -r 25 -b:v 2800k -ss 00:00:00.500
ffmpeg.vout=video#.mpg
При использовании этих параметров кодирования, в эмуляторе необходимо поставить
режим отображения double size (2x) для корректной работы фильтра interlacex2.
Опция -b:v 2800k задает битрейт видео (подбирается на глаз).
Онлайн-трансляция видео в интернет
----------------------------------
Есть несколько публичных серверов, позволяющих организовывать онлайн трансляции
в интернет, например: justin.tv, twitch.tv, own3d.tv. Эти сервера могут
принимать видео поток по протоколу rtmp и показывать его через веб-сайт.
Кроме того, все переданное видео записывается на канале и его можно посмотреть
позже.
Для того, чтобы организовать трансляцию, необходимо зарегистрироваться на
сервисе и получить ваш собственный идентификатор трансляции - строку типа
live_74829844_mfrdpoeg034tn03gn03ring3f0rngc. Затем этот идентификатор нужно
вставить в адрес трансляции в параметре ffmpeg.vout.
После того, как настройки готовы, запускаем эмулятор, запускаем запись видео -
трансляция началась. Зрители могут видеть экран эмулятора на вашей страничке.
Пример для justin.tv (идентификатор подставить свой):
ffmpeg.parm=-af volume=3.000000 -r 10 -ss 00:00:00.500 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.justin.tv/app/live_74829844_mfrdpoeg034tn03gn03ring3f0rngc
Пример для own3d.tv (идентификатор подставить свой):
ffmpeg.parm=-af volume=3.000000 -r 25 -ss 00:00:00.500 -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -profile:v baseline -crf 10 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.eu.own3d.tv/live/b8493921_949585_kjhb5632l3l1
Пример для twitch.tv (идентификатор подставить свой):
ffmpeg.parm=-af volume=3.000000 -r 30 -ss 00:00:00.500 -c:v libx264 -pix_fmt yuvj420p -preset:v veryfast -profile:v baseline -crf 35 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.justin.tv/app/live_sub_5b8ed4fae83fe83e920227337beab7e73b7a3ba3
Наложение звука микрофона (может работать некорректно)
------------------------------------------------------
ffmpeg умеет захватывать звук со звуковой карты и картинку с экрана/камер.
Для вывода всех имеющихся в системе устройств необходимо выполнить команду:
ffmpeg -list_devices true -f dshow -i dummy
Команда выведет примерно следующее:
ffmpeg version N-48785-g2ea3f37 Copyright (c) 2000-2013 the FFmpeg developers
built on Jan 12 2013 20:40:36 with gcc 4.7.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-
avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --
enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable
-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-
amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-
libschroedinger --enable-libspeex --enable-libtheora --enable-libtwolame --
enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx
--enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib --enable-
filter=frei0r
libavutil 52. 14.100 / 52. 14.100
libavcodec 54. 86.100 / 54. 86.100
libavformat 54. 59.107 / 54. 59.107
libavdevice 54. 3.102 / 54. 3.102
libavfilter 3. 32.100 / 3. 32.100
libswscale 2. 1.103 / 2. 1.103
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100
[dshow @ 02444020] DirectShow video devices
[dshow @ 02444020] Could not enumerate video devices.
[dshow @ 02444020] DirectShow audio devices
[dshow @ 02444020] "Realtek AC97 Audio"
dummy: Immediate exit requested
Здесь мы видим, что доступно звуковое устройство "Realtek AC97 Audio". Для
микширования звука микрофона и звука из эмулятора, нужно добавить источник звука
-f dshow -i audio="Realtek AC97 Audio"
и использовать опцию
-filter_complex amix=inputs=2:duration=shortest
для микширования двух звуковых потоков в один (в микшере записи Windows должен
быть выбран микрофон).
ffmpeg.parm=-f dshow -i audio="Realtek AC97 Audio" -r 10 -ss 00:00:00.500 -f flv -tune zerolatency
ffmpeg.vout=rtmp://live.justin.tv/app/live_74829844_mfrdpoeg034tn03gn03ring3f0rngc
Где скачать ffmpeg?
-------------------
* Официальный сайт: http://ffmpeg.org/
* Сборка под windows: http://ffmpeg.zeranoe.com/builds/
Полезные ссылки по ffmpeg
-------------------------
* http://ffmpeg.org/documentation.html - документация
* http://ffmpeg.org/trac/ffmpeg/wiki - куча примеров использования,
руководства по сжатиям, трансляции и т.п.