Бесплатный MVC декодер/энкодер.

Благодаря энтузиасту videofan3d с doom9 форума у нас появился бесплатный консольный MVC декодер/энкодер.
Разработка обсуждается тут:

Последний билд качаем тут:

Утилиты построены на базе Intel(R) Media SDK (version: 4.0.760.60435)
Собственно декодер поддерживает mpeg2|h264|vc1|mvc, а энкодер умеет кодировать в mpeg2|h264|mvc.

На вход энкодера могут подаваться:

  1. YUV-файл с цветовой субдискретизацией 4:2:0
  2. Несжатый AVI-файл с цветовой субдискретизацией 4:2:0
  3. Avisynth скрипт с выходным форматом 4:2:0
  4. Входная YUV named pipe (коннектится к \.\pipe\pipename)

Я рассмотрю только кодирование в MVC.
Допустим мы разобрали диск и имеем left.avc и right.mvc
Перекодировать их мы можем коммандой:

FRIMDecode mvc -i left.avc -i right.mvc -o \\.\pipe	est.yuv | FRIMEncode.exe mvc -i \\.\pipe	est_L.yuv -i \\.\pipe	est_R.yuv -viewoutput -o output_L.avc -o output_R.mvc -w 1920 -h 1080 -f 23.976 -u 4 -cpbsize 3570 -vbr 30000 40000 -l 6 -profile high -level 4.1 -gop 24 4 0 O -EndOfSequence off

Собственно и всё. Никаких промежуточных .yuv-ов огромного размера. На выходе получим файлы output_L.avc/output_R.mvc которые закидываем в Scenarist и собираем.
В этой комманде можно варьировать значениями:
-u в интервале 1…7 (это качество/скорость… чем ниже цифра, тем качественнее/медленнее)
-vbr xxxxx yyyyy, где ххххх - средний суммарный битрейт для обоих ракурсов, ууууу - максимальный суммарный битрейт для обоих ракурсов (не забываем, что максимальный битрейт main+dependent+audio+subtitles 64mbps)
-cpbsize 3570 -l 6 -profile high -level 4.1 -gop 24 4 0 O -EndOfSequence off - добавлены для Scenarist-а и соответствия blu-ray спецификации (совместимость не 100%-я, но если в mui-генераторе при импорте .mvc снять галку Enable Spec check mode… то поток будет принят сценаристом и нормально смуксен).
Всё работает шустро и просто, но без ложки дёгтя не обошлось: энкодер однопроходный и распределением битрейта между ракурсами занимается как ему хочется.

PS: поскольку тестил это решение под сценарист, то и тему разместил в этом разделе. Модераторы, перенесите куда считаете нужным плиз.

7 Likes

Утилиты обновлены:

Чейнджлог:
FRIM Encoder 1.15

  • кодирование из avi/avs - теперь выводится более подробная информация об ошибках.
  • новое: добавлен CQP режим кодирования: [ -cqp QPI QPP QPB ] (к сожалению, без лимитирования максимального битрейта)

FRIM Decoder 1.15

  • исправлен баг с разной продолжительностью YUV-файлов при декодировании MVC
  • новое: MVC - имена обоих файлов (L,R) могут быть заданы пользователем

FRIM Transcoder 1.15

  • добавлены настройки кодирования аналогичные FRIM Encode
  • добавлены раздельные base+dependent входящие MVC-потоки

В CQP режиме битрейт dependent ракурса теперь ощутимо ниже main ракурса.
Но… Из-за того что нет лимитирования максимального битрейта - скорее всего придётся выбирать завышенные значения QP. Иначе могут быть локальные превышения максимально допустимого для BD битрейта.

8 Likes

Обновление

Чейнджлог: в release notes

6 Likes

Обновление

Чейнджлог:

FRIM “all” 1.18

  • compiled on Win 8 –> D3D11 allowed
  • processing info message now reports correct number of processed frames (for “mvc” NOT(!) multiplied by 2 anymore)
  • added parameter “-start firstFrame” (for processing), together with “-length” allows decode/encode portions of the videostream
    optionally, SMPTE format is allowed: -start 00:01:25:14 -length 00:00:05:07
  • unified option naming: “-sw” or “-hw”, “-d3d”, “-d3d11”
  • running platform is now detected automatically, i.e. “software mode” (using libmfxsw32.dll) is not default anymore!
    To force “software” you MUST specify “-sw” option
  • fixed information message about running platform (SOFTWARE, HARDWARE - D3D9 or D3D11 now displayed correctly)
  • default GOP structure was set to “24-4-0-Open” for h264 and mvc (and 24-3-0-Open for MPEG2) for better compatibility with -hw option

FRIM Encoder 1.18
FRIM Decoder 1.18

  • option “-b” removed, use “-cbr” instead
  • change of syntax of “-i” and “-o” to be unified with FRIM Transcoder
    (see related FRIM*coder_readme.pdf !)

FRIM Transcoder 1.18

  • KNOWN BUG: when parameter “-length” is used then it adds from unknown reasons few frames (~3) more then requested

  • FEATURE: Joined and linked sessions with “-hw” MUST use the same type of d3d memory (either -d3d or -d3d11)!
    System memory cannot be used in such case!
    Reason: HARDWARE library (libmfxhw32.dll) is loaded and shared among sessions.

  • parameter “-f” overwrites encoding part of the session only
    (remark: options -start, -length are related to decoding part of the session)


Благодаря энтузиасту Cedvano появилась утилита Transcoder GUI основанная на бесплатном MVC энкодере (by videofan3d)

For use :

  • At start, select location of FRIMTranscode, FRIMDecode, FRIMEncode and tsMuxeR
  • Select SSIF, MPLS or the h264 and MVC file
  • Change parameters
  • Encode

