samedi 21 novembre 2020

Avisynth - Script pour mettre votre vidéo en 3D Side By Side!

 En faisant quelque recherches sur des scripts Avisynth, j'ai trouvé un script qui peut mettre votre vidéo en 3D Side By Side.

Qu'est-ce que la 3D Side By Side ?

Voici une dfinition trouvé sur : https://www.lcd-compare.com/

"Les sources 3D side by side fournissent des images divisées horizontalement en deux parties. Chaque partie contient une image de la même scène mais elles sont enregistrées selon un point de vue différent, pour correspondre à la vision respective de l'oeil droit et de l'oeil gauche."

Une video en 3D Side By Side affiche donc 2 images (1 pour chaque oeil) par trame :

Pour convertir une vidéo "normale" en 3D Side By Side, vous pouvez utiliser ce script Avisynth trouvé sur le site http://www.3dvision-blog.com :

## 2D to 3D Realtime Video Conversion Avisynth script v0.3b
## Made by Anton Belev at 3D Vision Blog
## http://www.3dvision-blog.com
## Additionally extended by Martin Haverland at audiomh.de for quality resize
## and different output modes including interlaced format for use in non-3d specific players e.g. windows media player.


## Open the video file for conversion, change the video file name
video2d = DirectShowSource("file.avi")

## Increase video brightnes on dark videos, good for 3D Vision owners
# video2d = video2d.Tweak(Bright=10)

## Convert to RGB32 to avoid the width restrictions
video2d = ConvertToRGB32(video2d)


## Optional aspect ratio maintaining quality resize for 3d monitor target resolution.
## Very cpu intensive, may be for offline use only, e.g. in virtualdubmod.
## 2x 3.0ghz cpu may give you a framerate of 16fps while running the whole script in virtualdubmod including xvid compression in HDTV quality saving setting.
## Offers great quality in the result video for fullscreen playback in every .avs capable player later.
## Also reduces ghosting if the original file resolution is smaller than the target resolution.
# videoW = width(video2d)
# videoH = height(video2d)
## For 19" Zalman use 1280, for 22" Zalman Trimon it is 1680 etc.
# hzTargetSize = 1280
# video2d = Lanczos4Resize(video2d, hzTargetsize, hzTargetsize * videoH / videoW)
## Commenting out the above resizing maintains realtime capability!


## Get video width/height and set the frame stretch factor
## Lower the value 100 to increase frame stretch, may introduce ghosting
videoW = width(video2d)
videoH = height(video2d)
ResW = videoW + (videoW / 100)
CropW = (ResW - videoW) / 2


## Create variables for left and right frame with one frame difference
## This is the Plufrich-like simulation that creates illusion of depth from movement
f1 = video2d
f2 = DeleteFrame(video2d, 0)


## Stretch the right frame to further the depth effect
f1 = LanczosResize(f1, ResW, videoH)
f1 = Crop(f1, 0, 0, videoW, videoH)

## Stretch the left frame to further the depth effect
f2 = LanczosResize(f2, ResW, videoH)
f2 = Crop(f2, CropW, 0, videoW, videoH)


## Output the two video frames in a side-by-side / parallel format
## Use this as a default for playing back on 3D Vision (Side by Side L/R)
StackHorizontal(f2, f1)

## Output the two video frames in a Above/Below format (like Sony?)
# StackVertical(f2,f1)


## Output the two video frames in a page flipping format for shutter glasses etc.
## The Tweak as proposed by eslave is for brighter image, modify the value 30
# f1 = f1.ConvertToYV12.Tweak(Bright=30)
# f2 = f2.ConvertToYV12.Tweak(Bright=30)
# Interleave(f2,f1)


## Output the two video frames in anaglyph red-cyan as proposed by eslave
# MergeRGB(f2.ShowRed, f1.ShowGreen, f1.ShowBlue)

## For reversed anaglyph i.e. cyan-red
# MergeRGB(f1.ShowRed, f2.ShowGreen, f2.ShowBlue)


## Output the two video frames in anaglyph yellow-blue as proposed by eslave (untested)
# f1 = f1.ConvertToYV12(matrix="PC.601").tweak(bright=12.5, sat=1.25, coring=false)
# f1 = f1.ConvertToRGB32
# f1 = f1.Levels(0, 1.05, 255, 0, 255, coring=false)
# MergeRGB(f2.ShowRed, f1.ShowGreen, f1.ShowBlue)

## Output the two video frames in anaglyph blue-Yellow as proposed by eslave (untested)
# f2 = f2.ConvertToYV12(matrix="PC.601").tweak(bright=12.5, sat=1.25, coring=false)
# f2 = f2.ConvertToRGB32
# f2 = f2.Levels(0, 1.05, 255, 0, 255, coring=false)
# MergeRGB(f1.ShowRed, f2.ShowGreen, f2.ShowBlue)


## Output two video frames in Interlaced mode
## Ueed for Zalman Trimon, Acer Aspire 3D etc.
# f1 = SeparateFields(f1)
# f1 = SelectEven(f1)
# f2 = SeparateFields(f2)
# f2 = SelectOdd(f2)
# interleave(f2,f1)
# AssumeFieldBased()
# weave()

 Dans ce script le fichier vidéo qui sera mis en 3D Side By Side s'appelle : "file.avi" . Il faudra donc nommer votre vidéo file.avi ou, modifier le script avec le nom de votre vidéo.

Si vous souhaitez utilier un fichier avec une autre extension que .avi, il faudra que vous remplaciez la ligne :

video2d = DirectShowSource("file.avi")

par :

video2d = FFMPEGSource2("file.mp4", atrack=1)

avec bien sûr votre fichier vidéo qui s'appelle file.mp4. Si votre fichier porte un nom différent, vous devez modifier le script avec le nom de votre fichier, ou alors le renommer "file.mp4". Avec la commande FFMPEGSource2 vous pouvez ouvrir toutes sorte de fichiers vidéo (MPEG, ou autre) , mis pas AVI (il faudra donc utiliser la commande DirectShowSource.

 Après avoir copié et collé ce script dans un fichier .txt que vous aurez ensuite renommer en .avs, ouvrez le dans VirtualDub. Retraitez le et c'est bon! 

Pour tester le script vous aurez besoin de :

 - Virtualdub : VirtualDub 1.10.4 version 32 Bits

- Avisynth : https://sourceforge.net/projects/avisynth2/files/AviSynth%202.6/AviSynth%202.6.0/AviSynth_260.exe/download 

Avisynth n'est plus développé depuis 2015, je vous recommande d'utiliser Avisynth+ : https://github.com/AviSynth/AviSynthPlus/releases/download/v3.6.1/AviSynthPlus_3.6.1_20200619.exe