Blame | Last modification | View Log | Download | RSS feed
Запись видео в 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 25ffmpeg.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.500ffmpeg.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.500ffmpeg.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.500ffmpeg.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.500ffmpeg.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 zerolatencyffmpeg.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 zerolatencyffmpeg.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 zerolatencyffmpeg.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 developersbuilt 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=frei0rlibavutil 52. 14.100 / 52. 14.100libavcodec 54. 86.100 / 54. 86.100libavformat 54. 59.107 / 54. 59.107libavdevice 54. 3.102 / 54. 3.102libavfilter 3. 32.100 / 3. 32.100libswscale 2. 1.103 / 2. 1.103libswresample 0. 17.102 / 0. 17.102libpostproc 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 zerolatencyffmpeg.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 - куча примеров использования,руководства по сжатиям, трансляции и т.п.