ffmpeg, x265: crf-parameter wird anscheinend beim transkodieren ignoriert

  • Hallo Zusammen,

    ich habe derzeit ein Verständnisproblem beim encoden (von Anime) nach HEVC.
    Ich nutze den folgenden Befehl:

    Code
    ffmpeg64 -i "z:\sample.mkv" -c:a copy -c:v libx265 -preset slow -x265-params "merange 44:bframes 16:no-rect:no-amp:aq-mode 1:aq-strength 1.0:rd 4:psy-rd 1.6:psy-rdoq 5.0:rdoq-level 1:no-sao:qcomp 0.75:no-strong-intra-smoothing:rdpenalty 1:tu-inter-depth 2:tu-intra-depth 2:ctu 32:max-tu-size 16:[B]crf=18[/B]" output.mp4

    Das fertige File hat laut Mediainfo folgende Kodiereinstellungen:

    Code
    Kodierungseinstellungen                  : wpp / ctu=64 / min-cu-size=8 / max-tu-size=32 / tu-intra-depth=1 / tu-inter-depth=1 / me=3 / subme=3 / merange=57 / rect / no-amp / max-merge=3 / temporal-mvp / no-early-skip / rdpenalty=0 / no-tskip / no-tskip-fast / strong-intra-smoothing / no-lossless / no-cu-lossless / no-constrained-intra / no-fast-intra / open-gop / no-temporal-layers / interlace=0 / keyint=250 / min-keyint=23 / scenecut=40 / rc-lookahead=25 / lookahead-slices=0 / bframes=4 / bframe-bias=0 / b-adapt=2 / ref=4 / limit-refs=3 / limit-modes / weightp / no-weightb / aq-mode=1 / qg-size=32 / aq-strength=1.00 / cbqpoffs=0 / crqpoffs=0 / rd=4 / psy-rd=2.00 / rdoq-level=2 / psy-rdoq=1.00 / signhide / deblock / sao / no-sao-non-deblock / b-pyramid / cutree / no-intra-refresh / rc=crf / [B]crf=28.0[/B] / qcomp=0.60 / qpmin=0 / qpmax=51 / qpstep=4 / ipratio=1.40 / pbratio=1.30

    Wenn man bei beiden Codezeilen ganz nach nach rechts scrollt, sieht man die übergebenen und die benutzten crf-Werte...

    Ich würde gerne mit crf 18 kodieren, aber irgendwo muss es einen Override geben, da im Ergebnis offenbar crf 28 vorliegt....

    Was mache ich falsch?

    Grüße,
    B

  • Code
    libx265 AVOptions:
      -crf               <float>      E..V.... set the x265 crf (from -1 to FLT_MAX) (default -1)
      -preset            <string>     E..V.... set the x265 preset
      -tune              <string>     E..V.... set the x265 tune parameter
      -x265-params       <string>     E..V.... set the x265 configuration using a :-separated list of key=value parameters

    Die x265-Parameter, die ffmpeg einzeln unterstützt, sollte man nicht in den x265-params-Block einfügen, sondern als eigenständige ffmpeg-Parameter übergeben.

  • Hallo Zusammen,

    ich habe derzeit ein Verständnisproblem beim encoden (von Anime) nach HEVC.
    Ich nutze den folgenden Befehl:

    Code
    ffmpeg64 -i "z:\sample.mkv" -c:a copy -c:v libx265 -preset slow -x265-params "merange 44:bframes 16:no-rect:no-amp:aq-mode 1:aq-strength 1.0:rd 4:psy-rd 1.6:psy-rdoq 5.0:rdoq-level 1:no-sao:qcomp 0.75:no-strong-intra-smoothing:rdpenalty 1:tu-inter-depth 2:tu-intra-depth 2:ctu 32:max-tu-size 16:[B]crf=18[/B]" output.mp4

    Was mache ich falsch?

    Das Format deines x265-params ist falsch. Die Anleitung gibt vor:

    Code
    -x265-params       <string>     E..V.... set the x265 configuration using[B] a :-separated list of key=value parameters[/B]

    du musst die Parameter in libx265 Format übergeben, weil sie ffmpeg direkt an die Library übergibt. Die Parameter von x265 CLI Programm sind leicht anders, deshalb muss man immer etwas probieren oder im Sourcecode nachkucken.

    Aber in der Regel gilt: immer parameter=wert bilden und sie mit : trennen.
    Parameter die mit no- anfangen, in einen bool Wert umwandeln. also no-amp wird zu amp=1 oder amp=0 (1 für aktiv, 0 für deaktivieren)

    z.B. so (ohne das ich es jetzt getestet habe)

    -x265-params merange=44:bframes=16:rect=0:amp=0:aq-mode=1:aq-strength=1.0:rd=4:psy-rd=1.6:psy-rdoq=5.0:rdoq-level=1:sao=0:qcomp=0.75:strong-intra-smoothing=0:rdpenalty=1:tu-inter-depth=2:tu-intra-depth=2:ctu=32:max-tu-size=16:crf=18

Jetzt mitmachen!

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