Thank to videofan3d and Physic for their work

  • add hw option for decoder
  • modifie command line function (minor memory usage for Transcoder GUI)
8 Likes

Вышел FRIM 1.20:

FRIM Decoder 1.20

  • добавлен вывод в stdout

FRIM Encoder 1.20

  • добавлен вход из stdin

Пример строки, для декодирования/кодирования dependent потока в lossless AVC при помощи FRIMDecode + x264:

FRIMDecode -i::mvc main.avc dep.mvc -o \\.
ul - | x264.exe --qp 0 --input-csp  i420 --input-res 1920x1080 --fps 23.976 --output dependent.264  -

Набор утилит FRIM 1.21 переведён на платформу Intel Media SDK 2014.
Билды под x86 и x64!

FRIM Decoder 1.21
FRIM Encoder 1.21

  • добавлен параметр -swaplr… меняет местами L- and R-ракурсы в -tab или -sbs режимах.

FRIM Transcoder 1.21

  • без функциональных изменений

FRIM плагин для Avisynth (только 32-битная версия под Avisynth 2.58)

  • см. описание в FRIMSource_readme.pdf
  • использует тот же движок, что и FRIM Decoder

FRIM Exporter для Adobe Premiere CS6 (только 64-бита)

  • плагин FRIMExport.prm размещать рядом с другими CS6 плагинами в
    “c:\Program Files\Adobe\Common\Plug-ins\CS6\MediaCore\FRIMExport.prm”

  • использует тот же движок с теми же параметрами что и FRIM Encoder

  • протестировано в CS6, возможно работает и с другими 64-битными версиями Adobe Premiere (как то CS5, CC)

  • пример, как использовать 3D в Adobe Premiere - в проект-файле Pattern_3D-TAB.prproj

1 Like

По поводу ускорения, Intel Media Encoder нужно ставить?

libmfxhw**.dll библиотека поставляется с видеодрайверами.

на форуме есть версия посвежее FRIM version 1.22 (x86, x64) - (transport stream)
можно сразу из ts потока кодировать, конвертировать

библиотека поставляется с видеодрайверами

Есть такая, с дровам стала в каталог Media SDK, все равно выдает ошибку, если ставлю Аппаратное ускорение.
Видео HD3000, если конечно не старое

А если библиотеку разместить рядом с энкодером или лучше в C:\Windows\System32\ (или её аналог если 64-битная ОС)?

Пробовал, ничего не дало. У меня конечно GForce еще стоит, может в этом дело? Но в биос включил то что на поцессоре, подкл. кабель, переключился на нее, 8-я винда поставила драйвер,
именно интеловский, последний. Все как надо.

Не знаю, тут не подскажу.
ЕМНИП, hw режим даёт ощутимый прирост в скорости только при декодировании на SSD накопитель. В остальном sw режим как минимум не хуже.

Может это только Decode должно быть с ключом -hw?
У меня такие параметры, так работает:

У меня такие параметры, так работает:

copy nul > encode.ok
Echo.
SET PATH_L=“h:\3D\00021_1_01.mvc”
SET PATH_R=“h:\3D\00021_1_01_d.mvc”
SET PATH_AVC=“h:\3D Convert\00021.264”
SET PATH_MVC=“h:\3D Convert\00021.mvc”

FRIMDecode mvc -i %PATH_L% -i %PATH_R% -o “\.\pipe\TMP.yuv” -hw | FRIMEncode mvc -i “\.\pipe\TMP_L.yuv” -i “\.\pipe\TMP_R.yuv” -viewoutput -o %PATH_AVC% -o %PATH_MVC% -w 1920 -h 1080 -f 23.976 -l 6 -cpbsize 3750 -vbr 24000 48000 -u 4 -profile high -level 4.1 -gop 24 4 0 o -EndOfSequence off -sw
erase encode.ok
pause

Но тоже проблема, Сценарист не принимает эти файлы после кодирования с этими параметрами

Error : ERROR: The MVC scalable nesting SEI message(offset_metadata) is not contain first view component in decoding order of GOP. AU No = 0

Из первого поста темы:

…совместимость не 100%-я, но если в mui-генераторе при импорте .mvc снять галку Enable Spec check mode… то поток будет принят сценаристом и нормально смуксен

1 Like

Из первого поста темы

Да, спасибо, но вроде так делал сначала, но делал не так. Потом сообразил что это относится к mvc файлу, а не к avc. Все прошло.

Привет Всем! Да, подтверждаю… У меня такой-же GPU. Параметр -hw не работает с опцией -o::h264,mvc. Зато, работает с опцией -o::mpeg2 (довольно шустро).
З.Ы. Общался с автором FRIM… ,у него Haswell(HD 4600)-наши карты работать не будут :smile_bl:.(HD 3000 libmfxhw 1.4, HD 4600 libmfxhw 1.7). Пробовал подкинуть libmfxhw32.dll из драйверов для HD 4000, -hw начинает работать, но нет картинки…:frowning:

2 Likes

Подскажите такой момент, в FRIMSource_readme.pdf написано, для скрипта Avisynth:

LoadPlugin (“…some_path…\FRIMSource.dll”)
FRIMSource (codec=“h264”, filename=“…path…\input.h264”, cache=24, num_frames=14000)

num_frames set to actual or maximum number of frames to be read from input file.

А как указать максимум?

Никак вроде-бы. Там integer нужно вводить. Нужно указать точное значение.
Я пользуюсь

Затягиваю туда main поток и смотрю количество фреймов. Это значение и подставляю в скрипт.

А как указать максимум?

Время_в_секундах * фреймрейт

ЗЫ: если тебе не нужно с точностью до фрейма.