fpska — делаем 60fps видео

Содержание

Как это работает
Установка
fpska — для новичков
fpska — для продвинутых
Видеоинструкция

Технология 60fps (60 кадров в секунду) позволяет улучшить восприятие видео. Хотя нет, не так, лучше сказать, что видео с частотой 60 кадров в секунду смотрится совершенно по другому. А уж лучше или хуже — это зрителю решать 🙂 Движения кажутся плавными без подергиваний. Особенно сильно эффект от перевода видео в 60fps наблюдается на сценах с панорамированием, когда камеру ведут, чтобы охватить, как можно больше сцены или на видео снятого с короткой выдержкой, когда весь видеоролик превращается в быстрое, мерцающее слайд-шоу (при короткой выдержке нет смаза, поэтому переход от кадра к кадру идет не плавно). Тут сразу следует оговориться про терминлогию. Почему 60fps, а не 50fps? Проще говоря, когда видео стало широко входить в массы было 2 типа частоты кадров: 25 кадров в секунду (25fps) и 30 кадров в секунду (30fps). В Европе и в Росси были распространены 25, в США — 30.



25/30 fps
А теперь, когда появилось мощное оборудование, экраны телевизоров перестали мазать люминофором с обратной стороны (шутка), появились 50fps и 60fps. То есть 25fps перешло в 50fps, а 30fps в 60fps. Для простоты мы будем придерживаться термина 60fps, подразумевая что есть видео 50fps. Сейчас наблюдается тенденция ухода в сторону 60fps. Многие современные видеокамеры могут записывать видео в формате 1080p, 60fps, что уж говорить про профессиональные. Но что делать тем у кого в архиве видео снятое на старый-добрый 25/30fps? Им как быть? Можно все оставить, как есть и не переводить в 60fps. Но если уж захочется, то можно и попробовать 🙂

Как это работает

 

Существует много технологий перевода видео в формат 60fps. Можно сказать, перевод видео в формат с удвоенной частотой кадров. Но все они сводятся к одному и тому же, нужно между соседними кадрами «втиснуть» еще один. Вопрос в том, откуда этот кадр взять? И вот тут начинается самое интересное. Кто-то предложил в качестве этого кадра взять предыдущий и просто показать его 2 раза. А кто-то предложил этот кадр выстроить заново, взяв за основу предыдущий и последующий кадры старого видео, что оказалось, вобщем-то нетривиальной задачей. А кто-то предложил полукадры интерлейсного видео достроить до полного кадра и тем самым удвоить частоту. Многое что предалагали.

Fpska не показывает видео с удвоенной частотой кадров. Она создает новое видео с удвоенной частотой кадров на основе оригинального.



fpska не показывает, а «перерабатывает» видео из одного формата в другой
Конвертацию нужно сделать только один раз, а дальше можно залить на Youtube, загрузить в телефон и так далее. Конвертация заточена под максимальное качество. Для разных типов видео можно подобрать такие параметры создания промежуточных кадров, чтобы процесс пошел быстрее. Но так как заранее не известно какой тип движения будет в кадре, то все настройки выкручены на Max. Можно сказать, что «из пушки по воробьям», зато не надо каждый раз думать про подбор параметров.

Fpska понимает самые распространенные форматы/контейнеры avi, mkv, mp4, mov, 3gp, flv.
Mts, m2v — не подходят.

Пример удвоения частоты для видео с 24 кадрами в секунду (воспроизведите видео один раз, чтобы оно полностью поместилось в память, а затем нажмите Play еще раз, чтобы сравнить 24fps и 48fps):
24fps

48fps

Еще примеры

24fps

48fps

30fps

60fps

24fps

48fps

[свернуть]

Для перевода видео в 60fps мы будем вставлять промежуточный кадр между двумя соседними. Для этого воспользуемся широко известной библиотекой от команды SVP-Team. В завимости от требуемого качества процесс расчета промежуточного кадра может быть очень трудоемким с точки зрения затрачиваемого процессорного времени и памяти. Fpska настроена на максимальное качество поэтому процесс конвертирования может занимать очень много времени. Поэтому если у вас 30-50 минутное видео то лучше оставить скрипт на ночь к утру все будет готово.

