Beste Einstellungen für FFMpeg mit NVENC

25

Ich verwende mein FFMPEG mit der Unterstützung meiner GPU ( NVENC ), um Dateien von meinem Satellitenempfänger (SD, mpeg2 .TS-Files) in h264 .mp4-Files zu konvertieren

Hier ist die Linie, die ich benutze

ffmpeg -i "e:\input.ts" -vcodec h264_nvenc -preset slow -level 4.1
       -qmin 10 -qmax 52 "e:\output.mp4"

Aber die Qualität ist nicht so gut wie erwartet. Und die volle Leistung meines Systems wird nicht genutzt:

Bildbeschreibung hier eingeben

Nur 11% GPU und 30% CPU-Auslastung.

Frage: Kann ich einige Verbesserungen vornehmen, um die Qualität bei gleicher Dateigröße zu verbessern und die Rechenleistung meiner Geforce GTX 1080 zu verbessern?

Ich habe ein paar Parameter gefunden, die sich von but zu ändern scheinen , -preset slowsollte aber schon der beste Qualitätsansatz sein, oder?

Dr. Schnecke
quelle

Antworten:

36

Hier ist eine grobe Anleitung zum Einstellen des Encoders:

Wir gehen von den Grundlagen aus, da es nachteilig wäre, zu der Schlussfolgerung zu gelangen, dass eine schnelle Flut von Optionen die erwartete Leistung plötzlich verbessert, ohne die gewünschten Ziele und Erwartungen zu verstehen:

1. Beginnen Sie mit dem Verständnis der Optionen des Encoders.

Beginnen Sie bei NVENC-basierten Encodern mit dem Erlernen der für jeden Encoder verfügbaren Optionen (Beachten Sie, dass ich unter Linux arbeite. Daher verwende ich xclip, um die Codec-Optionen in die Zwischenablage zu kopieren, bevor ich sie hier einfüge):

(ein). Für den H.264-Encoder:

ffmpeg -hide_banner -h encoder=h264_nvenc | xclip -sel clip

Ausgabe:

