Оценил возможности 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)
На очереди — аналогичные скрипты для других форматов стереовидео.
А бывает скрипт чтобы наоборот из анаглифа в интерлейс?
Скриптом такое не сделаешь. Наверное, можно плагином, но это очень нетривиальная задача.
В общем случае конвертация из анаглифа в стереопару сводится к решению трех уравнений с шестью неизвестными. Такая система имеет бесконечно много решений, то есть «однозначно» конвертировать анаглиф в стереопару довольно сложно. Придется применять алгоритмы, которые с той или иной вероятностью смогут «предсказать» цвета пикселей левого и правого изображений. Скорее всего, можно будет добиться более-менее нормальных результатов для фото, и довольно странного видео с артефактами.
Если же применять алгоритмы наподобие «предсказания» в видеокодеках, то результат будет сродни 2D-3D конверсии.
Есть разработки kostasoft — http://kostasoft.com/index.php?mod=pages&page=deAnal , но там требуется, чтобы была одна из монокартинок.
PS Точной цветопередачи, скорее всего, добиться не удастся — так что смысла в конверсии не очень много.
Нарыл скрипт для создания стереопары из моно и анаглифа, провел некоторые эксперементы над фильмом «Мой кровавый Валентин», но результат желает лучшего
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)
может внесете корективы для улучшения желаемого результата?