Пример восстановленного кадра

Кадр 1

Восстановленый кадр

Кадр 2

Тут всего лишь демонстрируется, что «синтетический» кадр был полностью воссоздан по предыдущим и последующим кадрам и фактически не сильно от них отличается, а это самое главное для алгоритма расчета промежуточного кадра.

[свернуть]

Удваивать частоту лучше для progressiv видео. Честно говоря непонятно имеет ли смысл удваивать частоту для interlaced video. Поэтому, если планируете удваивать частоту для видео со старой VHS камеры или запись с телеэфира, то сначала избавьтесь от «гребенки».

Установка

 

  1. Скачиваем архив fpska.zip и распаковываем его:


    Разархивироанная fpska

    НЕ ИСПОЛЬЗУЙТЕ РУССКИХ БУКВ В НАЗВАНИЯХ ДИРЕКТОРИЙ И ФАЙЛОВ!
  2. Устанавливаем Avisynth из архива distr\AviSynth_260.exe (устанавливаем, как обычное приложение, следуем инструкциям инсталлятора, настройки не меняем, соглашаеимся с тем, что предложат):


  3. Копируем dll’ку distr\avisynth.dll в папку (это многопоточная версия Avisynth библиотеки, специально собранная для работы сплагином svpflow):
    c:\Windows\SysWOW64\ (в случае Windows 64)
    c:\Windows\System32 (в случае Windows 32)
    

    Это нужно для того, чтобы можно было запустить процесс конвертирования в параллельном режиме.


  4. Скачиваем библиотеку svpflow (http://www.svp-team.com/files/gpl/svpflow-4.0.0.128.zip):


    распаковываем архив, файлы svpflow-4.0.0.128\lib-windows\avisynth\x32\svpflow1.dll и svpflow2.dll копируем в папку fpska\svpflow. Внимание, берем именно 32-битные файлы.


    Если svpflow1.dll и svpflow2.dll не будут скопированы в папку fpska\svpflow, то при запуске конвертирования будет сообщение об ошибке:

    "---------------------------"
    Net biblioteki svpflow1.dll
    svpflow\readme.txt - instruktsiya po ustanovke
    "---------------------------"
    

fpska — для новичков

Некоторые из читателей могут сказать: «Хватит! Давай запустим наконец то, не хочется вникать во все эту премудрости!» и будут абсолютно правы. Изначально fpska проектировалась, как скрипт в один клик, все в одном флаконе, чтобы максимально упростить действия по установке и запуску. Чтобы не вникать во все эти кодеки, видеоформаты, настройки кодирования, параметры рассчета промежуточных кадров и так далее. Нажал, кнопку и пошел пить чай (или еще какой-нибудь напиток).
Итак, мы уже установили fpsk’у. Теперь сразу можно запустить конвертирование видео в формт 50/60fps, для этого просто перетащите мышкой видеофайл на скрипт fpska.bat в проводнике:


сразу же запустится процесс конвертации. Появится окно консоли в котором можно наблюдать за текущим статусом конвертирования.


Как только появится надпись:


значит конвертация завершилась успешно и 60fps видео можно забрать из папки, в которую была установлена fpsk’а:



Результат конвертации находится в файле 60fps_video_and_audio.mp4

fpska — для продвинутых

Навыки работы с командной строкой дают больше преимуществ при работе с fpsk’ой, чем работа из проводника в быстром старте.
Методика работы в этом случае выглядит следующим образом.

    1. Запускаем любимый file manager (например, Far) и преходим в папку с установленной fpsk’ой.
    2. Копируем в эту папку видеоролик, который надо перевести в 60fps.
    3. Запускаем конвертирование:
      fpska.bat <файл с видео> <режим> <число процессоров>
      

      режим: «fast», «slow»:
      fast — проверка установки и настроек,
      slow — чистовое конвертирование

      число процессоров: — тесты показали, что при использовании 6-и процессоров увеличение скорости ковертирования равно 4. То есть эффективность распараллеливания не такая высокая, как хотелось бы. Тем не менее, выгоднее задействовать, как можно больше процессоров в системе.

      Со скриптом поставляется тестовый видеоролик video.mov, запуск перекодирования будет выглядеть так:

      Hi-Quality (высокое качество)

      fpska.bat video.mov slow 2
      

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

      Low-Quality (низкое качество)

      fpska.bat video.mov fast 2
      

      Этот режим используется для проверки установки всего пакета.

      После того, как процесс кодирования закончится в текущей папке появится файл 60fps.mkv — это и будет результирующее видео.

      Важно убедиться, что антивирусное программа не блокирует скрипты и не запускает их в отдельной «песочнице». Я долго разбирался со скриптом, который запускал процесс кодирования, но результирующего файла не появлялось в рабочей папке. Все дело было в Comodo Firewall, который запускал fpsk’у в изолированном пространстве.

Для некоторых может оказаться преимуществом, что fpska работает из командной строки и не требует графического интерфейса. Не составит никакого труда написать скрипт для пакетного конвертирования большой группы файлов.

Видеоинструкция

Записал видюшку о том, как устанавливать fpsk’у на чистую (из коробки) Windows 10.

Почитать еще

  • Алексей

    Не работает, просто открывается командная строка и резко закрывается.

  • Алексей

    Винда 32 битная

  • voran

    По всей видимости не скопировался avisynth.dll в папку System32. Я поправил документацию. Теперь там понятно, что и куда копировать для Windows 32 и для Windows 64.

  • Евгений

    Подскажите, а можно прикрутить Ваш скрипт к StaxRip, будет ли работать с его версием avisynth?

  • Евгений, я думаю можно. Fpska — это сочетание Avisynth + svpflow библиотеки и все это запускается обычным Windowd bat’ником. Интегрировать ее в какой-то другой pipeline не составит труда.

  • VerliHub

    Привет 🙂
    Начал на днях увлекаться Ace Stream и в нем есть плеер VLC (Ace Stream HD). Что скачать и как внедрить в VLC SVP, что бы при просмотре онлайн видео уже шло в 60 кадров?

  • Здравствуйте,
    Если Вы хотите просматривать обычное и потоковое видео с удвоенной частотой кадров, без первоначальной кодировки, то нужно поставить поддержку SVP. Видео будет уплавняться на лету:
    https://www.svp-team.com/wiki/Main_Page/ru

  • VerliHub

    Для поддержки в проигрывателе VLC нужно покупать программу

  • Олег

    Добрый день!
    Не получается перекодировать файл mkv в 60fps лог такой:
    e:_FPSka>fpska 01.mkv slow 4
    «full video path: » e:_FPSka1.mkv
    «video extension: » .mkv
    «video_file: » e:_FPSka1.mkv
    «ncpu: » 4
    «1 method: » slow
    11:37:06,19
    MPlayer Redxii-SVN-r37946-6.2.0 (i686) (C) 2000-2017 MPlayer Team
    FFmpeg version: N-86746-g2f84f40d45
    Build date: 2017-07-10 02:57:44 EDT
    Fontconfig error: Cannot load default config file

    Playing 01.mkv.
    libavformat version 57.75.100 (internal)
    libavformat file format detected.
    [h264 @ 02736b20]mmco: unref short failure
    [h264 @ 02736b20]mmco: unref short failure
    [h264 @ 02736b20]number of reference frames (0+4) exceeds max (3; probably corrupt input), discarding one
    [h264 @ 02736b20]Increasing reorder buffer to 2
    [lavf] stream 0: video (h264), -vid 0
    [lavf] stream 1: audio (ac3), -aid 0, -alang rus
    [lavf] stream 2: audio (ac3), -aid 1, -alang eng
    VIDEO: [H264] 1920×1080 0bpp 50.000 fps 0.0 kbps ( 0.0 kbyte/s)
    ==========================================================================
    Forced video codec: dummy
    Cannot find codec matching selected -vo and video format 0x34363248.
    ==========================================================================
    Clip info:
    encoder: libebml v1.3.0 + libmatroska v1.4.1
    creation_time: 2014-01-31T15:55:47.000000Z
    Load subtitles in ./
    Load subtitles in e:/_FPSka/mencoder/mplayer/sub/
    ==========================================================================
    Opening audio decoder: [ffmpeg] FFmpeg/libavcodec audio decoders
    libavcodec version 57.100.104 (internal)
    AUDIO: 48000 Hz, 2 ch, floatle, 192.0 kbit/6.25% (ratio: 24000->384000)
    Selected audio codec: [ffac3] afm: ffmpeg (FFmpeg AC-3)
    ==========================================================================
    [AO PCM] File: 60fps_audio.wav (WAVE)
    PCM: Samplerate: 48000Hz Channels: Stereo Format floatle
    [AO PCM] Info: Faster dumping is achieved with -benchmark -vc null -vo null -ao pcm:fast
    [AO PCM] Info: To write WAVE files use -ao pcm:waveheader (default).
    AO: [pcm] 48000Hz 2ch floatle (4 bytes per sample)
    Video: no video
    Starting playback…
    A: 0.3 (00.3) of 1383.8 (23:03.8) ??,?%
    ==========================================================================
    Forced video codec: dummy
    Cannot find codec matching selected -vo and video format 0x34363248.
    ==========================================================================

    таких строк очень много, после них идет следующее:

    A: 46.8 (46.7) of 1383.8 (23:03.8) 0.3%
    ==========================================================================
    Forced video codec: dummy
    Cannot find codec matching selected -vo and video format 0x34363248.
    ==========================================================================

    Too many video packets in the buffer: (2337 in 33563794 bytes).
    Maybe badly- or non-interleaved stream/file or the codec failed?
    Fix the file or try the -ni option (can cause high memory usage).
    A: 46.8 (46.7) of 1383.8 (23:03.8) 0.3%
    ==========================================================================
    Forced video codec: dummy
    Cannot find codec matching selected -vo and video format 0x34363248.
    ==========================================================================
    A: 46.8 (46.7) of 1383.8 (23:03.8) 0.3%

    Exiting… (End of file)
    Скопировано файлов: 1.
    «2 method: » slow
    «threads: » 4
    «3 method: » slow
    «slow»
    MEncoder Redxii-SVN-r37946-6.2.0 (i686) (C) 2000-2017 MPlayer Team
    FFmpeg version: N-86746-g2f84f40d45
    Build date: 2017-07-10 02:57:44 EDT

    WARNING: OUTPUT FILE FORMAT IS _AVI_. See -of help.
    success: format: 0 data: 0x0 — 0x2e4
    libavformat version 57.75.100 (internal)
    AVS file format detected.
    VIDEO: [YV12] 1920×1080 12bpp 100.000 fps 0.0 kbps ( 0.0 kbyte/s)
    [V] filefmt:38 fourcc:0x32315659 size:1920×1080 fps:100.000 ftime:=0.0100
    Opening video filter: [expand osd=1]
    Expand: -1 x -1, -1 ; -1, osd: 1, aspect: 0.000000, round: 1
    ==========================================================================
    Opening video decoder: [raw] RAW Uncompressed Video
    Could not find matching colorspace — retrying with -vf scale…
    Opening video filter: [scale]
    Movie-Aspect is undefined — no prescaling applied.
    [swscaler @ 0282ea80]bicubic scaler, from yuv420p to yuv420p using MMXEXT
    [swscaler @ 0282ea80]using unscaled yuv420p -> yuv420p special converter
    x264 [info]: using SAR=1/1
    x264 [info]: using cpu capabilities: none!
    x264 [info]: profile High, level 5.1
    Selected video codec: [rawyv12] vfm: raw (RAW YV12)
    ==========================================================================
    Fontconfig error: Cannot load default config file
    New_Face failed. Maybe the font path is wrong.
    Please supply the text font file (~/.mplayer/subfont.ttf).
    subtitle font: load_sub_face failed.
    New_Face failed. Maybe the font path is wrong.
    Please supply the text font file (~/.mplayer/subfont.ttf).
    subtitle font: load_sub_face failed.
    Pos: 0.1s 5f ( 0%) 0.83fps Trem: 0min 0mb A-V:0.000 [0:0]

    Skipping frame!
    Pos: 0.1s 6f ( 0%) 0.98fps Trem: 0min 0mb A-V:0.000 [0:0]

    Flushing video frames.
    Writing header…
    ODML: vprp aspect is 16:9.
    Writing header…
    ODML: vprp aspect is 16:9.
    Writing index…
    Writing header…
    ODML: vprp aspect is 16:9.

    Video stream: 11809.440 kbit/s (1476179 B/s) size: 73809 bytes 0.050 secs 6 frames
    x264 [info]: frame I:1 Avg QP:31.52 size: 30966
    x264 [info]: frame P:1 Avg QP:32.14 size: 30851
    x264 [info]: frame B:3 Avg QP:32.51 size: 3997
    x264 [info]: consecutive B-frames: 20.0% 0.0% 0.0% 80.0% 0.0% 0.0% 0.0% 0.0% 0.0%
    x264 [info]: mb I I16..4: 77.5% 8.3% 14.1%
    x264 [info]: mb P I16..4: 50.0% 21.5% 8.7% P16..4: 11.5% 1.4% 2.1% 0.0% 0.0% skip: 4.8%
    x264 [info]: mb B I16..4: 4.1% 0.6% 0.0% B16..8: 67.4% 2.8% 0.8% direct: 0.0% skip:24.3% L0:56.6% L1:42.8% BI: 0.5%
    x264 [info]: 8×8 transform intra:16.3% inter:96.2%
    x264 [info]: direct mvs spatial:33.3% temporal:66.7%
    x264 [info]: coded y,uvDC,uvAC intra: 21.3% 34.9% 11.6% inter: 4.1% 7.1% 3.4%
    x264 [info]: i16 v,h,dc,p: 7% 90% 1% 2%
    x264 [info]: i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 17% 20% 42% 3% 2% 3% 4% 3% 5%
    x264 [info]: i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 5% 90% 3% 0% 0% 0% 0% 0% 0%
    x264 [info]: i8c dc,h,v,p: 8% 77% 11% 4%
    x264 [info]: Weighted P-Frames: Y:100.0% UV:100.0%
    x264 [info]: ref B L0: 100.0% 0.0%
    x264 [info]: ref B L1: 99.9% 0.1%
    x264 [info]: kb/s:11809.44
    MEncoder Redxii-SVN-r37946-6.2.0 (i686) (C) 2000-2017 MPlayer Team
    FFmpeg version: N-86746-g2f84f40d45
    Build date: 2017-07-10 02:57:44 EDT

    WARNING: OUTPUT FILE FORMAT IS _AVI_. See -of help.
    success: format: 0 data: 0x0 — 0x130e0
    libavformat version 57.75.100 (internal)
    AVI file format detected.
    [aviheader] Video stream found, -vid 0
    VIDEO: [h264] 1920×1080 24bpp 100.000 fps 11809.4 kbps (1441.6 kbyte/s)
    Audio only file format detected.
    [V] filefmt:65536 fourcc:0x34363268 size:1920×1080 fps:100.000 ftime:=0.0100
    videocodec: framecopy (1920×1080 24bpp fourcc=34363268)
    audiocodec: framecopy (format=3 chans=2 rate=48000 bits=32 B/s=384000 sample-8)
    Writing header…
    ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
    Writing header…
    ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.
    Pos: 0.0s 5f (99%) 0.00fps Trem: 0min 0mb A-V:-0.000 [0:0]
    Writing index…
    Writing header…
    ODML: Aspect information not (yet?) available or unspecified, not writing vprp header.

    Video stream: 11809.440 kbit/s (1476179 B/s) size: 73809 bytes 0.050 secs 5 frames

    Audio stream: 3072.000 kbit/s (384000 B/s) size: 17965056 bytes 46.784 secs
    11:37:20,17
    Для продолжения нажмите любую клавишу . . .
    e:_FPSka>

    После этого перекодировка останавливается и на выходе получается почти нулевой файл с одним кривым кадром.

    Тестовый файл при этом перекодируется нормально. Куда копать? Спасибо.

  • Здравствуйте, Олег.

    Ругается на нестандартный входной mp4.
    Попробуйте сначала просмотреть ваш mp4 с помощью команды:
    mplayer.exe video.mp4

    mplayer.exe можно найти в папке fpska/mencoder/

    А откуда этот mp4, имеется ввиду с какого устройства?

    Если у Вас есть какой-нибудь нейтральный ролик с этого устройства, то пришлите мне плиз. Я разберусь и скажу, что и как делать.