Про стереовидео и AviSynth

Оценил возможности AviSynth по обработке видео. Например, вот так можно сделать анаглиф из интерлейсного стереоролика (с чередованием строк – левая-правая, левая-правая).

Clip=DirectShowSource("D:\My Downloads\The_French_Line_3D\VIDEO_TS\MJPEGexample.avi")

w=Width(Clip)
H=Height(Clip)

AssumeFrameBased(Clip)

Separated=Clip.SeparateFields()

Even=SelectEven(Separated)
Odd=SelectOdd(Separated)

Merge(ConvertToRGB(Even).RGBAdjust(0, 1.0, 1.0, 1.0), ConvertToRGB(Odd).RGBAdjust(1.0, 0, 0, 1.0))

Lanczos4Resize(W, H)

Levels(0, 2, 255, 0, 255)

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

3 комментария

  1. Анатолий пишет:

    А бывает скрипт чтобы наоборот из анаглифа в интерлейс?

    • Скриптом такое не сделаешь. Наверное, можно плагином, но это очень нетривиальная задача.

      В общем случае конвертация из анаглифа в стереопару сводится к решению трех уравнений с шестью неизвестными. Такая система имеет бесконечно много решений, то есть “однозначно” конвертировать анаглиф в стереопару довольно сложно. Придется применять алгоритмы, которые с той или иной вероятностью смогут “предсказать” цвета пикселей левого и правого изображений. Скорее всего, можно будет добиться более-менее нормальных результатов для фото, и довольно странного видео с артефактами.

      Если же применять алгоритмы наподобие “предсказания” в видеокодеках, то результат будет сродни 2D-3D конверсии.

      Есть разработки kostasoft – http://kostasoft.com/index.php?mod=pages&page=deAnal , но там требуется, чтобы была одна из монокартинок.

      PS Точной цветопередачи, скорее всего, добиться не удастся – так что смысла в конверсии не очень много.

  2. Анатолий пишет:

    Нарыл скрипт для создания стереопары из моно и анаглифа, провел некоторые эксперементы над фильмом “Мой кровавый Валентин”, но результат желает лучшего
    vidL = AVISource(”D:\mono.avi”,false)
    vidROrig = AVISource(”D:\anaglif.avi”,false)
    VidL=ConvertToRGB(vidL)
    VidROrig=ConvertToRGB(vidROrig)
    VidR=VidROrig
    vidColor = AVISource(”D:\anaglif.avi”,false)
    vidColor= BilinearResize(VidColor,64, 64)
    vidColor= BilinearResize(VidColor,width(vidL), height(vidL))
    VidR=MergeRGB (Vidr.ShowGreen (”YV12″),vidR.ShowGreen (”YV12″),vidR.ShowGreen (”YV12″))
    VidR=ConvertToYV12(VidR)
    VidR=mergechroma(vidr,VidColor)
    VidR=ConvertToRGB(vidR)
    Stackhorizontal(VidR,VidL)

    может внесете корективы для улучшения желаемого результата?