Frames werden vereinzelt ausgelassen (bleiben schwarz), aber nur in einer Software

  • Hallo Allerseits,

    wir haben hier ein Problem was wir bis jetzt nicht lösen konnten und jetzt hoffe ich, dass mir hier vielleicht jemand helfen kann.

    Es ist so, dass wir Videos in ffmpeg nach mp4/h264/aac komprimieren und diese werden dann in "Cinegy" (ein Playout Programm) geladen und gestreamt. Nun ist es so, dass Cinegy vereinzelt Frames nicht darstellt. In der Programmvorschau taucht dann "Media Offline" auf und im Stream ist es dann schwarz. Wenn es vorkommt, dann sind es so 2-8 Frames ca.. Auch scheint es immer nur vor zukommen wenn im Video gerade ein Standbild ist, z.B. eine Powerpointfolie.

    Dieses Problem tritt auch nur in diesem Programm auf. In VLC, Quick Time, mpv, sieht man nichts. Wenn ich das ganze in ein mov packe, scheint es besser zu sein. Allerdings wird das auch nicht immer ganz sauber abgespielt und die Clips haben ein paar mehr Frames, wodurch unsere Datenbank nicht mehr übereinstimmen würde.

    Hattet ihr schon mal so ein Problem und wisst ihr was man da machen kann? Ich dachte schon, vielleicht liegt es an der variablen Bitrate, aber sicher bin ich mir auch nicht.

    Unsere Setting sind:

    Code
    ffmpeg -i "input" -pix_fmt yuv420p -s 1024x576 -sws_flags lanczos -c:v libx264 -crf 20 -preset slower -g 25 -profile:v Main -level 3.1 -refs 4 -maxrate 3M -bufsize 3M -c:a aac -b:a 192k -threads 8 "out.mp4"
    mp4box "out.mp4" -hint -brand mp42 -out "output.mp4"

    Grüße

    jb_


  • Hattet ihr schon mal so ein Problem und wisst ihr was man da machen kann?

    Du könntest probieren, konstante Framerate einzustellen. Vielleicht kommt das andere Programm damit nicht klar.

    Code
    ffmpeg -i "input" -pix_fmt yuv420p -s 1024x576 -sws_flags lanczos -c:v libx264 -crf 20 -preset slower -g 25 -profile:v Main -level 3.1 -refs 4 -maxrate 3M -bufsize 3M [COLOR='#FF0000']-x264opts force-cfr=1 -vsync 1[/COLOR] -c:a aac -b:a 192k -threads 8 "out.mp4"
    mp4box "out.mp4" -hint -brand mp42 -out "output.mp4"
  • Hallo monarc, danke für deine Antwort. Ich habe das jetzt mal versucht, mit der konstanten Bitrate, scheint schon viel besser zu funktionieren, aber noch nicht 100%. Wundern tut es mich, dass es nur in diesem einen Programm so ist. Selbst in Premiere kann ich die Clips einladen und dort tauchen die Fehler auch nicht auf.

  • Ah ok, na dann habe ich jetzt beides eingestellt :). Kein crf sondern: -b:v 1.8M -minrate 1.8M -maxrate 1.8M -buffsize 1.8M -x264opts force-cfr=1 -vsync 1. Zusätzlich habe ich nun Profile, Level und ref nicht mehr beschränkt und die GoP Size ist nun auf 12. Damit sind mir bis jetzt keine Fehler mehr aufgefallen. Wenn B-Frames nicht unterstützt werden würden, müssten doch generell Fehler auftauchen und nicht nur bei Standbilder, oder? Auch schreibt die Doku, wenn etwas von dem Codec nicht unterstützt werden würde, es auf das Ouick Time zurückgreifen würde, zum decodieren.

  • der Thread ist schon etwas älter, meinst du die Thematik ist immer noch aktuell? Dort habt ihr b-frame=1 genommen. Wäre das immer noch deine Empfehlung? Müsste recht schnell entscheiden, weil ich den Komprimierungsjob schon gestartet hatte. Jetzt kann ich ihn noch stoppen und neu starten. bei ~1650 Files zählt jede Stunde :).

    Die Codec Settings, die sich ergeben sind diese:

    Code
    cabac=1 ref=8 deblock=1:0:0 analyse=0x3:0x133 me=umh subme=9 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 \
    threads=11 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 \
    keyint=12 keyint_min=1 scenecut=40 intra_refresh=0 rc_lookahead=30 rc=cbr mbtree=1 bitrate=1800 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 vbv_maxrate=1800 vbv_bufsize=1800 nal_hrd=none \
    filler=0 ip_ratio=1.40 aq=1:1.00
  • Ok, danke für die Info! Was hällst du dann von diesen Settings:

    Code
    ffmpeg -hide_banner -i "$lName" -vf scale=1024:576 \
    -pix_fmt yuv420p -sws_flags lanczos+accurate_rnd+full_chroma_int -c:v libx264 -b:v 1.8M \
    -preset slower -g 12 -minrate 1.8M -maxrate 1.8M -bufsize 1.8M -x264opts force-cfr=1:bframes=1 -vsync 1 \
    -c:a aac -b:a 192k -threads 11 -nostdin "$dNName/${nName}.mp4"
  • - audio bitrate halte ich für zu hoch
    - würde persönlich immer vbv settings verwenden
    - '-b:v 1.8M -minrate 1.8M -maxrate 1.8M -bufsize 1.8M' => sollte das nicht cbr ergeben? Warum?

    Würde persönlich nicht 1pass bitrate encoding verwenden sondern eher crf oder 2pass, da die 1pass bitrate control nicht so dolle ist. (spricht bei gleicher Größe liefern 2pass und crf bessere Ergebnisse)

  • Ja eigentlich verwende ich auch immer crf, allerdings habe ich die meisten Fehler wegbekommen durch cbr. Meine Vermutung war, dass die Bitrate zu sehr runtergeregelt hat, bei Standbilder und daher die Fehler kamen.

    Bei diesen Files geht Qualität vor Größe und die durchschnittliche Größe von den Clips ist noch im Raum des Vertretbaren (ca. 580 mb für 40 Minuten Clip). Viele Clips die in das Streaming Programm geladen werden, sind schon mal komprimiert worden und hinter der Streaming Software hängt noch mal ein Kompressionsvorgang, der fürs Web komprimiert. Da will ich nicht unnötig geizen mit den Bits.

  • Hatte jetzt noch mal getestet:

    Variable Bitrate (b:v 1.6M; minrate 1M; maxrate 2.4M) > Fehler
    crf 19 > Fehler, aber nur 1 Frame lang
    crf 20 > Fehler
    Konstante Bitrate (b:v 1.8M; minrate 1.8M; maxrate 1.8M) > keine Fehler (zuminest bis jetzt nicht)

    Alle Test haben bframe=1 und -x264opts force-cfr=1 -vsync 1, also im Prinzip die Settings vom letzten Post.

  • Cinegy ist wohl sehr wählerisch, was er nimmt.

    Du kannst höchstens noch mit nal-hrd experimentieren.

    Also z.B.

    Zitat


    -crf 20 -x264opts vbv-maxrate=3000:vbv-bufsize=3000:nal-hrd=vbr


    Keine minrate setzen.

    Oder

    Zitat

    -b:v 1.8M -x264opts vbv-maxrate=3000:vbv-bufsize=3000:nal-hrd=cbr

    nal-hrd=cbr aktiviert automatisch den filler Modus bei x264. Also wieder keine minrate setzen.

    Oder gleich einen andere Codec nehmen, wenn es eh bloß ein Zwischenformat ist.

  • Leider waren jetzt doch wieder Fehler drin. Was ich bis jetzt herausgefunden habe:

    - man kann das ganze wirklich bis aufs Frame genau reproduzieren
    - setzte ich Referenzframes manuell runter tauchen mehr Fehler auf
    - cbr/vbr bringen beide Fehler
    - kleine GoP Sizes scheint das ganze besser zu machen
    - bframes deaktivieren hilft nichts
    - bframes auf 3 verschiebt die fehlerhaften Frames an eine andere Stelle
    - wenn ich richtig gerechnet habe tauche die Fehler, wenn sie auftauchen, bei einem bframe auf

  • Hm, weder gehts gar nicht oder er ist gegen etwas ganz bestimmtes allergisch.

    Wie ist es denn bei -profile baseline -preset ultrafast ?
    Da ist so ziemlich viel deaktiviert.

    Wie groß dürfen die Dateien denn werden und sollen die aufbewahrt werden? Wenn nicht, vielleicht ein lossless Codec?

  • Also es ist so, dass wir vorher mpeg2 hatten und da ging immer alles problemlos. Allerdings wollten wir etwas Speicherplatz sparen und haben uns deshalb entschieden zu h264 zu wechseln. Die Videos werden nicht gelöscht, somit werden es mit der Zeit immer mehr.

    Wenn die Clips mit Adobe Media Encoder komprimiert werden, tauchen auch keine Fehler.

    Habe jetzt noch mal versucht die Settings von Adobe zu übernehmen, soviel gibt mediainfo da auch nicht preis und jetzt sind mir keine Fehler aufgefallen. Dort wird Level 5.1 eingestellt und reference frames 2 (vorher hate ich nur 3,4,6 und 8 versucht). Meine Zeile schaut demnach so aus:

    Code
    ffmpeg -hide_banner -i 'input.mp4' -vf scale=1024:576 -pix_fmt yuv420p -sws_flags lanczos+accurate_rnd+full_chroma_int -c:v libx264 -b:v 1.8M -preset slower -g 12 -level 5.1 -refs 2 -x264opts bframes=1:vbv-maxrate=2000:vbv-bufsize=2000:nal-hrd=cbr -c:a aac -b:a 192k output.mp4

    Adobe verwendet auch kein CABAC. Hatte ich testhalber auch mal ausgemacht, aber keinen Unterschied festgestellt. Könnte das Auswirkung haben?

    Ja, sneaker2, du hast recht, da kann was nicht stimmen. Bei dem Test, wo die bframes aus waren, habe ich nicht nachgeschaut welche Frames nicht angezeigt werden.

    Edit: es scheint wohl wirklich an den Referenz Frames zu liegen. Habe die nun auf 2 und nutze wieder crf ohne Profile und Level zu setzen und funktioniert. Hoffen wir mal, dass das bei allen Clips so ist.

Jetzt mitmachen!

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