Encoder h264_nvenc [NVIDIA NVENC H.264 encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
h264_nvenc AVOptions:
  -preset            <int>        E..V.... Set the encoding preset (from 0 to 11) (default medium)
     default                      E..V.... 
     slow                         E..V.... hq 2 passes
     medium                       E..V.... hq 1 pass
     fast                         E..V.... hp 1 pass
     hp                           E..V.... 
     hq                           E..V.... 
     bd                           E..V.... 
     ll                           E..V.... low latency
     llhq                         E..V.... low latency hq
     llhp                         E..V.... low latency hp
     lossless                     E..V.... 
     losslesshp                   E..V.... 
  -profile           <int>        E..V.... Set the encoding profile (from 0 to 3) (default main)
     baseline                     E..V.... 
     main                         E..V.... 
     high                         E..V.... 
     high444p                     E..V.... 
  -level             <int>        E..V.... Set the encoding level restriction (from 0 to 51) (default auto)
     auto                         E..V.... 
     1                            E..V.... 
     1.0                          E..V.... 
     1b                           E..V.... 
     1.0b                         E..V.... 
     1.1                          E..V.... 
     1.2                          E..V.... 
     1.3                          E..V.... 
     2                            E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     2.2                          E..V.... 
     3                            E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     3.2                          E..V.... 
     4                            E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     4.2                          E..V.... 
     5                            E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
  -rc                <int>        E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
     constqp                      E..V.... Constant QP mode
     vbr                          E..V.... Variable bitrate mode
     cbr                          E..V.... Constant bitrate mode
     vbr_minqp                    E..V.... Variable bitrate mode with MinQP (deprecated)
     ll_2pass_quality              E..V.... Multi-pass optimized for image quality (deprecated)
     ll_2pass_size                E..V.... Multi-pass optimized for constant frame size (deprecated)
     vbr_2pass                    E..V.... Multi-pass variable bitrate mode (deprecated)
     cbr_ld_hq                    E..V.... Constant bitrate low delay high quality mode
     cbr_hq                       E..V.... Constant bitrate high quality mode
     vbr_hq                       E..V.... Variable bitrate high quality mode
  -rc-lookahead      <int>        E..V.... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
  -surfaces          <int>        E..V.... Number of concurrent surfaces (from 0 to 64) (default 0)
  -cbr               <boolean>    E..V.... Use cbr encoding mode (default false)
  -2pass             <boolean>    E..V.... Use 2pass encoding mode (default auto)
  -gpu               <int>        E..V.... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
     any                          E..V.... Pick the first device available
     list                         E..V.... List the available devices
  -delay             <int>        E..V.... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
  -no-scenecut       <boolean>    E..V.... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
  -forced-idr        <boolean>    E..V.... If forcing keyframes, force them as IDR frames. (default false)
  -b_adapt           <boolean>    E..V.... When lookahead is enabled, set this to 0 to disable adaptive B-frame decision (default true)
  -spatial-aq        <boolean>    E..V.... set to 1 to enable Spatial AQ (default false)
  -temporal-aq       <boolean>    E..V.... set to 1 to enable Temporal AQ (default false)
  -zerolatency       <boolean>    E..V.... Set 1 to indicate zero latency operation (no reordering delay) (default false)
  -nonref_p          <boolean>    E..V.... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
  -strict_gop        <boolean>    E..V.... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
  -aq-strength       <int>        E..V.... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
  -cq                <float>      E..V.... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
  -aud               <boolean>    E..V.... Use access unit delimiters (default false)
  -bluray-compat     <boolean>    E..V.... Bluray compatibility workarounds (default false)
  -init_qpP          <int>        E..V.... Initial QP value for P frame (from -1 to 51) (default -1)
  -init_qpB          <int>        E..V.... Initial QP value for B frame (from -1 to 51) (default -1)
  -init_qpI          <int>        E..V.... Initial QP value for I frame (from -1 to 51) (default -1)
  -qp                <int>        E..V.... Constant quantization parameter rate control method (from -1 to 51) (default -1)
  -weighted_pred     <int>        E..V.... Set 1 to enable weighted prediction (from 0 to 1) (default 0)
  -coder             <int>        E..V.... Coder type (from -1 to 2) (default default)
     default                      E..V.... 
     auto                         E..V.... 
     cabac                        E..V.... 
     cavlc                        E..V.... 
     ac                           E..V.... 
     vlc                          E..V.... 

(b). Für den HEVC / H.265-Encoder:

ffmpeg -hide_banner -h encoder=hevc_nvenc | xclip -sel clip

Ausgabe:

Encoder hevc_nvenc [NVIDIA NVENC hevc encoder]:
    General capabilities: delay 
    Threading capabilities: none
    Supported pixel formats: yuv420p nv12 p010le yuv444p yuv444p16le bgr0 rgb0 cuda
hevc_nvenc AVOptions:
  -preset            <int>        E..V.... Set the encoding preset (from 0 to 11) (default medium)
     default                      E..V.... 
     slow                         E..V.... hq 2 passes
     medium                       E..V.... hq 1 pass
     fast                         E..V.... hp 1 pass
     hp                           E..V.... 
     hq                           E..V.... 
     bd                           E..V.... 
     ll                           E..V.... low latency
     llhq                         E..V.... low latency hq
     llhp                         E..V.... low latency hp
     lossless                     E..V.... lossless
     losslesshp                   E..V.... lossless hp
  -profile           <int>        E..V.... Set the encoding profile (from 0 to 4) (default main)
     main                         E..V.... 
     main10                       E..V.... 
     rext                         E..V.... 
  -level             <int>        E..V.... Set the encoding level restriction (from 0 to 186) (default auto)
     auto                         E..V.... 
     1                            E..V.... 
     1.0                          E..V.... 
     2                            E..V.... 
     2.0                          E..V.... 
     2.1                          E..V.... 
     3                            E..V.... 
     3.0                          E..V.... 
     3.1                          E..V.... 
     4                            E..V.... 
     4.0                          E..V.... 
     4.1                          E..V.... 
     5                            E..V.... 
     5.0                          E..V.... 
     5.1                          E..V.... 
     5.2                          E..V.... 
     6                            E..V.... 
     6.0                          E..V.... 
     6.1                          E..V.... 
     6.2                          E..V.... 
  -tier              <int>        E..V.... Set the encoding tier (from 0 to 1) (default main)
     main                         E..V.... 
     high                         E..V.... 
  -rc                <int>        E..V.... Override the preset rate-control (from -1 to INT_MAX) (default -1)
     constqp                      E..V.... Constant QP mode
     vbr                          E..V.... Variable bitrate mode
     cbr                          E..V.... Constant bitrate mode
     vbr_minqp                    E..V.... Variable bitrate mode with MinQP (deprecated)
     ll_2pass_quality              E..V.... Multi-pass optimized for image quality (deprecated)
     ll_2pass_size                E..V.... Multi-pass optimized for constant frame size (deprecated)
     vbr_2pass                    E..V.... Multi-pass variable bitrate mode (deprecated)
     cbr_ld_hq                    E..V.... Constant bitrate low delay high quality mode
     cbr_hq                       E..V.... Constant bitrate high quality mode
     vbr_hq                       E..V.... Variable bitrate high quality mode
  -rc-lookahead      <int>        E..V.... Number of frames to look ahead for rate-control (from 0 to INT_MAX) (default 0)
  -surfaces          <int>        E..V.... Number of concurrent surfaces (from 0 to 64) (default 0)
  -cbr               <boolean>    E..V.... Use cbr encoding mode (default false)
  -2pass             <boolean>    E..V.... Use 2pass encoding mode (default auto)
  -gpu               <int>        E..V.... Selects which NVENC capable GPU to use. First GPU is 0, second is 1, and so on. (from -2 to INT_MAX) (default any)
     any                          E..V.... Pick the first device available
     list                         E..V.... List the available devices
  -delay             <int>        E..V.... Delay frame output by the given amount of frames (from 0 to INT_MAX) (default INT_MAX)
  -no-scenecut       <boolean>    E..V.... When lookahead is enabled, set this to 1 to disable adaptive I-frame insertion at scene cuts (default false)
  -forced-idr        <boolean>    E..V.... If forcing keyframes, force them as IDR frames. (default false)
  -spatial_aq        <boolean>    E..V.... set to 1 to enable Spatial AQ (default false)
  -temporal_aq       <boolean>    E..V.... set to 1 to enable Temporal AQ (default false)
  -zerolatency       <boolean>    E..V.... Set 1 to indicate zero latency operation (no reordering delay) (default false)
  -nonref_p          <boolean>    E..V.... Set this to 1 to enable automatic insertion of non-reference P-frames (default false)
  -strict_gop        <boolean>    E..V.... Set 1 to minimize GOP-to-GOP rate fluctuations (default false)
  -aq-strength       <int>        E..V.... When Spatial AQ is enabled, this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive) (from 1 to 15) (default 8)
  -cq                <float>      E..V.... Set target quality level (0 to 51, 0 means automatic) for constant quality mode in VBR rate control (from 0 to 51) (default 0)
  -aud               <boolean>    E..V.... Use access unit delimiters (default false)
  -bluray-compat     <boolean>    E..V.... Bluray compatibility workarounds (default false)
  -init_qpP          <int>        E..V.... Initial QP value for P frame (from -1 to 51) (default -1)
  -init_qpB          <int>        E..V.... Initial QP value for B frame (from -1 to 51) (default -1)
  -init_qpI          <int>        E..V.... Initial QP value for I frame (from -1 to 51) (default -1)
  -qp                <int>        E..V.... Constant quantization parameter rate control method (from -1 to 51) (default -1)
  -weighted_pred     <int>        E..V.... Set 1 to enable weighted prediction (from 0 to 1) (default 0)

