AVISynth Scriptoptimierung

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • AVISynth Scriptoptimierung

    Anzeige
    Hey,

    ich habe eine kleine Frage, undzwar in wie weit man diesen AVISynth Script optimieren kann, damit das Encoding schneller geht.

    Quellcode

    1. LoL=AVISource("D:\PlayClaw 4 Recordings\League of Legends 2014-02-02 15-19-14-734.avi",audio=false).AssumeFPS(30,1).ConvertToYV12()
    2. LoLBereichLoadOverlay=LoL.Trim(0,1523)
    3. LoLBereichOverlay=LoL.Trim(1523,50363)
    4. LolBereichOhneOverlay=LoL.Trim(50363,0)
    5. return (AVISource("E:\Eigene Dateien\Eigene Videos\Mayesters Intro\Intro.avi",audio=false).AssumeFPS(30,1)+LoLBereichLoadOverlay.Overlay(ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Video\1080p champ loading Overlay.png").AssumeFPS(30,1),mask=ImageReader("E:\Eigene Dateien\Eigene Bilder\Livestream\Video\1080p champ loading Overlay.png",pixel_type="RGB32").ShowAlpha(pixel_type="RGB32"))+LoLBereichOverlay.Overlay(ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Season 4 Overlay Mega Pack by Temporalcortex\Season 4 Overlay Mega Pack by Temporalcortex\Ocelote Overlay.png").AssumeFPS(30,1),mask=ImageReader("E:\Eigene Dateien\Eigene Bilder\Livestream\Season 4 Overlay Mega Pack by Temporalcortex\Season 4 Overlay Mega Pack by Temporalcortex\Ocelote Overlay.png",pixel_type="RGB32").ShowAlpha(pixel_type="RGB32"))+LoLBereichOhneOverlay).FadeIO2(20,fps=30)


    Der Script ist nur für League of Legends, es gibt 3 Bereiche, von denen die ersten beiden unterschiedliche Overlays bekommen (werden durch die Trims festgelegt, passe ich pro Folge an)

    Vielen Dank für eure Bemühungen!

    Ich verbleibe,

    mit freundlichen Grüßen
    Mayesters
  • Du solltest das Script einfach in verschiedene Bereiche unterteilen und so wie du es für LoL gemacht hast pro (vllt. auch nicht für jeden) Rückgabewert eine Variable definieren.
    Genauso kannst du auch die Trimwerte in Variablen packen, auch die Dateipfade, damit du nur am Anfang des Scripts die Werte der Variablen anpassen musst und dann im unteren Teil nichts mehr tun musst.
    Das Intro solltest du einmal encoden und dann mit mkvmerge vor das eigentliche Video machen, spart dir Zeit.

    Ansich wirst du keine Zeit aus dem Script rausholen, außer du lässt das Video raus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von curi0s ()

  • Anzeige
    Das Skript ist total unübersichtlich und könnte nicht im Geringsten so wie es ist optimiert werden. ö.ö Kurz: Es wurde schlampig gearbeitet. Eine gute Struktur und man hätte es mit MT aufrüsten können, damit der Encode schneller geht.

    Ich schau mal ob ich das auseinandergefummelt bekomme und dir das optimieren kann. Aber fürs nächste mal: Bitte unterteilen in:
    #Plugins, Imports
    #Sourcen
    #Verarbeitungsprozesse etc.
    #Funktionen

    Diese Reihenfolge immer einhalten am besten. Dann kann man das gut Strukturieren.

    Edit: Erst mal das ganze Strukturiert, damit man überhaupt sieht was du da machst:

    Quellcode

    1. #AVIs laden
    2. LoL=AVISource("D:\PlayClaw 4 Recordings\League of Legends 2014-02-02 15-19-14-734.avi", false).AssumeFPS(30,1).ConvertToYV12()
    3. a1=AVISource("E:\Eigene Dateien\Eigene Videos\Mayesters Intro\Intro.avi", false).AssumeFPS(30,1)
    4. #Bilder + Alphamasken laden
    5. b1=ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Video\1080p champ loading Overlay.png",0,0,30, pixel_type="RGB32")
    6. b1mask=b1.ShowAlpha(pixel_type="RGB32")
    7. b2=ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Season 4 Overlay Mega Pack by Temporalcortex\Season 4 Overlay Mega Pack by Temporalcortex\Ocelote Overlay.png",0,0,30, pixel_type="RGB32")
    8. b2mask=b2.ShowAlpha(pixel_type="RGB32")
    9. #Schneiden
    10. LoLBereichLoadOverlay=LoL.Trim(0,1523)
    11. LoLBereichOverlay=LoL.Trim(1523,50363)
    12. LolBereichOhneOverlay=LoL.Trim(50363,0).FadeIO2(20,fps=30)
    13. #Zusammenfügen
    14. a1 ++ Overlay(LoLBereichLoadOverlay, b1, 0, 0 , b1mask) ++ Overlay(LoLBereichOverlay, 0, 0, b2, b2mask) ++ LoLBereichOhneOverlay
    Alles anzeigen


    Edit2: Mit AVISynth MT kannste dem ganzen einen Multithreading geben, damit der Encode etwas schneller geht. Das Skript sieht dann entsprechend so aus:

    Quellcode

    1. #AVIs laden
    2. SetMTMode(3)
    3. LoL=AVISource("D:\PlayClaw 4 Recordings\League of Legends 2014-02-02 15-19-14-734.avi", false).AssumeFPS(30,1).ConvertToYV12()
    4. a1=AVISource("E:\Eigene Dateien\Eigene Videos\Mayesters Intro\Intro.avi", false).AssumeFPS(30,1)
    5. #Bilder + Alphamasken laden
    6. b1=ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Video\1080p champ loading Overlay.png",0,0,30, pixel_type="RGB32")
    7. b1mask=b1.ShowAlpha(pixel_type="RGB32")
    8. b2=ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Season 4 Overlay Mega Pack by Temporalcortex\Season 4 Overlay Mega Pack by Temporalcortex\Ocelote Overlay.png",0,0,30, pixel_type="RGB32")
    9. b2mask=b2.ShowAlpha(pixel_type="RGB32")
    10. #Schneiden
    11. SetMTMode(1) # Wenn es mit Mode 1 nicht gehen sollte, mal Mode 2 versuchen
    12. LoLBereichLoadOverlay=LoL.Trim(0,1523)
    13. LoLBereichOverlay=LoL.Trim(1523,50363)
    14. LolBereichOhneOverlay=LoL.Trim(50363,0).FadeIO2(20,fps=30)
    15. #Zusammenfügen
    16. a1 ++ Overlay(LoLBereichLoadOverlay, b1, 0, 0 , b1mask) ++ Overlay(LoLBereichOverlay, 0, 0, b2, b2mask) ++ LoLBereichOhneOverlay
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Sagaras ()

  • Quellcode

    1. * Mode 1 is the fastest but only works with a few filter
    2. * Mode 2 should work with most filters but uses more memory
    3. * Mode 3 should work with some of the filters that don't work with mode 2 but is slower
    4. * Mode 4 is a combination of mode 2 and 3 and should work with even more filter but is both slower and uses more memory
    5. * Mode 5 is slowest (slower than not using SetMTMode) but should work with all filters that don't require linear frameserving (that is, the frames come in order (frame 0,1,2 ... last)).
    6. * Mode 6 is a modified mode 5 that might be slightly faster


    3. In case something crashes or works wrong
    Avisynth is desinged in such a way that part of it is compiled into each plugin. That means if you experience crashes first of all you should check that all used plugins are built with recent headers as old ones are not compatible with multithreading.

    The other thing is memory usage. Being 32-bit Avisynth has certain memory limits.
    On 32-bit OS: you are likely limited to 2GB per process. With /3GB windows boot option it can be increased to 3GB but it's not problem free.
    On 64-bit OS: it's 4GB per 32-bit application, so there are benefits of using 64-bit OS even if 32-bit applications are all you need.
    Note: exe file of application must be correctly compiled to use mentioned above 3GB or 4GB. Not an avisynth or its plugins problem, but worth noting.

    If you see (in Task Manager) that application crashes with memory usage near 2/3/4 GB (depending on your environment) - you are facing cache inefficiency of MT Avisynth. Try increasing or decreasing SetMemoryMax, fewer number of threads (second parameter in first SetMTMode). No guaranteed results here.

    Plugins/scripts that depend on sequential frame requests are not going to work correctly with current MT mode. Not really MT problem, as they also won't work correctly in non-MT mode when frame requests from next filter are not sequential.

    If you are sure mentioned above 3 cases don't apply to your crash/wrong result - post here a way to reproduce it.

    4. Short guide to SetMTMode
    SetMTMode is the command that switches Avisynth into MT mode. Without it MT Avisynth works like the usual one.
    Read this: avisynth.org/mediawiki/MT_support_page
    (User state after reading: "@_@, Ok I read that but how to guess what mode to use with which filter?")
    Useful MT modes:
    1 - one filter instance per call in script, no guarding from Avisynth, only for filters that are designed for this mode, like distributor().
    3 - one filter instance per call in script, Avisynth guards requests for output. The mode to use with source filters. (Mode 5 will do for them too, but is overkill and should be avoided.)
    2 - each call in script produces N (number of threads) instances of filter. Use for the rest.

    When using MT mode with filters that have ability to spawn several internal processing threads - be sure to set such filters to use only 1 thread. Otherwise for example with 8-thread system MT mode will spawn 8 threads with once instance of such filter per thread (in MT mode 2), each filter instance will spawn 8 threads. End result: 64 threads (ouch).
    Aktuelle Projekte/Videos


    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von De-M-oN ()

  • Hm, ich hab ein merkwürdiges Problem. In der MeGUI Vorschau sieht alles ok aus, das Overlay ist permanent sichtbar und drübergelegt. Wenn ich mir die encodierte Datei ansehe, flackert das Overlay aber merkwürdig: youtu.be/MkhXnr8ZuGI
    (Hab einen kleinen Teil in schlechter Quali rausgeschnitten, Uploadzeit undso^^)

    Den Code musste ich auch ein bisschen verändern, da AviSynth bei den Overlay einen Argumenterror ausgespuckt hat:

    Quellcode

    1. #AVIs laden
    2. SetMTMode(3)
    3. LoL=AVISource("D:\PlayClaw 4 Recordings\League of Legends 2014-02-02 17-43-00-578.avi", false).AssumeFPS(30,1).ConvertToYV12()
    4. a1=AVISource("E:\Eigene Dateien\Eigene Videos\Mayesters Intro\Intro.avi", false).AssumeFPS(30,1)
    5. #Bilder + Alphamasken laden
    6. b1=ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Video\1080p champ loading Overlay.png",0,0,30, pixel_type="RGB32")
    7. b1mask=b1.ShowAlpha(pixel_type="RGB32")
    8. b2=ImageSource("E:\Eigene Dateien\Eigene Bilder\Livestream\Season 4 Overlay Mega Pack by Temporalcortex\Season 4 Overlay Mega Pack by Temporalcortex\Ocelote Overlay.png",0,0,30, pixel_type="RGB32")
    9. b2mask=b2.ShowAlpha(pixel_type="RGB32")
    10. #Schneiden
    11. SetMTMode(1) # Wenn es mit Mode 1 nicht gehen sollte, mal Mode 2 versuchen
    12. LoLBereichLoadOverlay=LoL.Trim(0,4004)
    13. LoLBereichOverlay=LoL.Trim(4004,79807)
    14. LolBereichOhneOverlay=LoL.Trim(79807,0)
    15. #Zusammenfügen
    16. a1 ++ Overlay(LoLBereichLoadOverlay, b1, mask=b1mask) ++ Overlay(LoLBereichOverlay, b2, mask=b2mask) ++ LoLBereichOhneOverlay
    17. FadeIO2(20,fps=30)
    Alles anzeigen



    Aber die Bugs sind nicht in der MeGUI Vorschau sichtbar :/

    Woran kann das liegen?

    MfG
    Mayesters
  • Welche beiden AVIs? Das Intro und das Gameplay?

    Das Intro flackert nicht und mit meinem Script hatte ich mit dem Overlay keine Probleme, aber ich kann dir gerne 2 Mediainfos geben.

    Vom Intro:

    Quellcode

    1. General
    2. Complete name : E:\Eigene Dateien\Eigene Videos\Mayesters Intro\Intro.avi
    3. Format : AVI
    4. Format/Info : Audio Video Interleave
    5. File size : 71.4 MiB
    6. Duration : 7s 667ms
    7. Overall bit rate : 78.1 Mbps
    8. Recorded date : 2013-10-20T18:43:36+02:00
    9. Writing application : Adobe Premiere Pro CS6 (Windows)
    10. Video
    11. ID : 0
    12. Format : Lagarith
    13. Codec ID : LAGS
    14. Duration : 7s 667ms
    15. Bit rate : 76.6 Mbps
    16. Width : 1 920 pixels
    17. Height : 1 080 pixels
    18. Display aspect ratio : 16:9
    19. Frame rate : 30.000 fps
    20. Color space : YUV
    21. Chroma subsampling : 4:2:0
    22. Bit depth : 8 bits
    23. Bits/(Pixel*Frame) : 1.231
    24. Time code of first frame : 00:00:00:00 / 00:00:00:00
    25. Time code source : Adobe tc_A / Adobe tc_O
    26. Stream size : 70.0 MiB (98%)
    27. Audio
    28. ID : 1
    29. Format : PCM
    30. Format settings, Endianness : Little
    31. Format settings, Sign : Signed
    32. Codec ID : 1
    33. Duration : 7s 667ms
    34. Bit rate mode : Constant
    35. Bit rate : 1 536 Kbps
    36. Channel(s) : 2 channels
    37. Sampling rate : 48.0 KHz
    38. Bit depth : 16 bits
    39. Stream size : 1.40 MiB (2%)
    40. Alignment : Aligned on interleaves
    41. Interleave, duration : 958 ms (28.75 video frames)
    42. Interleave, preload duration : 1000 ms
    Alles anzeigen


    Vom Gameplay:

    Quellcode

    1. General
    2. Complete name : D:\PlayClaw 4 Recordings\League of Legends 2014-02-02 17-43-00-578.avi
    3. Format : AVI
    4. Format/Info : Audio Video Interleave
    5. Format profile : OpenDML
    6. File size : 126 GiB
    7. Duration : 44mn 43s
    8. Overall bit rate : 402 Mbps
    9. Original source form/Distributed by : Video:UtVideo YUV422 BT.601 (ULY2) VCM Audio0:Mikrofon (2- SC450USB ) Audio1:Kopfhörer (4- Microsoft LifeChat LX-3000 )
    10. Writing application : DxtoryCore ver2.0.0.125
    11. Video
    12. ID : 0
    13. Format : YUV
    14. Codec ID : ULY2
    15. Codec ID/Info : Ut Video Lossless Codec
    16. Codec ID/Hint : Ut Video
    17. Duration : 44mn 42s
    18. Bit rate : 400 Mbps
    19. Width : 1 920 pixels
    20. Height : 1 080 pixels
    21. Display aspect ratio : 16:9
    22. Frame rate : 30.000 fps
    23. Color space : YUV
    24. Chroma subsampling : 4:2:2
    25. Compression mode : Lossless
    26. Bits/(Pixel*Frame) : 6.428
    27. Stream size : 125 GiB (99%)
    28. Audio #1
    29. ID : 1
    30. Format : PCM
    31. Format settings, Endianness : Little
    32. Format settings, Sign : Signed
    33. Codec ID : 1
    34. Duration : 44mn 43s
    35. Bit rate mode : Constant
    36. Bit rate : 705.6 Kbps
    37. Channel(s) : 1 channel
    38. Sampling rate : 44.1 KHz
    39. Bit depth : 16 bits
    40. Stream size : 226 MiB (0%)
    41. Alignment : Aligned on interleaves
    42. Interleave, duration : 1000 ms (29.99 video frames)
    43. Interleave, preload duration : 1000 ms
    44. Audio #2
    45. ID : 2
    46. Format : PCM
    47. Format settings, Endianness : Little
    48. Format settings, Sign : Signed
    49. Codec ID : 1
    50. Duration : 44mn 42s
    51. Bit rate mode : Constant
    52. Bit rate : 1 411.2 Kbps
    53. Channel(s) : 2 channels
    54. Sampling rate : 44.1 KHz
    55. Bit depth : 16 bits
    56. Stream size : 451 MiB (0%)
    57. Alignment : Aligned on interleaves
    58. Interleave, duration : 1000 ms (30.00 video frames)
    59. Interleave, preload duration : 1000 ms
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Mayesters ()