Dnes jsem ukončil všechny pokusy a pro toho, kdo by chtěl následovat, zde podle slibu shrnu celý postup. Ještě jednou děkuji Nickovi 007, prakticky vše je uděláno podle jeho doporučení. V předchozích textech jsou i odkazy na příslušné programy. Jsou tam i uvedeny některé podrobnosti o verzích a podobně. Takže dále toto nebudu rozvádět. Je docela možné, že lecos by šlo řešit jinak nebo i jednodušeji, ale pokud postup fungoval, šel jsem dál a jiné způsoby jsem nehledal. Sem tam mi program x264 vypsal i nějaké chybové hlášky, které se mi nepodařilo rozluštit, ale nikdy to nemělo vliv na výsledek. Ten byl vždy v pořádku. Rychlost výpočtů je 1 až 5 obrázků za sekundu podle rychlosti počítače.
Cíl práce: Jako zdroj je použito originální Blu-ray medium se stereoskopickou (3D) nahrávkou profesionálního filmu (kódování MPEG-4 MVC). Cíl je udělat si zálohu, která by byla ve 3D přehratelná obyčejným hardwarovým multimediálním přehrávačem na klasické 3D televizi nebo 3D projektoru. Můj multimediální přehrávač je schopen z hard-disku přehrát strukturu obyčejných Blu-ray medií nebo i samostatných souborů .m2ts, takže jsem pracoval takto. Není problém vyrobit cokoli jiného (zkoušel jsem např. soubory .mkv) změnou zadání v příkazovém řádku. Výsledné soubory jsem volil ve formátu .264 bez zvuku. S příslušným zvukem a případně se .sup titulky jsem je do struktury Blu-ray nebo do .m2ts míchal v TS-muxeru nakonec.
Odbočka: Pozor! Současné běžné 3D projektory jsou většinou podvod, nejsou to 3D přístroje! Dají se využít jen jako rychlé monitory (120Hz) k počítači. Můj projektor Acer H5360 (který byl podvodně deklarován jako 3D) tak funguje na 3D jen v sestavě počítač + systém nvidia 3D vision (podotýkám ale, že VELICE DOBŘE). Žádné jiné 3D vlastnosti nemá. Nedá se tedy na 3D zprovoznit s multimediálním přehrávačem. V menu má i možnost přepnout na šachovnicově prokládané 3D (systém DLP-3D) - toto ale nepracuje. TENTO PROJEKTOR NEMÁ ZABUDOVÁN ŽÁDNÝ INFRAVYSÍLAČ PRO AKTIVNÍ 3D BRÝLE!!! Podrobnosti viz můj jiný příspěvek v rubrice "projektory". Teprve nyní (únor 2011) se objevilo cca 5 typů skutečných 3D projektorů, které mají stejné schopnosti, jako běžné 3D televize, jejich cena je ale nepochopitelně přes 100 000.- Kč, přestože to jsou jinak obyčejné projektory (světelný tok např. pouze 1000 lm). Konec odbočky.
Potřebné programy nebo soubory: x264 32 bitů (zadávání v příkazovém řádku - cmd.exe), AviSynth 32 bitů, AnyDVD HD, eac3to (zadávání v příkazovém řádku), AvsP s přehrávačem Clasic Player Home Cinema (pro psaní a kontrolu příkazů Avisynthu), 3Dsubtitler, SupRip, Java 64 bitů (nutná pro funkci programu 3Dsubtitler), MVC decoder (vytvoří se jím H264StereoSource.dll, decoder.cfg a vzorové sample.avs), Anaglypher.dll (např. ze stránek
http://shura.luberetsky.ru/plaginy-dlya ... naglypher/), Mask 720p.png a Mask 1080p.png (např. ze stránek
http://www.dlp.com/3D), TS-muxer, VSfilter .dll (např. ze stránek
http://www.videohelp.com/tools/VSFilter_DirectVobSub).
V adresáři x264 na disku C jsem měl program x264
V adresáři MVC na disku C byly soubory: VSFilter.dll, H264StereoSource.dll, Anaglypher.dll, decoder.cfg
V adresáři MVC na disku C byly dále obrázky: Mask 720p.png, Mask 1080p.png
V adresáři MVC na disku C byly dále všechny skripty Avisynthu
V adresáři eac3to na disku C byl program eac3to
V adresáři 3D na disku F byly všechny zdrojové a výsledné AV soubory
Virtuální disková jednotka pro vložení ISO souborů byla: M
Vypsání všech příkazů x264 po stránkách (pro případ potřeby): C:\x264\x264 --fullhelp | more
1. Nejprve je potřeba z media vybrat potřebné stopy (jazyky, titulky...). Lze to z media při spuštěné ANY a nebo bez ANY z ISO, vyrobeném v ANY):
Výpis playlistu: C:\eac3to\eac3to M:\BDMV
Info o hlavním filmu (byl-li 1):
C:\eac3to\eac3to M:\BDMV 1)
Vytažení potřebných obrazových, zvukových a titulkových stop (čísla jsou vybrána předchozím příkazem):
C:\eac3to\eac3to M:\BDMV 1) 2: F:\3D\left.h264 3: F:\3D\right.h264 4: F:\3D\audio.DTSHD.dtshd 14: F:\3D\title.sup
Je-li nutno mít vytaženou zvukovou stopu převedenu do Ac3:
C:\eac3to\eac3to M:\BDMV 1) 2: F:\3D\left.h264 3: F:\3D\right.h264 4: F:\3D\audio.Ac3 14: F:\3D\title.sup
Je-li nutno mít vytaženou zvukovou stopu převedenou do základního sterea:
C:\eac3to\eac3to M:\BDMV 1) 2: F:\3D\left.h264 3: F:\3D\right.h264 4: F:\3D\audio.Ac3 14: F:\3D\title.sup -down2
2. Levá obrazová stopa je již výsledný levý obraz. Pravá obrazová stopa se ale nedá přehrát, je kódována jako rozdíl od levé stopy. Nutno tedy správnou pravou stopu vypočítat.
Sample.avs (script Avisynthu). Číslo vpravo dole je počet obrázků získaný z výše uvedeného vytažení stop:
LoadPlugin("C:\MVC\H264StereoSource.dll")
H264StereoSource("C:\MVC\decoder.cfg",156201)
V souboru "decoder.cfg" musí být uvedeny plné cesty k souborům. Původní text:
InputFile = "left.h264" # H.264/AVC coded bitstream
InputFile2 = "right.h264" # H.264/AVC coded bitstream
se musí např. v Poznámkovém bloku přepsat na:
InputFile = "F:\3D\left.h264" # H.264/AVC coded bitstream
InputFile2 = "F:\3D\right.h264" # H.264/AVC coded bitstream
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\3D\right.264" "C:\MVC\sample.avs"
Vznikne plnohodnotný pravý kanál right.264.
3. výpočet videa "obraz vedle obrazu" (Side-by-side) pro multimediální přehrávač:
Sample2.avs (script Avisynthu):
VideoLeft = DirectShowSource("F:\3D\left.h264", audio=false)
VideoRight = DirectShowSource("F:\3D\right.264", audio=false)
VideoStacked = StackHorizontal(VideoLeft,VideoRight)
VideoResize = LanczosResize(VideoStacked, 1920, 1080)
VideoConvert = ConvertToYV12(VideoResize)
Trim(VideoConvert, 1, 156201) # omezení délky od do, je-li potřeba
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\3D\FinalSide-by-side.264" "C:\MVC\sample2.avs"
4. Výpočet videa prokládaného šachovnicově, někdy nazývaného také "jako střešní tašky" (DLP-3D)
Sample11.avs (script Avisynthu) pro 720p:
#Load Left and Right Video
VideoLeft = DirectShowSource("F:\3d\left.h264", audio=false)
VideoLeft720 = BilinearResize(VideoLeft, 1280, 720).ConvertToRGB32
VideoRight = DirectShowSource("F:\3d\right.264", audio=false)
VideoRight720 = BilinearResize(VideoRight, 1280, 720).ConvertToRGB32
#Load Video Mask
MaskClip = ImageSource("C:\MVC\mask 720p.png", end=FrameCount(VideoLeft720)-1, fps=framerate(VideoLeft720)).ConvertToRGB32
# Mask and Combine
Top = mask(VideoLeft720, MaskClip)
Video3d = layer(VideoRight720, Top, "add", 255,0,0,0,true)
Trim(Video3d, 1, 156201) # omezení délky, je-li potřeba.
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\ 3D\ final DLP-3D 720.264" "C:\MVC\sample11.avs"
Sample10.avs (script Avisynthu) pro 1080p:
#Load Left and Right Video
VideoLeft = DirectShowSource("F:\3d\left.h264", audio=false).ConvertToRGB32
VideoRight = DirectShowSource("F:\3d\right.264", audio=false).ConvertToRGB32
#Load Video Mask
MaskClip = ImageSource("C:\MVC\mask 1080p.png", end=FrameCount(VideoLeft)-1, fps=framerate(VideoLeft)).ConvertToRGB32
# Mask and Combine
Top = mask(VideoLeft, MaskClip)
Video3d = layer(VideoRight, Top, "add", 255,0,0,0,true)
Trim(Video3d, 1, 156201) # omezení délky, je-li potřeba.
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\3D\final DLP-3D 1080.264" "C:\MVC\sample10.avs"
5. Výpočet červeno-zeleného videa (Anaglyph red - green) - brýle např. firma Tridakt
Sample9.avs (script Avisynthu):
VideoLeft = DirectShowSource("F:\3d\left.h264", audio=false)
VideoLeftRGB24 = ConvertToRGB24(VideoLeft)
VideoRight = DirectShowSource("F:\3d\right.264", audio=false)
VideoRightRGB24 = ConvertToRGB24(VideoRight)
LoadPlugin("C:\MVC\Anaglypher.dll")
#Odzkoušená nejlepší kombinace:
VideoAnagl = Anaglypher(VideoLeftRGB24, VideoRightRGB24, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1)
VideoYV12 = ConvertToYV12(VideoAnagl)
Trim(VideoYV12, 1, 156201) # omezení délky, je-li potřeba
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\3D\final Anaglyph.264" "C:\MVC\sample9.avs"
6. Výpočet .sup titulků pro Side-by-side:
Programem SupRip se z obrázkového title.sup vytvoří textový titulkový soubor title.srt (nebo se title.srt stáhnou z internetu, viz předešlé části diskuze). Nepovedlo se mi převést grafické titulky přímo, ale vůbec to nevadí. I zde měl Nick007 pravdu v tom, že originální titulky i u továrních draze koupených Blu-ray mají chyby a není na škodu věnovat tomu čas a toto vše při převodu přes .srt opravit.
Programem 3Dsubtitler se z title.srt vytvoří nové grafické titulky "new title.sup". Ty se do výsledku namixují klasicky v TS-muxeru jako jiné stopy
POZOR: V TS-MUXERU MUSÍ TYTO TITULKY DOSTAT KONKRÉTNÍ NÁZEV STOPY - NAPŘ. cze-Czech! Pokud se titulková stopa jen vloží bez přejmenování, tak v některých přehrávačích nejde spustit!!!
7. Vyrobení obrazové stopy s titulky pevně nahranými do videa:
V činnostech podle bodů 3, 4 a 5 se místo levé obrazové stopy "left.h264" zadá nově vypočtená stopa s pevnými titulky "left-tit.264" a místo pravé stopy "right.264" se zadá nově vypočtená stopa "right-tit.264".
Výpočet left-tit.264:
Sample6 pro nahrání titulků do levé stopy (script Avisynthu):
DirectShowSource("F:\3D\left.h264", audio=false)
# add subtitles
LoadPlugin("C:\MVC\vsfilter.dll")
TextSub("F:\3D\title.srt")
# convert color space
ConvertToYV12()
Trim(1, 156201) # omezení délky, je-li třeba
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\3D\ left-tit.264 " "C:\MVC\sample6.avs"
Výpočet right-tit.264:
Sample7 pro nahrání titulků do pravé stopy (script Avisynthu):
DirectShowSource("F:\3D\right.264", audio=false)
# add subtitles
LoadPlugin("C:\MVC\vsfilter.dll")
TextSub("F:\3D\title.srt")
# convert color space
ConvertToYV12()
Trim(1, 232600) # omezení délky
Příkazový řádek:
C:\x264\x264.exe --profile high --level 4.1 --preset slower --crf 18 --deblock -3:-3 --bframes 8 --aq-strength 0.8 --merange 32 --fps 24000/1001 --output "F:\3D\right-tit.264" "C:\MVC\sample7.avs"
Všechna výsledná videa mimo DLP-3D byla po převedení do struktury Blu-ray TS-muxerem přes multimediální přehrávač s kladným výsledkem odzkoušena na 3D televizi, anaglypht i na obyčejné televizi. Odzkoušen nebyl formát DLP-3D, protože, jak jsem psal v úvodu tohoto příspěvku, můj projektor je podvod a DLP-3D bohužel neumí. Sejmutím jednoho snímku z DLP-3D a jeho prozkoumáním ve Photoshopu jsem ale zjistil, že převod do šachovnicové interpolace je v pořádku a na správném stroji by i toto video DLP-3D mělo jako 3D správně hrát.
Zdravím, Ruda.