2. Machen Sie sich mit den Einschränkungen der Hardware vertraut und halten Sie sich zuerst an die korrekten Standardeinstellungen, bevor Sie Optionen anwenden:

In dieser Antwort finden Sie Informationen zu den Hardware-Einschränkungen, auf die Sie mit NVENC stoßen, insbesondere für HEVC-Codierungen unter Pascal.

Die hardwarebeschleunigte Infrastruktur für NVIDIA-Hardware der aktuellen Generation mit FFmpeg finden Sie in dieser Antwort.

Fahren Sie dann mit diesen Informationen mit dem nächsten Schritt fort.

3. Die Syntax ist entscheidend:

Hier ist die Reihenfolge, in der Sie Argumente an FFmpeg übergeben müssen:

(ein). Rufen Sie die Binärdatei auf.

(b). Übergeben Sie alle Argumente an FFmpeg (z. B. -logleveldirekt), bevor Sie Eingaben deklarieren.

(c). Wenn Sie eine hardwarebeschleunigte Dekodierung verwenden, cuviddeklarieren Sie sie hier und geben Sie alle erforderlichen Argumente an. An dieser Stelle ist unbedingt darauf hinzuweisen, dass Decoder bestimmte Einschränkungen aufweisen, z. B. erwartete Eingangsauflösungen, unterstützte Codecs usw.. Daher wird empfohlen, in der Produktion den Bedarf an hardwarebeschleunigten Decodern als Fehler zu ermitteln und zu validieren Zu diesem Zeitpunkt ist die Codierung fehlgeschlagen und kann nicht wiederhergestellt werden. Tatsächlich haben die MPV-Entwickler dies wiederholt erwähnt. Verlassen Sie sich nicht auf eine hardwarebeschleunigte Dekodierung für die Bereitstellung geschäftskritischer Inhalte.

