Sound und Video asynchron bei Avisynth

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

  • Sound und Video asynchron bei Avisynth

    Anzeige
    Aloha,
    Ich habe heute ein Let's Play von Just Cause 2 mit NVIDIA ShadowPlay aufgenommen, da das Spiel anscheinend nicht gut auf Fraps zu sprechen ist. Nur leider nimmt ShadowPlay mit VFR auf und da mein Schnittprogramm (Magix VDL 17) nicht damit klarkommt, hab ich gedacht, ich machs mit nem Avisynth-Script und FFMpegs makeAVIS (was normalerweise auch funktioniert). Nur komischerweise kommen dabei zwei verschieden lange Audio und Video-Spuren heraus (Audio ist 1-2 sec kürzer). Hier eins der Scripte:

    Quellcode

    1. ​​video = FFVideoSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4", fpsnum = 60, fpsden = 1)
    2. audio = FFAudioSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4")
    3. AudioDub(video, audio)

    In den Originalaufnahmen sind Video+Audio allerdings synchron. Ich kann mir darauf keinen Reim machen, weiß hier einer weiter?
  • Oh, natürlich, sorry :D

    Allgemein
    Vollständiger Name : D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4
    Format : MPEG-4
    Format-Profil : Base Media / Version 2
    Codec-ID : mp42
    Dateigröße : 1,05 GiB
    Dauer : 4min 45s
    Gesamte Bitrate : 31,4 Mbps

    Video
    ID : 1
    Format : AVC
    Format/Info : Advanced Video Codec
    Format-Profil : High@L4.1
    Format-Einstellungen für CABAC : Ja
    Format-Einstellungen für ReFrames : 1 frame
    Format_Settings_GOP : M=1, N=30
    Codec-ID : avc1
    Codec-ID/Info : Advanced Video Coding
    Dauer : 4min 45s
    Source_Duration/String : 4min 45s
    Bitrate : 31,3 Mbps
    Breite : 1 280 Pixel
    Höhe : 720 Pixel
    Bildseitenverhältnis : 16:9
    Modus der Bildwiederholungsrate : variabel
    Bildwiederholungsrate : 58,825 FPS
    originale Bildwiederholungsrate : 60,000 FPS
    minimale Bildwiederholungsrate : 4,810 FPS
    maximale Bildwiederholungsrate : 63,830 FPS
    Standard : PAL
    ColorSpace : YUV
    ChromaSubsampling : 4:2:0
    BitDepth/String : 8 bits
    Scantyp : progressiv
    Bits/(Pixel*Frame) : 0.578
    Stream-Größe : 1,04 GiB (100%)
    Source_StreamSize/String : 1,04 GiB (100%)
    colour_primaries : BT.601 NTSC
    transfer_characteristics : BT.470 System M
    matrix_coefficients : BT.601
    mdhd_Duration : 285814

    Audio
    ID : 2
    Format : AAC
    Format/Info : Advanced Audio Codec
    Format-Profil : LC
    Codec-ID : 40
    Dauer : 4min 45s
    Source_Duration/String : 4min 45s
    Bitraten-Modus : konstant
    Bitrate : 96,0 Kbps
    nominale Bitrate : 192 Kbps
    Kanäle : 2 Kanäle
    Kanal-Positionen : Front: L R
    Samplingrate : 48,0 KHz
    Stream-Größe : 3,33 MiB (0%)
    Source_StreamSize/String : 3,33 MiB (0%)
    mdhd_Duration : 285565
  • Folgendes Skript probieren:

    Quellcode

    1. video =
    2. FFVideoSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause
    3. 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4", Threads = 1)
    4. audio = FFAudioSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4")
    5. AudioDub(video, audio)
    6. Spline16Resize(640, 480).Info()


    Und dann machste das mal in MeGUI auf und postest uns mal das Vorschaubild. Dort müssten dann Infos oben links zu sehen sein. Ein Bild reicht. Nur damit wir wissen wie er das Video laden tut.
  • Dacht ich mir. Der kann die FPS nicht eindeutig erkennen, weil dein Video 58,825 FPS hat laut deiner Mediainfo.

    Dieses hier:
    Modus der Bildwiederholungsrate : variabel
    Bildwiederholungsrate : 58,825 FPS
    originale Bildwiederholungsrate : 60,000 FPS
    minimale Bildwiederholungsrate : 4,810 FPS
    maximale Bildwiederholungsrate : 63,830 FPS


    wird dir zum Verhängnis werden. Versuche es einfach mal via DGAVCIndex zu laden statt mit FFMS2
  • Ok... Dann machste mal folgendes:

    Quellcode

    1. Video = FFVideoSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4", Threads = 1)
    2. Audio = FFAudioSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mp4")
    3. FPS = Video.framecount / (Audio.audiolengthf / Audio.audiorate)
    4. Video = Video.AssumeFPS(FPS).ChangeFPS(30, 1)
    5. AudioDub(Video, Audio)


    Dann sollte sich das Video anhand der Audiospur anpassen. Wenn die Audiospur stimmen sollte, müsste das Video synchron sein. Ansonsten müssten wir da mal Feinabstimmungen machen.
  • Ja, wir müssen eigentlich auch den VFR zu eine CFR umwandeln via einer Timecodeliste.

    Könnteste das Video auf einen Filehoster hochladen wie Mediafire etc. Dann könnt ich dafür bestimmte VFRtoCFR Filter mal ausprobieren. Weil FFMS2 ist nicht sonderlich akkurat was VFR angeht.

    Daher sollte man Aufnahmen eigentlich mit CFR machen.
  • Das ist auch einer der Gründe, warum ich ShadowPlay auch sonst nicht benutze :D
    Leider sind die Videos sehr groß, das kleinste ist 1GB und das dauert bei einer 6K-Leitung sehr lange (rund 10 Stunden)
    Falls du den VFRtoCFR-Filter (also den, der auch so heißt) benutzen wolltest, den hab ich auch schon versucht, ohne viel Erfolg :(
  • MKVToolnix könnte das. Erst alles in eine MKV verpacken und dann mit MKVextractGUI die Timecodeliste mit dem Track wieder herrausexportieren lassen. Dann hätteste eine sehr genaue Timecodeliste. Die könnteste dann wieder verwenden für das Plugin.

    Edit:
    Da ich kein VFR Video grad zur Hand habe erkläre ich dir mal wie ich mir das Vorstelle und wie man es machen müsste:
    1. Du brauchst [lexicon]MKVToolnix[/lexicon] dafür und [lexicon]MKVExtractGUI[/lexicon] (Nicht MKVExtractGUI2). Hier mal der Link wo [lexicon]MKVExtractGUI[/lexicon] drin ist der auch die Timecodes mit ausgibt: Link
    2. Deine [lexicon]MP4[/lexicon] lässt du samt Ton in eine [lexicon]MKV[/lexicon] [lexicon]muxen[/lexicon] mit MKVMerge
    3. Mit [lexicon]MKVExtractGUI[/lexicon] extrahierst du dann Video und Audio. Dabei wird unter anderem eine Timecodeliste erzeugt für jeweils Video und Audio.
    4. Diese Timecodelisten kannst du dann für den VFRtoCFR Filter nutzen
      Das ganze sollte dann ungefähr so aussehen:

      Quellcode

      1. LoadPlugin("VFRtoCFR.dll")
      2. LoadPlugin("FFMS2.dll")
      3. Video = FFVideoSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mkv", Threads=1)
      4. Audio = FFAudioSource("D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\Just Cause 2 04.15.2014 - 11.59.34.06_2.mkv")
      5. Video = VFRtoCFR(last, "D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\TimeCode_Track1.txt", 60, 1, false)
      6. Audio = VFRtoCFR(last, "D:\Videos\Rohvideos\Kramekiste\Just Cause 2\Just Cause 2\TimeCode_Track2.txt", 60, 1, false)
      7. AudioDub(Video, Audio)
      8. Info()
      Alles anzeigen


    Wenn du das probiert hast, überprüfste das und schickst mir noch mal die Info aus dem Bild und sagst mir ob es dann nun besser ist.

    Weil ich kann es schlecht testen, da ich kein Testmaterial für VFR habe

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