• Einen schönen guten Tag.

    Ich nutzte ffmpeg um meine Stream aufnahmen zu schneiden und neu zu codieren.
    Da ich gestern Abend nicht mehr die Zeit hatte den Stream gleich in die jeweils richtige Videolänge zu schneiden, hab ich den Stream im ganzen neu codiert, da ich den Platz brauche und ich ihm nachhinein noch via mkvmerge an den keyframes trennen kann.
    Das Problem war jetzt das mir in der cmd.exe ein Fehler ausgeworfen wurde, nämlich das die wav Dateien zu groß wären und dadurch kaputt wären.
    Ich hab mir die angehört und mit Mediainfo überprüft, soweit ist da anscheinend alles ok, aber anscheinend hat wav ja eine maximale Dateigröße und falls ein Stream noch mal so lang sein sollte oder sogar noch länger ist würde ich das Problem gerne verhindern.

    In meiner Batch Datei hebe ich Momentan das drin:


    set _ffmpeg_="C:\ffmpeg\bin\ffmpeg.exe"

    set _x264_="C:\MeGui\tools\x264\x264.exe"


    set _input1_="A:\Games\Aufnahme 6.mkv"




    set _name_=Spielename

    set _output_=A:\Games\Aufnahme\


    %_ffmpeg_% -i %_input1_% -acodec pcm_s16le -map 0:1 "%_name_% audio6.1.wav" -acodec pcm_s16le -map 0:2 "%_name_% audio6.2.wav" -map 0:3 "%_name_% audio6.3.wav" -f yuv4mpegpipe -map 0:v - | %_x264_% - --demuxer y4m --preset veryfast --crf=15 --keyint 100 --bframes 0 --output-depth 10 --output "%_output_%%_name_% video6.mkv"


    pause



    Jetzt muss ich ja dementsprechend dann einen anderen Audio Codec verwenden.
    Ich hatte gedacht das ich dann flac nutze, jetzt weiß ich nur nicht ob der flac codec von ffmpeg gut ist, ich weiß aber zum Beispiel das der von Megui gut ist und da ich wegen dem x264 MeGui immer mal wieder zwischendurch öffne um den x264 zu aktualisieren, wäre das hier beim flac auch nicht schlecht, da ich den dann auch auf den aktuellen Stand halten könnte.
    Jetzt ist nur die Frage, wenn ich auf den flac Codec von MeGui zugreifen will, muss ich wahrscheinlich dann wie beim Video eine Pipe nutzen, kann ich da einfach die gleiche nutzen oder brauch ich da eine andere?

    Oder würde ich noch andere Möglichkeiten geben um das Problem mit der Dateigröße zu umgehen?
    Weil falls ich mal ein Problem mit dem Verhältnis der Lautstärke zwischen Ingame und dem was ich rede habe, nutze ich Audacity um hier die Lautstärke dann anzupassen, nur irgendwie hab ich bei Audacity bisher immer Probleme gehabt wenn es um flac Dateien geht, weswegen ich mir erstmal immer wav Dateien produzieren lies.

  • Warum fügst du in deinen ffmpeg-Teil zur Videokonvertierung jede Menge Audiospuren ein? Weder sind die in der Y4M-Ausgabe enthalten, noch würde x264 die in irgend einer Art weiterverarbeiten.


    Du kannst doch ffmpeg gleich komplett für alles benutzen. "Der FLAC-Codec in ffmpeg" ist der offizielle FLAC-Codec direkt von den Entwicklern. "Der x264-Codec in ffmpeg" ist der offizielle x264-Codec direkt von den Entwicklern. Wenn du ein relativ aktuelles ffmpeg verwendest (z.B. von Zeranoe), dann stecken da jeden Tag die aktuellsten Varianten aller Codecs drin (und so häufig gibt es nun auch keine Aktualisierungen von FLAC und x264 mehr, als dass man die sich täglich holen müsste, monatlich reicht bestimmt).


    Du musst nur herausfinden, wie du all die Parameter, die du sonst an x264 und FLAC übergibst, nun in der Kommandozeile von ffmpeg verwendest. Schwierigkeit hier: Ein paar der Parameter kann man direkt so verwenden, als wären es Parameter für ffmpeg. Andere müssen speziell als Parameter für die Codecbobliothek geschrieben werden (-x264opts) und haben dann ein etwas anderes Format (Trennung mit Doppelpunkten).


    Falls du dennoch darauf bestehst, ffmpeg nur als Präprozessor für nachfolgende eigenständige Encoder zu verwenden: Du kannst in dem Fall nur entweder einen Videostream oder einen Audiostream ausgeben. Also trenne beides sauber voneinander. Multiplexen musst du dann beide einzelnen Teilergebnisse.

  • Warum fügst du in deinen ffmpeg-Teil zur Videokonvertierung jede Menge Audiospuren ein?

    Weil im Stream 3 Audiospuren vorhanden sind, Inagme und Stimme gemischt, Ingame und Stimme, diese hab ich in der gleichen Zeile, so das es !gleichzeitig" gemacht wird, damit er nicht jedes mal bei Audio neu spulen muss.
    Hatten wir in dem Thread besprochen gehabt.

    Der x264-Codec in ffmpeg" ist der offizielle x264-Codec direkt von den Entwicklern.

    Nach dem was mir gesagt wurde, ist der x264 eine weiterentwickelt Variante, der MeGui Entwickler soll den x264 genommen haben und noich weiter angepasst haben.
    Ich weiß noch aus das Test, das trotz Piplin der x264 von MeGui schneller war als der von ffmpeg.
    Zudem nutze ich beim x264 von MeGui noch die 10 Bit variante und ich glaube ffmpeg hat die Möglichkeit nicht.

    Wenn du ein relativ aktuelles ffmpeg verwendest

    Ich hab mir ffmpeg bisher immer hier runtergeladen https://www.ffmpeg.org/

  • Mag ja sein, dass dein Clip drei Tonspuren haben soll.


    Aber in dem, was ffmpeg mit "-f yuv4mpegpipe" ausgibt, ist keinerlei Audio vorhanden.


    Und selbst wenn, würde x264 es ignorieren.


    Was also am Ende aus x264 herauskommt, hat 0 Audiospuren. Wozu dann also 3 Audiospuren in den Aufruf packen, der nur x264 mit Video füttert?


    Wenn du am Ende 3 Audiospuren haben willst, dann kommen die später zum Ergebnis von x264 dazu. Nachdem x264 schon längst fertig ist. Das erfordert dann noch mal einen zusätzlichen Aufruf eines Multiplexers. Und vielleicht vorher (oder bei ffmpeg vielleicht währenddessen) noch Aufrufe einzelner Konvertierungen von WAV nach FLAC.

  • Oder würde ich noch andere Möglichkeiten geben um das Problem mit der Dateigröße zu umgehen?

    Kannst du nochmal deinen kompletten Workflow umreißen?


    Also du nimmst mit obs auf. Ergebnis ist ne mkv mit Video und 3 Audio Spuren. (welche Codecs?)

    Und was genau willst du am Ende erreichen? (mir ist z.B. nicht klar, wieso du die 3 Audio Streams extrahierst und wieso du den Videostream neu kodierst - oder lädst du die crf15 x264 Datei bei Youtube hoch?)

  • Kannst du nochmal deinen kompletten Workflow umreißen?

    OBS Studio Aufnahme

    Aufnahme = 3 Audio (Audio 1 = Stimme + Ingame = 160 aac. Audio 2 = Ingame = 320 aac, Audio 3 = Stimme = 320 acc), Video = mkv = qp=0

    Dann kommt die Batch Datei...

    Hier werden die 3 Audiospuren separat abgespeichert, in Audio 1, Audio, 2 und Audio 3, wenn was ist kann ich so Audio 2 und 3 nehmen und in Audacity noch in der Lautstärke anpassen. Zum Schluss wird noch das Video abgespeichert mit crf 15, komplett ohne Audio.

    Wenn ich dann mit Audio zufrieden bin wird fertiges Audio und Video via mkvmerge zusammen gefügt, das ist dann das fertige Video was auf Youtube hochgeladen wird.


    Normal ist nach ffmpeg noch ein -ss 00:10:00 -t 00:05:0, womit ich die Stream in die richtige länge schneide, so wird dann Audio und Video zusammen auf die gleiche länge gebracht.

    Was also am Ende aus x264 herauskommt, hat 0 Audiospuren. Wozu dann also 3 Audiospuren in den Aufruf packen, der nur x264 mit Video füttert?

    Die Audiospuren laufen ja auch vor der Pipe und werden auch vorher abgespeichert.

    Das heißt ich habe nachher

    Audio 1
    Audio 2
    Audio 3
    Video 1

    Als Dateien vorhanden

  • Die 3 Audiospuren existieren zwar vor der Pipe. Aber sie werden nicht durch die Pipe an x264 weitergeleitet, durch die Pipe geht nur die Videospur alleine, unkomprimiert als Videoquelle für x264. Und selbst wenn, würde x264 die Tonspuren ignorieren. Die von x264 generierte MKV enthält nur eine AVC-Videospur, die von x264 encodiert wurde. Nichts anderes.


    Noch mal: Es hat keinen Sinn, Tonspuren in den ffmpeg-Aufruf zu packen, der x264 allein mit einer unkomprimierten Videospur versorgt, und mit nichts anderem. Es genügt also:


    Code
    1. %_ffmpeg_% -i %_input1_% -f yuv4mpegpipe - | %_x264_% - --demuxer y4m --preset veryfast --crf=15 --keyint 100 --bframes 0 --output-depth 10 --output "%_output_%%_name_% video6.mkv"


    Und später kommt dann ein Befehl, der in die MKV mit einer einsamen Videospur noch die drei Tonspuren (jetzt im FLAC-Format) einbindet.

  • Doch es ist alles genau so richtig wie es sein soll...
    Ja die Audio existieren vor der Pipe und werden nicht weiter gereicht, das ist richtig so, so werden als eigene Datei abgespeichert...

    Ich habe nachher als Dateien
    Audio 1
    Audio 2
    Audio 3
    Video 1 (ohne Audio)

    Ich will ja gar nicht schon in der Batch Datei Video und Audio zusammenfügen.
    Das mach ich nachher, manuell über mkvmerg, weil ich vorher noch die Audiodateien bearbeiten können möchte.

  • Beitrag von GelberDrache ()

    Dieser Beitrag wurde vom Autor gelöscht ().
  • Vielleicht hilft das ja


    OBS Studio -> Aufnahme -> Batch Datei -> Video 1, Audio 1, Audio 2, Audio 3

    Ist das Audio Verhältnis in Ordnung?

    MkvMerge -> Video 1 + Audio 1 -> fertiges Video

    Ist das Audio Verhältnis nicht in Ordnung?

    Audacity -> Audio 2 + Audio 3 -> fertiges Audio -> MkvMerge -> Video 1 + fertiges Audio -> fertiges Video

  • Ach ok, die Audio Streams sind schon aac. Wie wäre es mit:


    -acodec copy -map 0:2 "%_name_% audio6.2.m4a"


    Habe jetzt die Kommandozeile nicht getestet, aber kopiere den AAC Stream einfach in einen separaten MP4 oder MKA Container. Sollte auch geschnitten sein. (-ss 00:10:00 -t 00:05:0 und sowas)


    Alternativ kannst du dich mit Audiofilter spielen z.B. :


    -acodec flac -map 0:3 -af loudnorm "%_name_% audio6.3.mka"


    der loadnorm Filter sollte Audio normalisieren und als flac in mka speichern. Wobei ich jetzt nicht weiss, welches Codecs Youtube annimmt. Würde zuerst flac oder opus probieren. FFMPEG Builds für Win mit Opus gibts hier -> http://ffmpeg.zeranoe.com/builds/



    Auch würde ich nicht in x264 pipen, sondern direkt mit ffmpeg eine fertige mkv (Video und Audio1) erzeugen. Dann sparst du den späteren mkvmerge Durchgang.

  • Da ist dann halt wieder das Problem das Audacity mit aac und flac ärger macht, ist halt nervig.
    Deswegen nutze ich ja eigentlich wav, irgendwie gab es auch etwas das wie wav ist aber kein Problem mit größeren Dateien hat, ex wav oder irgendwie so...
    Ich weiß es nur leider nicht mehr..

    Ja das mit dem Stream Audio einfach direct als copy zu ziehen war mir dann auch schon eingefallen, da wenn da alles in Ordnung ist ich ja sowieso nicht mehr machen muss und das direkt so übernehmen kann.
    Wobei ich schon am überlegen bin dann trotzdem die beiden 320 acc Audios zu nehmen in Audacity rein zu schmeißen, einfach übereinander legen, so das sie wie beim Stream sind und dann als wav/flac exportieren je nachdem was geht. Dadurch habe ich dann die Audiostreams mit 320 aac als Grundlage, anstatt nur 160 acc, was wiederum der neucodierung von Youtube wieder entgegen kommen würde. Weil wegen besseres Material hochgeladen.

    Einfach normalisieren bringt mir da nichts, weil mal können es 5% sein die die Ingame Spure lauter sein muss, mal 10% oder irgendwas anderes.
    Immer von Spiel und mir selber abhängig, deswegen möchte ich den Schritt schon gerne über Audacity machen, damit ich das in Ruhe machen kann.

    Wie gesagt das mit der Pipen mache ich da der x264 von MeGui schneller ist und 10 Bit Encoding kann.
    Das 10 Bit Encoding hängt wieder mit Youtube zusammen, zwar nehme ich nur in 8 Bit auf, aber wenn das Video in 10 Bit auf Youtube hochgeladen wird, wird das Banding dadurch fast komplett verhindert.


    Die Frage ist nur, ob ffmpeg bei x264 sowohl -D8 als auch -D10 einbindet. Wenn -D10 fehlt, lohnt es sich nicht, ffmpeg zu benutzen, um mit x264 zu encodieren...

    Ähm... was?
    Da verstehe ich gerade nur Bahnhof

  • Die Frage ist nur, ob ffmpeg bei x264 sowohl -D8 als auch -D10 einbindet. Wenn -D10 fehlt, lohnt es sich nicht, ffmpeg zu benutzen, um mit x264 zu encodieren...

    Ich würde es zumindest probieren:


    10-bit x264 & x265


    FFmpeg recently added support to encode to 8-bit and 10-bit for x264 and x265 within the same executable.


    This feature has been enabled in the Zeranoe builds and can be triggered using the desired 10-bit pix_fmt:


    -pix_fmt yuv420p10le



    https://ffmpeg.zeranoe.com/for…ic.php?f=2&t=5475&p=13181

  • Ach, das war nur eine Abkürzung von x265; bei x264 gibt es nur die Lang-Version der Option:


    Code
    1. --output-depth <integer> Specify output bit depth


    Es gibt eine x264.exe, die sowohl den Code für 8-bit-Genauigkeit als auch für 10-bit-Genauigkeit enthält: ein "multilib build". Nun wäre die Frage, ob ffmpeg auch Code für beide Genauigkeiten enthalten kann, und ob man ffmpeg einen Parameter mitgeben kann, der zur Laufzeit auswählen kann, ob innerhalb von ffmpeg x264 mit 8 oder 10 bit Genauigkeit encodiert. Also vermutlich in "-x264opts".


    Allerdings wäre es möglich, dass ein Multilib-Build zwar mit x264 möglich ist, aber ffmpeg es nicht erlaubt, beide Encoder-Varianten in eine EXE einzubinden. Falls das wahr wäre, müsste man ffmpeg ausschließlich mit einer 10-bit-Variante von x264 compilieren. Vor 3 Jahren war das der Fall. Ob das heutzutage so ist, weiß ich aber nicht genau...

    _


    P.S.:


    MABS implementiert x264: explicitely use bitdepth=all if no restriction on bitdepth


    Wird wohl einen Grund haben. Vielleicht erlaubt das auch ein Multilib-Build von ffmpeg mit x264.

  • Da ist dann halt wieder das Problem das Audacity mit aac und flac ärger macht, ist halt nervig.

    Hast du das temp Verzeichnis von Audacity schon mal verlegt? auf die schnellste Platte mit genug Platz. (Einstellungen)

    Vielleicht kommt der Ärger daher, dass er nicht genug Platz hat, wenn er den Audio Stream dorthin extrahiert.


    Nun wäre die Frage, ob ffmpeg auch Code für beide Genauigkeiten enthalten kann, und ob man ffmpeg einen Parameter mitgeben kann, der zur Laufzeit auswählen kann, ob innerhalb von ffmpeg x264 mit 8 oder 10 bit Genauigkeit encodiert. Also vermutlich in "-x264opts".

    Wenn du per Filter das Pixel Format änderst, sollte ffmpeg automatisch die jeweilige Encoder Version laden.


    z.B. per -pix_fmt yuv420p10le (für 10bit) oder VapourSynth Script

  • Doch, monarc99 hat schon Recht. Mit -pix_fmt yuv420p10le schaltet ffmpeg auf die 10 Bit-Kodierung von x264. ffmpeg läßt sich auch als Multi-Bitdepth-Variante kompilieren. Macht zeranoe auch so.

  • So...
    Das wird jetzt etwas mehr...



    Ich hab das jetzt bei ffmpeg alles so eingestellt bekommen, das der x264 wie bei MeGui läuft.
    Ich habe bei dem Test Video (Spiel = Doom 2016) einen Unterschied von 0,956x (MeGui) zu 0,965x (ffmpeg).
    Das heißt einen Unterschied von 47,8 Fps zu 48,25 Fps.
    Die Dateigröße ist etwa gleich geblieben, das einzige was mich jetzt stört, das die Videodatei von ffmpeg auch Audio beinhaltet, vor allem frage ich mich auch warum Vorbis und wo zieht er die ganzen Einstellungen für den Audiocodec her...
    Es wurden aber trotzdem alle 3 Audiospuren so wie ich es haben wollte separat abgespeichert.

  • So...

    Hier noch mal die Mediainfo der Aufnahme, hatte in die vorherige Antwort nicht mehr reingepasst...