(d). Deklarieren Sie Ihre Eingaben. Verwenden Sie für Streams die URL und stellen Sie bei Bedarf zusätzliche Flags (z. B. Puffergrößen) voran. Für lokale Ressourcen (auf einem zugänglichen Dateisystem) wird der absolute Dateipfad benötigt.

(e). Fügen Sie optional einen Filter ein. Dies ist für Funktionen wie Größenänderung, Pixelformatkonversation, De-Interlacing usw. erforderlich. Beachten Sie, dass ein hardwarebasierter Decoder (wie in Abschnitt (c) beschrieben) abhängig von dem hier verwendeten Filter Einschränkungen einführt, die Ihr Filter erfüllen muss in der Lage zu behandeln, oder Ihre Kodierung wird fehlschlagen.

(f). Rufen Sie die entsprechenden Video- und Audio-Encoder auf und übergeben Sie ihnen die erforderlichen Argumente wie Mappings, Bitraten, Encoder-Presets usw. Stellen Sie bei Bitraten sicher, dass Ihre gewünschten Werte über die Optionen -b:v, -maxrate:vund eingestellt sind -bufsize:v. Lassen Sie diese nicht leer. Dies ist ein guter Ausgangspunkt, warum diese Werte wichtig sind. Beginnen Sie wie immer mit der Angabe eines Presets. Scrollen Sie nach unten, um Hinweise zur Auswirkung der Voreinstellungen auf die Leistung dieses speziellen Encoders zu erhalten.

(G). Während FFmpeg das erforderliche Ausgabeformat einer Datei in Abhängigkeit von der ausgewählten Erweiterung der Ausgabedatei ableiten kann, wird empfohlen, das Ausgabeformat explizit (über die Option -f) zu deklarieren, damit bei Bedarf zusätzliche Optionen an den zugrunde liegenden Muxer übergeben werden können Wie so oft bei Streaming-Formaten wie HLS, MPEGTS und DASH.

(h). Der absolute Pfad zur Ausgabedatei.

