ffmpeg stürzt ab - Konvertierung abgebrochen

  • Hallo zusammen!


    So, die erste unkomprimierte Datei meinFilm(1).avi war nach der ersten Konvertierung mit ffmpeg über Avisynth nach MP4 (h.264 AVC) erfolgreich durchgeführt. Film läuft super!

    Danach wollte ich weitere Filme mit dieselben Script unter anderen Namen wie zum Bsp. meinFilm(2).avi konvertieren, jedoch scheiterte, weil ffmpeg sie unterbrach und stürzte gleich ab (Fenster wird ausgeblendet). Was ich damit machen wollte, ist, dass ich Videos mit QTGMC über Avisynth deinterlacen möchte. Ich ehrlich gesagt, hatte früher nie mit ffmpeg zu tun gehabt, nun zum ersten Mal. Habe dann das Video meinFilm(1) aus sicherheitshalber noch einmal konvertiert, um zu testen, ob sie zu Ende konvertiert wurde, oder nicht. Doch sie brachte auch ab! Woran liegt das Problem?


    ffmpeg:

    Code
    1. ffmpeg -i meinFilm(2).avs -c:a aac -b:a 128k -c:v libx264 -crf 23 meinFilm(2).mp4


    Avisynth Script:

    Code
    1. SetMTMode(5, 8)
    2. AVISource("E:\Videobearbeitung\Eigene Filme\Cap0708_002 (Rohfassung).avi", audio=true)
    3. ConvertToYV12()
    4. SetMTMode(mode=2)
    5. AssumeFPS(24000,1001)
    6. QTGMC( Preset="Slower", SourceMatch=3, Lossless=2, EdiThreads=1)
    7. Distributor()
    8. BilinearResize(720, 486)
    9. SelectEven()


    Auf eure Hilfe freue ich mich sehr.



    BS: Win10 64-bit

    Prozessor: Intel(R) Xeon(R) CPU E3-1231 v3 @ 3.40GHz 3.40GHz

    RAM: 16 GB

  • SetMTMode(5, 8) ... also AviSynth MT von SEt, also 32 bit, also maximal 2 GB RAM für den Prozess (evtl. 4 bei LAA-Programmen), und ohne SetMemoryMax sicherlich zunächst maximal 512 MB RAM für 8 Threads QTGMC ... das kann gutgehen. Muss aber nicht.


    Versuch's mal mit SetMemoryMax(800 .. 1200) als allererste Zeile, ausprobieren. Oder ein paar Threads weniger. Und irgendwann in Zukunft vielleicht mit AviSynth+ und 64-bit-Encodern und Plugins für AviSynth+ 64 bit.


    Außerdem sollte man keinesfalls vergessen, bei der Verarbeitung von Interlaced-AVI ConvertToYV12(interlaced=true) zu verwenden, sonst gibt es u.U. Matschfarben in Combing-Bereichen, die nicht mehr zu reparieren sind. Und dazu noch möglicherweise AssumeTFF(), wenn es kein DV-AVI ist, das man mit AviSource einliest. Und bist du dir sicher, dass da Distributor() mit hinein gehört? Es gibt nur wenige Gründe, warum das je nötig wäre. Und wenn du SelectEven() zuerst verwendest, hat der folgende Resizer (und es gibt bessere als Bilinear) nur noch die Hälfte an Arbeit.

  • Stimme LigH zu.

    1. SetMemoryMax

    2. distributor() als letztes vor 'return last' (sollte mit ffmpeg okay sein)

    3. interlaced=true im CovertTo-Aufruf

    4. SelectEven direkt hinter QTGMC

    5. Ob da ein AssumeTFF() oder AssumeBFF() davor sollte hängt von der Quelle ab.


    den Resizer würde ich auch anders wählen,..


    Anstatt Avisynth+ würde ich aber eher zu Vapoursynth greifen,..

  • Hi,


    erstmal vielen Dank für eure Hilfe!


    Hab versucht und es hat gut geklappt, das freut mich sehr.

    Es sind nur SD-Materials mit TTF (29.970 fps). Mein Ziel ist in 23.976 fps deinterlaced).


    Ich arbeite mit AviSynth 2.6 32-bit. Ich habs gelesen, dass die 64-bit Probleme macht, bin mir nicht sicher, aber ich könnte mich auch irren,

    Also statt AssumeFPS(24000/1001) wäre AssumeTTF(24000/1001) die bessere Variante? Mit AssumeTTF() bleibt die Framerate unverändert, aber mit AssumeTTF(24000/1001) ist leider fehlerhaft.

    Ja, du hast recht, man sollte bei der Verarbeitung von Interlaced-AVI ConvertToYV12(interlaced=true) verwenden, hab nur versucht mit und ohne, um die Konvertierung mit ffmpeg standhaft zu bleiben.

    Das mit Distributor() habe ich nur so gemacht, wie in Beispiele aus anderen Foren, die kann ich aber auch weglassen.

    Mit welchen Resize würdet ihr mir empfehlen? Es gibt ja sehr viele verschiedene Varianten von Resize.

    Eine letzte Frage noch, ist die Hochskalierung mit ffmpeg über Avisynth (Spline64Resize) die bessere Wahl als mit der Videoschnittsoftware wie Premiere Pro/CC oder Sony Vegas oder das spielt keine Rolle - nur muss man die richtige Einstellungen vornehmen, oder?

    Ist Vapoursynth MeGUI gemeint? Wenn ja, MeGUI macht bei mir zur Zeit nur Probleme, wegen dem "Standard error stream". Damals mit WinXP lief sie einwandfrei.

  • Es sind nur SD-Materials mit TTF (29.970 fps). Mein Ziel ist in 23.976 fps deinterlaced).

    =O Huch – nee, dann ist das ja völlig falsch! Weg mit QTGMC!


    Du willst wahrscheinlich nicht deinterlacen. Du brauchst eventuell Inverse Telecine (IVTC). Falls dein Material denn überhaupt telecined ist; das solltest du vorher erst mal in Ruhe analysieren. Wenn es nicht telecined ist, kann man es nicht von 29,97 auf 23,976 fps reduzieren. Dann ist es vielleicht doch echt interlaced, bleibt aber bei 29,97 fps, auch nach dem Deinterlacing.


    Code
    1. # Analyse-Skript zum Halbbild-für-Halbbild anschauen
    2. AVISource("E:\Videobearbeitung\Eigene Filme\Cap0708_002 (Rohfassung).avi")
    3. AssumeTFF()
    4. Bob()

    Hiermit das Video in VirtualDub2 laden und mit der Pfeil-rechts-Taste Schritt für Schritt anschauen, dabei in Bewegungen auf Muster achten, wie häufig der gleiche Zeitpunkt sich wiederholt. Bei Telecine-Material erkennt man ein Muster 3-2-3-2...


    Nebenbei: Kannst du uns verraten, mit welchem Gerät das aufgezeichnet wurde, und warum ausgerechnet in NTSC (vielleicht hätte man das auch auf PAL einstellen können)?

  • Die originale Quelle ist NTSC, da US Laserdisc ist. Hab mit Canopus NX PCIe Karte in ein unkomprimierte AVI Format in SD 4:3 NTSC captured. Wie hier deutlich beschrieben wurde, deshalb Ausgangsmaterial ist in 29.970 fps und TFF interlaced (NTSC).

    Hab gelesen, dass QTGMC besser als andere Funktionen encoden kann. Ja, der Muster ist 3-2-3-2.


    Siehe Originalmaterial:


  • QTGMC kann Material mit echtem Interlacing (wenn also die Zeit im Video Halbbild für Halbbild gleichmäßig voranschreitet) ganz hervorragend deinterlacen. ("Encoden" kann es überhaupt gar nicht, es ist nur ein Videofilter.)


    Aber Telecine ist etwas, womit QTGMC überhaupt nicht klarkommt. Bei Telecine war das Ursprungsmaterial bereits progressiv, und es wird nur regelmäßig ein Halbbild verdoppelt, um von knapp 24 (Film) auf knapp 30 (NTSC-TV) Bilder pro Sekunde zu kommen. Dieses Verfahren lässt sich praktisch verlustlos zurückführen. Dafür verwendet man zum Beispiel TIVTC mit folgendem Skript:


    Code
    1. LoadPlugin("TIVTC.dll")
    2. AVISource("E:\Videobearbeitung\Eigene Filme\Cap0708_002 (Rohfassung).avi", audio=true)
    3. AssumeTFF()
    4. ConvertToYV12(interlaced=true)
    5. TFM()
    6. TDecimate()

    Möglicherweise kann man in TDecimate() noch ein paar Parameter verwenden, welche die Arbeitsweise steuern. In der AviSynth-Wiki gibt es dafür unter dem Schlagwort "TIVTC" Anwendungsbeispiele, und für "TDecimate" auch eine ausführliche Dokumentation.


    Zu den Grundlagen von halbbildbasierten Videoeigenschaften: meine Sicherung von Exotisches Interlacing von scharfis_brain. Was v.a. in Amerika beim Telecine passiert, wird in Kapitel 2.3.1 demonstriert.