Merging von mp4-files/Audio asynchron

  • Hallo zusammen,

    ich habe folgendes Problem, ich möchte aus mehreren AVI Files (xvid/mp3) mp4-Files mit ffmpeg erzeugen.

    Hier die Command-Line:

    Code
    ffmpeg -y -i input.avi -aspect 4:3 -s 320x240 -r 25 -vcodec h264 -level 13 -b 300k -flags +loop -flags2 +mixed_refs -me_method 2 -subq 6 -trellis 2 -refs 3 -coder 0 -me_range 16 -g 250 -qmin 10 -qmax 51 -qdiff 4 -acodec aac -ac 2 -ar 44100 -ab 80 output.mp4

    Danach sollen die mp4's mit Hilfe von MP4Box zu einem Video gemerged werden. Habe aber dasselbe Problem wie "Sadderstar" in diesem Thread: http://forum.gleitz.info/showthread.php…ht=mp4+synchron
    Die Tonspur läuft nicht synchron zum Video.

    Habe dann auch versucht erst h264/aac AVI's zu codieren, mit der selben Zeile wie oben (bloß mit avi als output), und diese mit avimerge gemerged und zum Schluß mit MP4BOX remuxed:

    Code
    avimerge -o merging_dummy.avi -i input1.avi input2.avi input3.avi input4.avi  -c
    
    
    MP4Box -aviraw video merging_dummy.avi
    
    
    MP4Box -aviraw audio merging_dummy.avi 
     
    MP4Box -add merging_dummy_video.h264:fps=25 -add merging_dummy_audio.aac merging_final.mp4

    Leider habe ich wieder das Problem mit dem asynchronen Ton.

    Hat jemand von euch eine alternativ Lösung parat um ein synchrones File zu produzieren? Evtl. ein anderes Programm?

  • Das joinen der AVI's klappt eigentlich wunderbar, aber sobald ich eine mp4 draus machen will, ist es hin mit der Synchronität.

    Wie würde das den mit Avisynth aussehen? Und wie bekomme ich dann die mp4's?

  • Das joinen der AVI's klappt eigentlich wunderbar, aber sobald ich eine mp4 draus machen will, ist es hin mit der Synchronität.

    mit was joinen? mit dem avimerge und das funktioniert? Wenn ja, wäre das natürlich Klasse und div. Beiträge mit "komplizierten" Lösungen könnten schnell erledigt werden.

    Und das verbundene Video ist 100% syncron und erst nach ffmpeg ist es unsyncron? Oder wie oder was?

    Wie würde das den mit Avisynth aussehen? Und wie bekomme ich dann die mp4's?

    join_video.avs:

    Code
    v1=AVISource("***pfad***\video1.avi")v2=AVISource("***pfad***\video2.avi")v3=AVISource("***pfad***\video3.avi")v4=AVISource("***pfad***\video4.avi")AlignedSplice(v1,v2,v3,v4)
    Code
    ffmpeg -y -i [COLOR='Red']join_video.avs[/COLOR] -aspect 4:3 -s 320x240 -r 25 -vcodec h264 -level 13 -b 300k -flags +loop -flags2 +mixed_refs -me_method 2 -subq 6 -trellis 2 -refs 3 -coder 0 -me_range 16 -g 250 -qmin 10 -qmax 51 -qdiff 4 -acodec aac -ac 2 -ar 44100 -ab 80 output.mp4

    das ganze funktioniert aber nur wenn alle Video's die gleichen Abmessungen haben und auch das gleiche Audioformat.

    Wenn nicht mußt Du es mit einer Unterfunktion erst anpassen.

  • Ja, mit avimerge waren die Videos immer 100% synchron (dort aber mit einer anderen ffmpeg-zeile, weil xvid/mp3). Die h264/aac "dummy"-avi's werden bei mir lustiger weise ohne ton abgespielt. Wenn ich es dann mit MP4Box in einen mp4 Container packe ist der Ton wieder nicht synchron.

    Also asynchron ist es sobald ich einen mp4 Container schreibe, ob direkt mit ffmpeg oder anschließen über MP4Box.

  • Meine Erfahrungen haben gezeigt , das der AviSynth-Support in ffmpeg nicht ganz sauber ist , und wohl oft zu asyncen Filmen führt.

    Am besten ist es wenn du das Video erst als HuffYUV mit WAV speicherst.
    (Ist verlustfrei und spart Platz.)
    Diese AVI kannst du dann an ffmpeg weiterleiten.

    Die Rotation der Erde wurde in den letzten Jahren primär durch sich im Grab umdrehende Musiker angetrieben - Mainstream sei dank.

  • Naja das AVI war ja auch nur so ne Idee um es evtl. synchron zu kriegen, am liebsten wäre mir eine Lösung wo ich direkt ein mp4 encode mit ffmpeg und diese files dann mit MP4Box merge.
    Leider spuckt ffmpeg anscheinend keine korrekten mp4's aus.

  • Selur

    Hab jetzt mit dem mencoder folgendes gemacht

    Code
    mencoder input.avi -ovc x264 -x264encopts psnr:bitrate=3000 -o output.h264 -oac faac -vf scale=320:240 -faacopts br=80

    Leider lassen sich die output-files nicht mit MP4Box zu einer MP4-Datei mergen.

    Folgendes wird angezeigt:

    Code
    Cannot find H264 start code
     Error: BitStream Not CompliantError appending output.h264: BitStream Not Compliant
  • katjarella
    deine lösung würde dazu führen das ich 2mal encoden müsste. einmal das avi und dann nochmal das mp4.

    Klar funktioniert das. Du verbindest doch alles AVIs schon in Avisynth und mit ffmpeg kommt doch dann mp4 raus, welches ja auf Deinem Gerät funktioniert.

    Und überhaupt glaube ich nicht, das getrennt Encodete MP4s Syncron verbunden werden können. Weil das Video/Audio da nie 100% aufs letzte Frame enden. Selbst Quicktime baut in seinen Container, bei sowas, irgendwelches Füllzeuch rein.

  • Zitat

    Und überhaupt glaube ich nicht, das getrennt Encodete MP4s Syncron verbunden werden können


    Hab das mal angetestet und bei mir ging es ohne Probleme, wobei ich aber die gleichen Settings bei beiden Teilen und x264 zum Encoden verwendet hatte.

    Zitat

    Weil das Video/Audio da nie 100% aufs letzte Frame enden.


    Nie ist hier ein zu "hartes" Wort, selten trifft es wohl eher. ;)

    Zitat

    Selbst Quicktime baut in seinen Container, bei sowas, irgendwelches Füllzeuch rein.


    Was beim Aneinanderfügen keine Probleme macht. ;)

    ---------

    Gebe Katjarella aber recht, ein Zusammenfügen vor dem Encoden ist wesentlich problemloser und einfacher. ;)

    Cu Selur

  • katjarella

    Wird bei der Avisynth-Methode temporär ein gemergtes AVI erzeugt oder statisch abgelegt? Oder wird das ganze direkt in die MP4 gepackt. Kann es sein das Avisynth+ffmpeg nicht auf Linux läuft?

    Selur

    Wie sieht denn deine Commandline für x264 aus? Diese Files konntest du ohne Synchronisitätsverluste mit MP4Box mergen? Welche Options hast du für MP4Box gewählt?

    @all

    Leider ist das Zusammenfügen vor dem Encoden aufgrund des Arbeitsablaufs nicht möglich, wären sonst sicher ne gute Alternative.

  • Ich nutze mencoder nicht, sondern x264.exe unter Windows. ;)
    Hab aber schon erfolgreich mit mencoder gearbeitet, bin die nächsten Tage aber nicht bei mir am Rechner und kann deshalb rumtesten, würde halt erstmal ohne Parameter encoden zum Testen.

    Zitat

    Welche Options hast du für MP4Box gewählt?


    Nutze i.d.R. Yamb ;) (sollten hier im Board aber auch sicher noch irgendwo die Commandlineparameter rumfliegen haben.)

  • "Und wie bist du dann mit der Tonspur verfahren?"
    Neros Commandline Aac Encoder :P
    und dann mit mp4box muxen, heutzutage benutz ich für das Ganze gerne MeGui. :)

    x264 rufe ich z.B. mit

    Code
    x264.exe --pass 2 --bitrate 700 --stats ".stats" --ref 3 --mixed-refs --no-fast-pskip --bframes 3 --b-pyramid --b-rdo --bime --weightb --direct auto --filter -2,-1 --subme 7 --trellis 1 --analyse all  --8x8dct --qpstep 16 --vbv-maxrate 25000 --b-bias 30 --me umh --threads auto --thread-input --progress --no-dct-decimate --no-psnr --no-ssim --output "D:\huff.mp4" "D:\huff.avs"

    auf.

    Cu Selur


  • Leider ist das Zusammenfügen vor dem Encoden aufgrund des Arbeitsablaufs nicht möglich, wären sonst sicher ne gute Alternative.


    das ist keine Alternative, sondern die einzigste saubere Methode.

    katjarella
    Wird bei der Avisynth-Methode temporär ein gemergtes AVI erzeugt oder statisch abgelegt? Oder wird das ganze direkt in die MP4 gepackt. Kann es sein das Avisynth+ffmpeg nicht auf Linux läuft?


    Bitte lese nochmal die Dokumentation zu Avisynth, dann weißt Du auch was Avisynth macht und für was es da ist.

    Ob alles da ist kann ich nicht sagen, weil ich kein Linux habe und damit klinke ich mich hiermit aus.

    @all
    Ich bitte darum, solange es noch Unterschiede zu Linux und Windows gibt. BITTE schreibt gleich in den Themen Title: LINUX: ****** hin oder öffnet Euren Beitrag unter Linux. DANKE

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!