Mit Ihrem obigen Beispiel, zitiert als:

ffmpeg -i "e:\input.ts" -vcodec h264_nvenc -preset slow -level 4.1
       -qmin 10 -qmax 52 "e:\output.mp4"

Sie können durch die Angabe richtigen Bitraten (durch die die Ausgabequalität erhöhen -b:v, -maxrate:vund -bufsize:vEinstellungen), so dass die adaptive Quantisierung Codierungstechniken (räumliche und zeitliche AQ Methoden unterstützt werden , von denen nur eine zu einer Zeit verwendet werden) und gegebenenfalls (und getrennt) Aktivieren der gewichteten Vorhersage (wodurch die B-Frame-Unterstützung deaktiviert wird), wie unten gezeigt, sowie eines optionalen Filters für eine ordnungsgemäße Verkleinerung und Anpassung der Größe, falls erforderlich. Das folgende Beispiel zeigt ein Snippet, das in mpeg2 codierte mpegts-Eingaben verarbeitet:

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v mpeg2_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 \
-spatial_aq:v 1 -aq-strength:v 15 -coder:v cabac \
-f mp4 "e:\output.mp4"

Warnung: Beachten Sie, dass die gewichtete Vorhersage ( -weighted_pred) nicht gleichzeitig mit der adaptiven Quantisierung aktiviert werden kann. Wenn Sie dies versuchen, schlägt die Encoder-Initialisierung fehl.

Das obige Snippet geht davon aus, dass es sich bei der Eingabedatei um einen MPEG2-Stream handelt. Wenn dies nicht der Fall ist, wechseln Sie nach der Analyse zum richtigen CUVID-Decoder:

ffprobe -i e:\input.ts

Wenn es sich um 'H.264 / AVC' handelt, ändern Sie das Snippet wie folgt:

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 -spatial_aq:v 1 \
-aq-strength:v 15 -coder:v cabac \
-f mp4 "e:\output.mp4"

Mir ist aufgefallen, dass das Aktivieren von Optionen für adaptive Quantisierung ODER gewichtete Vorhersage für NVENC Probleme mit der Stabilität verursachen kann, insbesondere bei bestimmten Gerätetreiberkombinationen. Erwägen Sie nach Möglichkeit die Verwendung von B-Frames (nicht mehr als 3) in Kombination mit der generischen Option, -refs:vdie auf 16 oder so festgelegt ist, anstatt zwischen AQ und gewichteter Vorhersage zu wechseln:

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 -refs:v 16 \
-bf:v 3 -coder:v cabac \
-f mp4 "e:\output.mp4"

Insbesondere bei Turing können Sie auch von der Aktivierung von B-Frames als Referenz profitieren, wie unten gezeigt (siehe Umschalten -b_ref_mode:v middle):

ffmpeg -loglevel debug -threads 4 -hwaccel cuvid -c:v h264_cuvid -i "e:\input.ts" \
-filter:v hwupload_cuda,scale_npp=w=1920:h=1080:interp_algo=lanczos \
-c:v h264_nvenc -b:v 4M -maxrate:v 5M -bufsize:v 8M -profile:v main \
-level:v 4.1 -rc:v vbr_hq -rc-lookahead:v 32 -refs:v 16 \
-bf:v 3 -coder:v cabac -b_ref_mode:v middle \
-f mp4 "e:\output.mp4"

Ein zusätzlicher Hinweis zur Threadanzahl (über die -threadsOption an ffmpeg übergeben ):

Mehr Encoder-Threads, die einen bestimmten Schwellenwert überschreiten, erhöhen die Latenz und haben einen höheren Speicherbedarf für die Codierung. Die Qualitätsverschlechterung ist aufgrund der erhöhten Codierungsverzögerung bei höheren Thread-Zählern im Modus mit konstanter Bitrate und im Modus mit nahezu konstanter Bitrate, der als VBV (Video Buffer Verifier) ​​bezeichnet wird, ausgeprägter. Keyframes benötigen mehr Daten als andere Frame-Typen, um das Pulsieren von Keyframes mit schlechter Qualität zu vermeiden.

