Frage: FFMPEG & X265 Kommandozeilen Frage

  • Hallo liebe Community,
    wie man bereits an meiner post & Thread Anzahl erkennen kann bin ich recht neu in dieser Community... einer meiner Beweggründe mich hier anzumelden war mit unter anderem dieser Thread hier.
    Daher bitte ich um Verzeihung wenn der Thread nicht so ganz angebracht ist... Lange rede kurzer Sinn:

    Also meine eigentliche Frage besteht darin wie ich folgendes optimieren kann und wieso folgendes nicht übernommen wird.

    Zunächst mal hier die Befehlszeile für mein ffmpeg & x265:

    Zitat

    ffmpeg -i $i.mkv -map 0 -c copy -flags:v +global_header -flags +loop -c:v libx264 -preset slow -profile:v high10 -movflags +faststart -tune ssim -pix_fmt yuv420p10le -coder 1 -x264opts "cabac=1:rc-lookahead=60:threads=0:keyint=30:min-keyint=25:scenecut=0:no-scenecut:bframes=16:b-adapt=2:ref=16:qp=0:open-gop=0:aq-mode=2:aq-strength=2:trellis=2:deblock=0,-1:partitions=all:weightb=1:weightp=1:me=esa:merange=16:subme=10:mixed-refs:8x8dct:level=4.0:crf=16" "$i.mkv"


    Ich verwende zu Testzwecken diese Befehlszeile um eine möglichste Akkurate (Sprich schon fast bestmöglichste) Qualität zu erzielen. Also ich möchte halt eine möglichst hohe Qualität erzielen und möglichst wenig "Verlust".

    Wenn ich jetzt die oben genannte Zeile benutze und ein Video Konvertiere wundere ich mich jedesmal über folgende Zeilen:

    Zitat

    264 - core 148 r2601 a0cd7d3 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - http://www.videolan.org/x264.html - options: cabac=1 ref=16 deblock=1:0:-1 analyse=0x3:0x133 me=esa subme=10 psy=0 mixed_ref=1 me_range=16 chroma_me=1 trellis=2 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=16 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=1 keyint=30 keyint_min=16 scenecut=0 intra_refresh=0 rc_lookahead=30 rc=crf mbtree=1 crf=16.0 qcomp=0.60 qpmin=0 qpmax=81 qpstep=4 ip_ratio=1.40 aq=2:2.00

    Sprich einige Werte werden gar nicht erst übernommen und ich frage mich wieso. Bestes beispiel ist zum beispiel das min_keyint... sollte 25 sein ist aber 16 oder deblock sollte eigentlich 0,-1 sein .. wird aber als 1:0:-1 deklariert usw usw...

    Ich versteh also nicht warum die Werte nicht so übernommen werden wie ich sie angebe ...

    Der zweite Teil meiner frage besteht im Prinzip darin wie ich das ganze noch optimieren ... also Verbessern kann... vlt habe ich ja einiges falsch oder gar nicht erst drin etc...

  • :welcome:

    Du verwendest in deiner ffmpeg-Kommandozeile sehr sehr viele einzelne Parameter. Ist es wirklich sinnvoll, sich über deutlich mehr als nur Presets und Tunings zu sorgen, außer wenn das z.B. für die Kompatibilität mit speziellen Geräten nötig ist?

    Übrigens ähneln sich die Parameterlisten von x264 und x265 zwar, soweit das sinnvoll ist, aber es gibt auch reichlich Unterschiede.

    Die im von x264 erzeugten AVC-Stream enthaltenen internen Encoding-Parameter entsprechen nicht direkt den externen Parametern, die ein Encoder (z.B. über die Kommandozeile) erhält. Selur hat mal ein Tool geschrieben, welches die internen Parameter zurückrechnet und dabei auch versucht, abkürzend auf Meta-Parameter wie "preset" und "tune" zurückzuführen (Mis2x264, wohl auch in Hybrid enthalten).

  • :welcome:

    Du verwendest in deiner ffmpeg-Kommandozeile sehr sehr viele einzelne Parameter. Ist es wirklich sinnvoll, sich über deutlich mehr als nur Presets und Tunings zu sorgen, außer wenn das z.B. für die Kompatibilität mit speziellen Geräten nötig ist?

    Nun auf Kompatibilität habe ich es im großen und ganzen nicht direkt abgesehen ... oder eben halt nur auf ein Minimum.
    Sollte alles halt in den meisten Playern abspielbar sein! Allerdings beziehe ich mich im großen und ganzen nur auf Player auf dem PC.. VLC, MediaPlayer & Co.
    Ich hatte jetzt eigentlich nicht direkt vor das ganze auch TV Technisch oder BluRay Technisch oder so Kompatibel zu machen (es sei den es würde durch Zufall passieren oder aber sich direkt damit vereinbaren lassen)

    Übrigens ähneln sich die Parameterlisten von x264 und x265 zwar, soweit das sinnvoll ist, aber es gibt auch reichlich Unterschiede.


    Nun mit x265 / HEVC habe ich selbstverständlich auch schon bereits mit rum Experimentiert und bin an und für sich damit zufrieden also was die Qualität betrifft jedoch ist da halt das Problem das die Rechenzeiten extrem hoch sind und die Kompatibilität eher gering ist ... Ich hatte auf mein linux System das Problem das ich am Anfang gar nicht erst X265 in VLC abspielen konnte ... erst nachdem ich ein Plugin nachinstalliert habe. Darum bin ich VORERST wieder zurück auf X264. Jetzt möchte ich halt das Minimum an Kompatibilität aufweisen Streaming und abspielen mit Faststart etc ... und halt eine möglichst hohe Qualität.. Natürlich auch eine gewisse Kompression .. sonst könnte ich ja gleich placebo nutzen XD

    Die im von x264 erzeugten AVC-Stream enthaltenen internen Encoding-Parameter entsprechen nicht direkt den externen Parametern, die ein Encoder (z.B. über die Kommandozeile) erhält. Selur hat mal ein Tool geschrieben, welches die internen Parameter zurückrechnet und dabei auch versucht, abkürzend auf Meta-Parameter wie "preset" und "tune" zurückzuführen (Mis2x264, wohl auch in Hybrid enthalten).


    Nun da verstehe ich jetzt nicht direkt was du mir damit sagen möchtest... beziehst du dich da auf die Frage von mir wieso es Unterschiede gibt zwischen dem was ich als Kommando festlege und dem was mir FFMPEG sagt?

    Was Hybrid und Co. betrifft ... nun ich bin eigentlich kein Freund von diesen GUI´s liegt aber daran weil ich mit FFMPEG 100% RechenPower bekomme beim Konvertieren und mir Hybrid usw höchsten 60-70% wenn überhaupt .. wobei ich keine Ahnung habe woran das liegt .. die dadurch entstehende Konvertierungszeit sind dementsprechend auch enorm hoch...

    Jedenfalls versuche ich genau aus diesem Grunde ein für mich "Sub"Optimale Kommandozeile zu schreiben die es mir ermöglicht möglichst Originalgetreue Videos zu erstellen mit einer gewissen Kompression und halt mit möglichst wenig Verlust. Halt mit Rückblick darauf das die Größe für mich halt 2 rangig ist und die Kompatibilität ebenfalls nur an 2 stelle steht. Sollte halt in den Gängigen Web & Playern laufen ohne großen Aufwand.

    Edit..: Ehm klitze kleine frage .. wieso ist die Foren Anzeige Verkehrt herum? Mein Post ist jetzt ganz am Ende und der neuste Post ist ganz am Anfang der Thread Anzeige ... wie kann ich das wieder auf Standart ändern XD finde die Option nicht

  • Zu 1.: Wenn es nur um das Abspielen am PC geht, dann ist im Allgemeinen die klare Empfehlung, sich auf Kombinationen von Presets und Tunings zu verlassen, da die Entwickler sich bei deren Design viel Mühe gegeben haben, Abhängigkeiten zwischen ihnen gut auszubalancieren, auch mit einem Tiefenwissen in den Details des Encoders, den wohl kaum ein anderer Benutzer ihres Encoders haben könnte. Die wissen also über Motor-Tuning bescheid, während Leute mit aller-ausführlichsten Mega-Kommandozeilen nur versuchen, mit zusätzlichen Heckspoilern Eindruck zu schinden. ;)

    Darüber hinaus bedeutet "höchste Encoding-Effizienz" (oder eher, höchster Aufwand) nicht zwangsläufig "bester Qualitätserhalt" nach Messungen oder gar "bester Qualitätseindruck" beim Betrachter. Der subjektive Gesamteindruck von der Qualität ist von einzelnen Betrachtern abhängig. Es gibt Leute, denen ein leicht verlustbehaftetes Ergebnis mit psychovisuellen Änderungen irgendwie gefühlsmäßig besser gefällt als die technisch exakteste Konvertierung, die dafür auch ein Mehrfaches an Zeit (und Strom) gekostet hat.
    _

    Zu 2.: Du erwähnst plötzlich irgendwas von "streaming" und "faststart". Geht es also darum, dass du die konvertierten Videos auf einem PC im Netzwerk hast und sie auf einem anderen abspielst, so dass die Netzwerk-Bandbreite bei der Wiedergabe einen Einfluss auf die Zuverlässigkeit haben kann? Vielleicht solltest du die Rahmenbedingungen noch mal etwas exakter mit Überblick über beteiligte Geräte klarstellen.
    _

    Zu 3.: Ja, es gibt einen Unterschied zwischen den Parametern, die du an ffmpeg (bzw. x264 oder x265 alleinstehend) übergibst und denen, die libx264/libx265 dann durch ffmpeg zu Protokoll geben (oder im Videostream speichern, so dass MediaInfo sie auslesen kann). Stell es dir etwa so vor wie eine Pizzabestellung: Am einfachsten ist es, "Pizza Salami mit extra Käse" zu bestellen (--preset slower --tune grain), auf dem Beipackzettel müssen aber immer sämtliche einzelne Zutaten bis zur exakten Varianten-Bezeichnung angegeben werden (Edamer oder Mozzarella, nicht bloß "Käse").
    _

    "An der GUI" liegt es niemals, wenn die CPU-Auslastung niedriger ist als erwartet, denn "grafische Benutzeroberflächen" leiten einen Nutzer nur bis zum Beginn der Konvertierung; sobald die startet, wartet die GUI fast ohne Verbrauch von Rechenleistung auf das Ende der Konvertierung. Es könnte eher mittelbar daran liegen, dass die GUI einen Konvertierungsprozess vorbereitet hat, in welchem das Video vor dem Encoder noch relativ aufwändig gefiltert wird, so dass der Encoder alleine nicht die ganze Rechenzeit verwendet, sondern sich die Arbeit z.B. mit einem filternden Frameserver wie AviSynth teilt. Das liegt dann aber an den Einstellungen, mit denen die Filterung gesteuert wurde. Zumindest falls überhaupt AviSynth verwendet wird. Ich glaube, Hybrid kann auch ohne AviSynth nur mit ffmpeg allein konvertieren lassen. Und auch da kann man sicherlich Gründe finden, warum das in deinen beobachteten Fällen nicht so effizient lief, und die Ursache dieses Problems beheben, wenn man nur alles über die getätigten Einstellungen weiß.
    _

    Oben im Kopf des Forums das Menü "Aktionen" ausklappen und Einstellungen ändern, dann vermutlich:

    Anzeige von Themen - Themenanzeigeart: Ich bevorzuge da "Linear - Älteste beiträge zuerst"; es gibt da auch eine Erklärung der verschiedenen Modi verlinkt.

  • Zu 1.: Wenn es nur um das Abspielen am PC geht, dann ist im Allgemeinen die klare Empfehlung, sich auf Kombinationen von Presets und Tunings zu verlassen, da die Entwickler sich bei deren Design viel Mühe gegeben haben, Abhängigkeiten zwischen ihnen gut auszubalancieren, auch mit einem Tiefenwissen in den Details des Encoders, den wohl kaum ein anderer Benutzer ihres Encoders haben könnte. Die wissen also über Motor-Tuning bescheid, während Leute mit aller-ausführlichsten Mega-Kommandozeilen nur versuchen, mit zusätzlichen Heckspoilern Eindruck zu schinden. ;)

    Nun was soll ich dazu sagen hehe :D Wenn es mir lediglich nur um irgendwelche Heckspoiler gehen würde hätte ich wohl kaum diese Diskussion gestartet... Das hätte man dann ja auch einfacher haben können oder wie was meinst du ;D. Klar kann man nur mit den Presets und mit dem Tuning Arbeiten spricht eigentlich an und für sich nichts dagegen jedoch ist mir aufgefallen das es bei den Tuning-einstellungen Sachen gibt die mir nicht unbedingt so gefallen wie sie Standard technisch vorgesehen sind.

    Kleines Beispiel:

    Preset "slow":

    Code
    [COLOR=#000000][FONT=DejaVuMonoWeb]--b-adapt 2[/FONT][/COLOR][COLOR=#000000][FONT=DejaVuMonoWeb]--direct auto[/FONT][/COLOR][COLOR=#000000][FONT=DejaVuMonoWeb]--me umh[/FONT][/COLOR][COLOR=#000000][FONT=DejaVuMonoWeb]--rc-lookahead 50[/FONT][/COLOR][COLOR=#000000][FONT=DejaVuMonoWeb]--ref 5[/FONT][/COLOR][COLOR=#000000][FONT=DejaVuMonoWeb]--subme 8[/FONT][/COLOR]

    Jedoch nutze ich in meiner Kommandozeile mit unter anderem folgende Einstellungen:

    Code
    rc-lookahead=60 me=esa ref=16 subme=10


    Jetzt nur um einmal ein kleines Beispiel zu nennen


    Naja das mit dem GUI lass ich mal so im Raum stehen .. kann das eben nicht beurteilen.

    Jedenfalls um das ganze noch einmal auf den Punkt zu bringen:
    Ich versuche lediglich meine KommandoZeile für mich selbst anzupassen. Sprich ("Sub") Optimal zugeschnitten auf meine Bedürfnisse. Ich hatte eigentlich nicht vor daraus jetzt Spezielle Wissenschaften und Hexerein oder gar irgendwelche Magie Zirkel zu erschaffen.. Es geht mir lediglich darum möglichst eine Effiziente Zeile zu Zaubern was HÖCHST möglichste Qualität bietet zu einer Akzeptablen Kompression. Wenn ein Video 1-2GB Groß wird dann ist es eben so .. aber 1-2GB sind immer noch besser als 10-20GB. (Größenangaben sind ausgedacht und willkürlich... -.- bevor jetzt einer auf die Idee kommt und daraus eine Erbsenzählerei macht)

    Das ist ja auch einer der Gründe warum ich hier nachfrage .. schließlich kennt ihr euch ja um Welten besser aus als das was ich an Wissen besitze.. Ich bin wirklich nur ein NOOB und lerne den ganzen quark auf der basis Learning by doing und natürlich durch solche anregenden Konversationen wie diese hier.

  • Ich versteh also nicht warum die Werte nicht so übernommen werden wie ich sie angebe ...

    Der x264 Encoder besteht aus mehreren Teilen.
    Zum einen aus einer Library (libx264) mit einer API (Programmierschnittstelle), die den eigentlichen Encoder darstellt.
    Und einem Kommandozeilen Programm (x264) welches die Schnittstelle für den Benutzer darstellt.

    Beide nehmen Parameter entgegen, die Namen der einzelnen Parameter kann sich aber leicht unterscheiden:
    Wenn du dem x264 CLI deine Parameter übergibst (z.B. --min-keyint 25), passt er die an die API Schnittstelle der Library an ( wird zu keyint_min=25)

    Und da ffmpeg die libx264 direkt anspricht und alle Parameter 1:1 weiterleitet, die du in der Kommandozeile angibst, brauchst du die Parameter in API Form. Die siehst du z.B., wenn du mit mediainfo obige x264 encoding Infos ausliest.

  • Zunächst mal hier die Befehlszeile für mein ffmpeg & x265:

    Wenn du libx264 verwendest, kann nicht x265 rauskommen. Wobei die Kommandozeile eigentlich gar nicht funktionieren dürfte.

    PS: tut sie doch, was mich wundert, was ich mir bei ffmpeg abgewöhnen sollte.

    Einmal editiert, zuletzt von Endoro (10. November 2015 um 16:03) aus folgendem Grund: PS

  • Wenn du libx264 verwendest, kann nicht x265 rauskommen. Wobei die Kommandozeile eigentlich gar nicht funktionieren dürfte.

    PS: tut sie doch, was mich wundert, was ich mir bei ffmpeg abgewöhnen sollte.

    Naja liegt daran weil ich mich tatsächlich verschrieben habe XD aber wenn man die Kommandozeile gelesen hätte würde man auch wissen das es sich dabei um X264 handelt ...

  • Das voraussehende Wissen hab ich mir im Netz abgewöhnt. Du verwendest beispielsweise -x264opts crf=16, obwohl ffmpeg seine eigene -crf, -qp usw. hat, mit -profile geht das ja nicht. Whatever, bekommst du denn nun das gewünschte Ergebnis?

Jetzt mitmachen!

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