LINUX.ORG.RU

IVTC на лету в плеере

 ,


0

1

Кто знает какие решения? На ум приходит:

1. IVTC фильтр в VLC. Но мне попался DVD Kickboxer 3, где 80% FILM, в результате из-за постоянного переключения Film-Video страдает плавность. По идее нужно следовать Pulldown флагам, а потом сразу применять IVTC как делают оффлайн решения.

2. Фильтры mplayer (mpv, SMPlayer) http://www.mplayerhq.hu/DOCS/HTML/ru/menc-feat-telecine.html Проблема в том, что mplayer, насколько я понял, делает IVTC, но выкидывать дубликаты фильтром softskip (29.97>23.976) умеет только mencoder при кодировании. При воспроизведении остаются рывки.
http://manpages.ubuntu.com/manpages/cosmic/ru/man1/mplayer.1.html > softskip (Имеет смысл только с MEncoder).
Опцию decimate mplayer игнорирует. Видно менять частоту кадров фильтры при воспроизведении все-таки не могут. Поправьте, если я не прав.

3. На винде я бы просто скормил Avisynth скрипт с IVTC любому плееру. В линуксе есть Vapoursynth (для убунты есть ppa https://launchpad.net/~djcj/ archive/ubuntu/vapoursynth)
Предложенный там вариант http://www.vapoursynth.com/doc/plugins/vivtc.html слишком сложный и медленный для realtime. Я его сократил:

import vapoursynth as vs
core = vs.get_core(4)

input_clip = core.d2v.Source(input=r'/home/denis/Kickboxer.d2v')

matched_clip = core.vivtc.VFM(input_clip, 1)
decimated_clip = core.vivtc.VDecimate(matched_clip)
decimated_clip.set_output()

Скорость все равно немногим больше realtime. Неудобства по сравнению с виндой: приходится использовать консольный патченный mpv, Vapoursynth в отличии от Avisynth не поддерживает звук, его надо подавать плееру отдельной дорожкой. mpv из ppa требует также их libass и не совсем совместим по опциям с SMPlayer из репозитория убунты. Это можно обойти скриптом переключения версий, но очень уж все геморно получается. Через pipe же, наверное, не будет работать перемотка.

4. Сделать деинтерлейс (например Yadif) в двойную частоту 59.94p. Недостатки: ресурсоемкость, хуже качество из-за деинтерлейса прогрессивных кадров, частоту монитора желательно иметь 60 или кратной для плавного воспроизведения. Подобным образом работают железные плееры, скорее всего.

5. Не париться, просто перекодировать DVD в Handbrake и смотреть рип. Неплохое решение, жаль что свободное место на винте стремительно подходит к концу, чтобы тратить его на пережатки.

6. Поставить винду в дуалбут.

Что еще я упустил?

Некоторые источники лучше смотреть в Yadif(2x), некоторые в VLC с IVTC, некоторые лучше играет Xine и Mplayer без обработки. Найдите сцену с медленным движением и сравнивайте глазами его ровность. Конечно, лучше предпочитать непересжатое видео, там меньше шансов нарваться на косяки при риповании.

Например, довольно часто попадаются DVD (особенно музыкальные) транскодированные из другой системы (PAL, NTSC) методом frame blending. 99% рипов с них будет с дерготней. Например, если это NTSC, его играть нужно в 59.94p или специальными инструментами вытаскивать 25p. А что мы видим на трекерах? Только что был свидетелем: 3 рипа, все кривые. 29.97, 23.976 и 25 (тупо получена из 29.97), ни одна из частот не является корректной, это просто потрясающе. Каюсь, сам так делал раньше. Или честное интерлейсное видео - большинство рипов не передадут всю его плавность. Поэтому рипы лучше избегать.

anonymous
()
Ответ на: комментарий от anonymous

Причем, ирония в том, что 29.97 неправильно, конечно, но еще куда ни шло (особенно, если использовался linear blend деинтерлейсинг), а примитивные <=25 это совсем плохо. Но именно они ничтоже сумняшеся получают лычку «проверено».

anonymous
()
24 января 2019 г.

А чем делать хотя бы просто decimate? На рутрекере целые сериалы выкладывают с кривым fps. ffmpeg'овский параметр decimate=cycle=6 mpv отказывается есть, а mplayer ест, но разницы нет.

Придется, наверное, заводить в дуалбутной винде PotPlayer с Avisynth или делать пакетное конвертирование. А хочется в realtime исправить под линуксом.
Хотя можно передать данные от ffmpeg к mpv через pipe, но вопрос заведется ли перемотка.

anonymous
()
Ответ на: комментарий от anonymous

Отказывается можно смотреть в ffplay
29.97>25:

ffplay -i input.mkv -vf decimate=cycle=6,scale=768:576 -fs
29.97>23.976:
ffplay -i input.mkv -vf decimate,scale=768:576 -fs

Вообще-то в первом случае частота получится 24.975 (25/1.001). Более точно в ffmpeg'овском decimate не задать, так как он оперирует целыми числами. Это значит, что каждые 40 секунд будет пропускаться полезный кадр. На деле это не очень заметно и всяко лучше, чем без коррекции смотреть. Вот, если бы на входе было 30, тогда получилось бы ровно 25.

anonymous
()
21 мая 2019 г.

DVD Kickboxer 3

Неактуально. Уже есть WEBDL 1080p, где с кадрами все в порядке, правда нет оригинальной дорожки, но ее не проблема вытащить с DVD и перетянуть при необходимости.

anonymous
()
1 июля 2019 г.

Vapoursynth PPA для Ubuntu мертв. Убунте доверился - в дураках остался!

Сначала он был тут https://launchpad.net/~djcj/ archive/ubuntu/vapoursynth потом перехал сюда https://launchpad.net/~djcj/ archive/ubuntu/hybrid теперь сюда https://launchpad.net/~vapoursynth/ archive/ubuntu/git-ppa но внимание, для 16.04 пакетов нет http://ppa.launchpad.net/vapoursynth/git-ppa/ubuntu/pool/main/v/vapoursynth/ . А ведь казалось бы еще недавно ставил в 16.04! Надо было хоть в web archive сохранить. Обсуждение этих лошадиных скачек здесь https://github.com/vapoursynth/vapoursynth/issues/443 и здесь https://github.com/vapoursynth/vapoursynth/issues/455 Не нравятся мне люди вокруг Vapoursynth, подленькие какие-то. И сам Vapoursynth не нравится.

anonymous
()
9 мая 2020 г.

Имеет смысл улучшить чувствительность дециматора, поменяв значения blockx и blocky с дефолтных 32 до 8 (размер сканируемой области) http://www.vapoursynth.com/doc/plugins/vivtc.html
Актуально для видео с черными полосами. Это код удалит каждый 25й кадр, приведя частоту из 25p в 24p:

import vapoursynth as vs
core = vs.get_core(2)
core.max_cache_size = 200
video = core.ffms2.Source("input.mkv")
decimated = core.vivtc.VDecimate(video, cycle=25, blockx=8, blocky=8)
decimated.set_output()
vspipe --y4m input.vpy - | ffmpeg -i pipe: -c:v mpeg2video -q:v 1 -aspect 16:9 output.mkv
Кстати, в 51 сборке обещают поддержку звука.

anonymous
()
Ответ на: комментарий от anonymous

Можно подключить ависинтовский TDecimate TIVTC.dll в VapourSynth (только в Windows и Wine). Он более функциональный:

import vapoursynth as vs
core = vs.get_core(2)
core.max_cache_size = 300
core.avs.LoadPlugin('c:/avisynth/plugins/TIVTC.dll')
video = core.ffms2.Source("input.mkv")
decimated = core.avs.TDecimate(video, mode=2, rate=24)
decimated.set_output()
Двухпроходный режим тоже работает. В этом случае кодировать придется дважды, во втором проходе энкод с первого прохода (который можно выполнить с легкими настройками) нужно удалить.

anonymous
()
Ответ на: комментарий от anonymous

Кстати, в Wine путь

wine "c:\vs\vspipe.exe"
можно сократить до
wine c:/vs/vspipe
Избегайте пробелов.

anonymous
()

Я теперь понимаю почему Iron_Bug ненавидит python. Обновил локально только один пакет pip, 8 мб, но под 1000 файлов. Это действительно рак и кривота. То ли дело сишные бинарники легкие маленькие.

xomon47
()
Ответ на: комментарий от xomon47

Вот пример нормального софта https://www.videohelp.com/software/Bitrate-Viewer-2 (почти, потому что он гадит редистрами прямо в system32, но их можно утащить в папку с программой). Total Uninstall и виртуалка вам в помощь в качестве тестовой площадки.

xomon47
()
1 августа 2020 г.
Ответ на: комментарий от anonymous

Отказывается можно смотреть в ffplay

ffplay похоже не работает и очень тормозит, несмотря на низкую загрузку процессора. Можно через pipe, но без перемотки:

ffmpeg -drc_scale 0 -i bad.mkv -vcodec rawvideo -acodec pcm_s16le -vf decimate=cycle=25,scale=1024:576 -ac 2 -f avi - | mpv -

Можно и с перемоткой в начале, но ее придется указывать вручную:
ffmpeg -ss 00:30:00 -drc_scale 0 -i bad.mkv -vcodec rawvideo -acodec pcm_s16le -vf decimate=cycle=25,scale=1024:576 -ac 2 -f avi - | mpv -

Обязательно вначале перед -i, работает на удивление быстро.
Параметры исправлений:
decimate=cycle=25 : видео 25p, каждый 25-й кадр дубль > после фильтра восст. исх. частота 24p или 23.976p
decimate=cycle=6 : видео 29.97p или 30p, каждый 6-й кадр дубль > после фильтра восст. исх. частота 25p
decimate=cycle=5 или просто decimate : видео 29.97p, каждый 5-й кадр дубль > после фильтра восст. исх. частота 23.976p
Пояснение:
cycle=25 означает из группы в 25 кадров удалить каждый 25-й кадр, то есть получится 24 кадра (24p).
Естественно, ffmpeg удаляет не абы какой кадр, а тот, который скорее всего является лишним (дублем).
В mpv для проверки структуры можно листать покадрово клавишами < >
scale=1024:576 необязательно, но можно выполнить софтовый ресайз до разрешения экрана или ресайзить в mpv.
Для изменения громкости после -ac 2 (стерео микс) можно указать -af volume=-10dB
Интересно, что во время паузы (пробел) mpv в этом режиме занимается буферизацией. Буфер 10 секунд, 73 мб. Помнится, на винде был какой-то плеер, который в простое накапливал декодированные данные, а потом в тяжелых моментах брал из кэша. Получается, здесь так же.

anonymous
()
Ответ на: комментарий от anonymous

decimate=cycle=5 : видео 29.97p, каждый 5-й кадр дубль > после фильтра восст. исх. частота 23.976p

Здесь пропорция:
5 - 29.97
4* - x
x=4*29.97/5=23.976
* 4 получили после выкидывания 1 кадра: 5-1=4.
Аналогично и другие примеры. А этот самый стандартный. Ну, конечно, может еще быть 30p>24p.

Бывает, надо выкидывать 2 кадра (может быть и разных) или больше. Но на линуксе это невозможно. Ни в ffmpeg, ни в VapourSynth. Только с помощью TDecimate в AviSynth. Под Linux портировали только его простейший mode=0 (причем, M=1 всегда). Ни mode=2, ни mode=4 никто не осилил или просто забил.
http://avisynth.nl/index.php/TIVTC/TDecimate

anonymous
()
Ответ на: комментарий от anonymous

Убунте доверился - в дураках остался

Я уже давно собрал под убунту (причем 16.04) и vapoursynth и кучу плагинов со всякими утилитами, если что. Скиллы неслабо прокачал. PPA уже не нужен. На линуксе надо прокачивать скиллы, иначе тебя будут иметь (мейнтейнеры).

anonymous
()
Ответ на: комментарий от anonymous

Откуда берется вся это кривота (дубли)? Хомяки форсят при энкоде определенную частоту, хорошо если выше (обычно 29.97). В результате получается дерготня в движении. А многие даже не знают из-за чего, как проверить и исправить. Особенно забавно, когда эту дерготню еще пытаются уплавнять в SVP.

anonymous
()
Ответ на: комментарий от anonymous

А ffmpeg зараза еще дубли вставляет неравномерно. Например, в 23.976>29.97 каждый 5-й кадр надо вставлять, но он может иногда 4, иногда 6. А потом дециматор мучается.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.