Der Zero-Delay- oder Sliced-Thread-Modus hat keine Verzögerung, diese Option verschlechtert jedoch die Multi-Thread-Qualität in unterstützten Encodern.

Es ist daher ratsam, die Anzahl der Threads bei Codierungen zu begrenzen, bei denen es auf die Latenz ankommt, da der wahrgenommene Codiererdurchsatz alle Vorteile ausgleicht, die er auf lange Sicht bringen könnte.

Und da Sie unter Windows arbeiten, möchten Sie möglicherweise die \obigen Shell-Escapes entfernen, da ich dies in einer Unix-Box schreibe, in der der obige Befehl getestet wird.

Hinweise zur Auswirkung auf die Leistung bei Vorgaben und Überlegungen zur Interlaced-Codierung:

Um einen hohen Durchsatz und eine geringe Latenz zu erzielen, stellen Sie sicher, dass Sie eine llhpoder llhqmehrere Voreinstellungen verwenden. Dies ist am nützlichsten für Workloads wie Live-Streaming, bei denen eine umfassendere Kompatibilität mit einer größeren Anzahl von Geräten erwartet wird. Daher können leistungsbeeinträchtigende Funktionen wie B-Frames für einen guten Kompromiss zwischen höheren Bitraten in ganz weggelassen werden Nutzung und Durchsatz. Höhere Voreinstellungen (wie z. B. die Standardeinstellung medium) führen zu schnell sinkenden Renditen bei der Qualitätsausgabe und gleichzeitig zu erheblichen Verlangsamungen des Encoder-Durchsatzes. Der Qualitätsunterschied zwischen llhpund llhqgemessen durch Netflix's VMAF ist praktisch vernachlässigbar, aber die Leistungssteigerung des Encoders (über ~ 30% auf meinem Prüfstand) mit dem ersteren ist definitiv spürbar.

Für die llhpund llhqVoreinstellungen sowie andere Voreinstellungen in Gebrauch ist , können Sie auch die Ratensteuerungsmethoden in-built außer Kraft setzen , indem sie die Weitergabe -rc:vArgumente wie durch die Encoder - Optionen ausgesetzt. Beispielsweise können Sie bei einer Codierung mit konstanter Bitrate angeben -rc:v cbr(was erheblich schneller ist als die cbr_ld_hqRatensteuerungsmethode und eine zusätzliche Steigerung des Durchsatzes um ~ 20% bewirkt). Beachten Sie, dass die ausgewählte Voreinstellung den größten Einfluss auf den Durchsatz hat , gefolgt von den voreingestellten Optionen (wie der verwendeten Ratensteuerungsmethode), die Sie bei Bedarf optional überschreiben können.

Berücksichtigen Sie Ihren Codierungsworkflow und passen Sie ihn nach Bedarf an. Ihr Kilometerstand hängt definitiv von Ihrem Quellinhalt, den verwendeten Filterketten, bestimmten pltform-Konfigurationsvariablen (wie z. B. Ihrer GPU- und Treiberversion) usw. ab.

Beachten Sie im selben Atemzug, dass NVIDIA die Interlaced-Codierung auf Turing über alle Ebenen hinweg explizit deaktiviert hat , selbst in der 1660Ti-Zeile, in der der ältere Volta NVENC-Codierer verwendet wird. Wenn Sie Unterstützung für Interlaced-Codierung benötigen, wechseln Sie stattdessen zu Pascal oder älteren SKUs.

林正浩
quelle
1
Epos! Vielen Dank, nachdem Sie so lange mit der Hardware-Codierung gearbeitet haben, würden Sie diese über die CPU-Codierung hinaus empfehlen, oder sind die Nachteile von Qualität / Dateigröße immer noch so groß? Ich meine, es gibt viele Verbesserungen, die in NVENC gemacht wurden und NVENC HQ sollte die gleiche Qualität im Vergleich zu Standard x264 sein
Dr. Snail
@ Dr.Snail Ich empfehle, zuerst die Anforderungen Ihres Workflows zu beurteilen und alle Faktoren zu berücksichtigen, bevor Sie zu einer hardwarebasierten Codierungslösung wechseln. Zum einen erzielt NVENC wie andere SIP-basierte Codierungslösungen immer eine drastisch schnellere Leistung bei höherer Energieeffizienz im Vergleich zu einer softwarebasierten Implementierung, alle anderen Faktoren bleiben konstant. Wenden Sie zu diesem Zweck eine Geschwindigkeit an, um den erwarteten Kompromiss zwischen Qualität und Leistung zu erzielen, und belasten Sie dann nicht unterstützte Funktionen. Bei NVENC können wir beispielsweise keine HDR-Informationen direkt einfügen und müssen dafür ein externes Tool verwenden.
20.
Sie entscheiden sich, scale_npp=w=1920:h=1080weil Filter eine Sache sind, die am meisten von der GPU profitiert, oder? Eine andere Sache, die Begrenzung der Bitrate durch -b:v 1000k -minrate 500k -maxrate 3000kscheint die Ausgabegröße vorhersehbarer zu machen
Dr. Snail
Ja, bei Dr.Snail. Vorhersehbare Dateigrößen haben Priorität.
25.
3

Ich habe die Erfahrung gemacht, dass Sie bei der Verwendung von nvenc angeben müssen, welche Bitrate Sie verwenden möchten - standardmäßig VBR, was in Ordnung ist, aber kein Optimierungsaufwand gleicht die Tatsache aus, dass Sie immer eine durchschnittliche Bitrate von 2 Millionen erhalten möchten, egal welche auflösungsdatei fütterst du dabei? Es scheint ein Fehler im Encoder zu sein. In jeder anderen Hinsicht ist die Leistung vorhersehbar, es wird jedoch (zum Beispiel) -b:v 4Meine 720p-Datei oder -b:v 8M1080p benötigt. Sie könnten diese wahrscheinlich auch ein wenig absenken, wenn Sie möchten.

Serilain
quelle
1

Libvorbis für Audio scheint langsam. Mit ac3 sollten Sie die Geschwindigkeit um mehr als 15% steigern.

Davon abgesehen stimmt etwas nicht mit Ihrem Grafiktreiber oder Sie verwenden eine alte Kopie von ffmpeg. q Ich habe Ihren Clip nicht, aber ich habe eine SD-TS-Datei von meinem PVR abgerufen und Ihre Einstellungen verwendet.

Ich habe 700fps (Deine Einstellungen) auf einer GTX750 (nicht TI) (die billigere)

Ich habe 925fps (Deine Einstellungen mit ac3 Audio)

Die andere Empfehlung, die ich aussprechen kann, ist:

Ändern Sie Ihr qmax auf ca. 23.

Don Giovanni
quelle
Ich habe dies mit einer alten GTX 760 getestet, die ich mit 400 FPS mit diesem Befehl gefunden habe. Fügen ffmpeg40\bin\ffmpeg -hwaccel cuvid -c:v mpeg2_cuvid -i "E:\input.ts" -c:v h264_nvenc "E:\output.mp4"Sie bitte Ihren Code mit dem AC3 hinzu. I.stack.imgur.com/CNaWM.png
Dr. Snail
Dies sollte in Ihrer Befehlszeile funktionieren. Fügen Sie es neben Ihrem -c hinzu: v h264_nvenc -c: a ac3 Sie sollten auch in der Lage sein, 2 Sitzungen zu pushen. Öffnen Sie eine zweite Befehlszeile und kodieren Sie gleichzeitig eine andere .ts-Datei. Wenn Sie möchten, würde ich gerne eine Ihrer .ts-Dateien testen, um festzustellen, ob noch etwas getan werden kann, um Ihre Geschwindigkeit und Qualität
Don Giovanni