Filme mit Nvidia GTX 1060 transcodieren - HEVC

Sound, Digitalkameras, TV+Video und Spiele.
Antworten
willy4711

Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von willy4711 » 28.07.2019 12:23:25

Angeregt durch diesen Thread hab ich mich mal als absoluter DAU
dran gemacht, einen Film via Terminal zu bearbeiten.
Hab so was noch nie gemacht. Mein Filmbearbeitung beschränkte sich bisher darauf,mit Debian winff
ab und zu mal einen Film für das Handy aufzubereiten.

Leider konnte ich diese Tools nicht dazu bewegen meine Graka als Hardware zu benutzen.

Also habe ich gegoogelt und bin aus diese Seite gestoßen:
https://developer.nvidia.com/ffmpeg

Hab dann probiert und probiert und nach diversen Syntax - Meckereien folgenden Bandwurm erschaffen, der Beindruckendes leistet: :D

Code: Alles auswählen

$ ffmpeg -hwaccel cuvid -c:v h264_cuvid -i /media/HD753LJ/Import/Filme/Sully/Sully.mkv -vcodec hevc_nvenc -preset slow -cq 10 -g 150 Sully.mp4 
Bei "schlafender" CPU (10%) steht dann als Schlusszeile:

Code: Alles auswählen

frame=137883 fps=164 q=14.0 Lsize= 1662363kB time=01:35:50.82 bitrate=2368.0kbits/s dup=5 drop=0 speed=6.85x 
aus 8 GB sind eins-zwei-drei-fix (14 Minuten) 1,7 GB geworden :THX: :mrgreen: Terminal- Ausgabe:NoPaste-Eintrag40803

Ursprung (gekürzt):

Code: Alles auswählen

Complete name                            : /media/HD753LJ/Import/Filme/Sully/Sully.mkv
Format                                   : Matroska
Format version                           : Version 4
File size                                : 7.65 GiB
Duration                                 : 1 h 35 min
Overall bit rate                         : 11.4 Mb/s
Encoded date                             : UTC 2017-02-27 19:16:12
Writing application                      : mkvmerge v8.3.0 ('Over the Horizon') 64bit
Writing library                          : libebml v1.3.1 + libmatroska v1.4.2

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L4.1
Format settings                          : CABAC / 5 Ref Frames
Format settings, CABAC                   : Yes
Format settings, ReFrames                : 5 frames
Codec ID                                 : V_MPEG4/ISO/AVC
Duration                                 : 1 h 35 min
Bit rate                                 : 10.2 Mb/s
Width                                    : 1 920 pixels
Height                                   : 808 pixels
Display aspect ratio                     : 2.40:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.273
Stream size                              : 6.79 GiB (89%)
Writing library                          : x264 core 148 r2762 90a61ec
Beeindruckendes Ergebnis Ich sehe keine Qualitätsunterschiede :

Code: Alles auswählen

General
Complete name                            : /home/willy/Sully.mp4
Format                                   : MPEG-4
Format profile                           : Base Media
Codec ID                                 : isom (isom/iso2/mp41)
File size                                : 1.59 GiB
Duration                                 : 1 h 35 min
Overall bit rate                         : 2 368 kb/s
Writing application                      : Lavf58.20.100

Video
ID                                       : 1
Format                                   : HEVC
Format/Info                              : High Efficiency Video Coding
Format profile                           : Main@L4@Main
Codec ID                                 : hev1
Codec ID/Info                            : High Efficiency Video Coding
Duration                                 : 1 h 35 min
Bit rate                                 : 1 970 kb/s
Width                                    : 1 920 pixels
Height                                   : 808 pixels
Display aspect ratio                     : 2.40:1
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.053
Stream size                              : 1.32 GiB (83%)
Language                                 : English
Menus                                    : 3
Codec configuration box                  : hvcC

Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low
Jetzt Meine Fragen:

Befehlszeile Teil 1

Code: Alles auswählen

 ffmpeg -hwaccel cuvid -c:v h264_cuvid -i 
Aus dem Manual:
-hwaccels
List all hardware acceleration methods supported in this build of ffmpeg.
da kommt dann raus:

Code: Alles auswählen

 ffmpeg  -hwaccels
ffmpeg version 4.1.4 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 8 (Debian 8.3.0-19)
[.......]
Hardware acceleration methods:
vdpau
cuda
vaapi
qsv
opencl
qsv
cuvid

ffmpeg soll also mit der "Methode cuvid" die Graka benutzen, um den Film zu decodieren.

-c:v h264_cuvid ------> was bedeutet diese "-c:v" ?

Könnte ich da auch irgend was anderes benutzen?
ich hatte z. B. ewig rumprobiert, um HVEC über die Graka zu dekodieren und habe mir dann ein mpv- Profil mit folgendem Inhalt angelegt:

Code: Alles auswählen

[HEVC]       #Einzige Möglichkeit HEVC über GTX 1060 3GB wiederzugeben
--hwdec=cuda              #decodierung mit cuda
# Wiedergabe Fenster an Bildschirm anpassen":
autofit-larger=80%x80%
--keep-open=yes
Gibt es da Qualitätsunterschiede beim decodieren?
Warum wird da cuda erwähnt wenn es doch cuvid sein sollte?
Lasse ich das weg, kommt folgende Fehlermeldung und die Last geht auf die CPU.

Code: Alles auswählen

Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> hevc (hevc_nvenc))
  Stream #0:1 -> #0:1 (ac3 (native) -> aac (native))
Press [q] to stop, [?] for help
[aac @ 0x55d2a738c180] Using a PCE to encode channel layout "5.1(side)"
[h264 @ 0x55d2a73aaf80] Error creating a NVDEC decoder: 1
[h264 @ 0x55d2a73aaf80] Failed setup for format cuda: hwaccel initialisation returned error.
Hinterer Teil der Befehlszeile:

Code: Alles auswählen

-vcodec hevc_nvenc -preset slow -cq 10 -g 150
ffmpeg soll also den Codec hevc_nvenc benutzen, der hier ausgegeben ist:

Code: Alles auswählen

ffmpeg -codecs |grep hevc
Codecs:
 D..... = Decoding supported
 .E.... = Encoding supported
 ..V... = Video codec
 ..A... = Audio codec
 ..S... = Subtitle codec
 ...I.. = Intra frame-only codec
 ....L. = Lossy compression
 .....S = Lossless compression
 -------

[..............]
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) 
 (decoders: hevc hevc_qsv hevc_v4l2m2m hevc_cuvid )
 (encoders: libx265 nvenc_hevc hevc_nvenc hevc_qsv hevc_v4l2m2m hevc_vaapi libkvazaar )
nvenc war bei mir nicht zu finden. Aber Synaptic verriet mir das passende Paket: Debianlibnvidia-encode1 :mrgreen:

Warum gerade hevc_nvenc und nicht libx265 oder irgend etwas anderes ? gibt es da Unterschiede ???

Über den Rest dieser Zeile

Code: Alles auswählen

preset slow -cq 10 -g 150
Kann ich nur ehrfürchtig staunen, da ich im Manual nichts passendes finde, und auch den Kontext (Audio / Video oder was ??) nicht weiß .

Ich wäre euch sehr dankbar, wenn ihr wenigstens etwas Licht in das Dunkel bringen würdet.
Vor allem diese kryptografischen Buchstabenfolgen zu erklären, wäre toll.
Da würde ich wenigstens halbwegs verstehen, was ich da so gemacht habe.

Danke im voraus :hail:
Zuletzt geändert von willy4711 am 28.07.2019 15:56:31, insgesamt 1-mal geändert.

MaGe
Beiträge: 1717
Registriert: 01.06.2014 17:12:16

Re: Filme mit Nvidia GTX 1060 transcodieren

Beitrag von MaGe » 28.07.2019 13:55:41

@ willy4711
Über den Rest dieser Zeile

ffmpeg -h encoder=hevc_nvenc

gpu nvidia benutze ich nur noch.


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Heliosstyx

Re: Filme mit Nvidia GTX 1060 transcodieren

Beitrag von Heliosstyx » 28.07.2019 14:15:50

Du solltest via vdpauinfo und vainfo prüfen welche Decoder/Encoder Du installiert hast und welche von Deiner Grafikkarte unterstützt werden. Siehst Du auch in nvidia-settings. Zu dem Thema gibt es auch gute Erklärungen im Debian-Wiki. Hast Du das erledigt, kannst Du noch erkunden, welche kostenlosen Tools und Encoder/Decoder Dir zur Verfügung stehen, die Leistungsfähigsten kosten noch immer Geld, da führt kein Weg herum. Nichts zahlen, heißt meistens mehr Zeit aufwenden. Die professionelle Videobearbeitung kostet immer noch eine Menge Geld und es bedarf spezieller Ausrüstung.

MaGe
Beiträge: 1717
Registriert: 01.06.2014 17:12:16

Re: Filme mit Nvidia GTX 1060 transcodieren

Beitrag von MaGe » 28.07.2019 14:42:00

@: Heliosstyx
[...] prüfen welche Decoder/Encoder Du installiert hast [...]

ffmpeg -encoders 2>/dev/null | grep -i nvidia
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_hevc NVIDIA NVENC hevc encoder (codec hevc)
V..... hevc_nvenc NVIDIA NVENC hevc encoder (codec hevc)

ffmpeg -decoders 2>/dev/null | grep -i nvidia
V..... h264_cuvid Nvidia CUVID H264 decoder (codec h264)
V..... hevc_cuvid Nvidia CUVID HEVC decoder (codec hevc)
V..... mjpeg_cuvid Nvidia CUVID MJPEG decoder (codec mjpeg)
V..... mpeg1_cuvid Nvidia CUVID MPEG1VIDEO decoder (codec mpeg1video)
V..... mpeg2_cuvid Nvidia CUVID MPEG2VIDEO decoder (codec mpeg2video)
V..... mpeg4_cuvid Nvidia CUVID MPEG4 decoder (codec mpeg4)
V..... vc1_cuvid Nvidia CUVID VC1 decoder (codec vc1)
V..... vp8_cuvid Nvidia CUVID VP8 decoder (codec vp8)
V..... vp9_cuvid Nvidia CUVID VP9 decoder (codec vp9)


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

willy4711

Re: Filme mit Nvidia GTX 1060 transcodieren

Beitrag von willy4711 » 28.07.2019 14:57:21

@ MaGe
Danke für den Tipp, hat das Ganze nochmal beschleunigt und vereinfacht
Alte Befehlszeile:

Code: Alles auswählen

 ffmpeg -hwaccel cuvid -c:v h264_cuvid -i /media/HD753LJ/Import/Filme/Sully/Sully.mkv -vcodec hevc_nvenc -preset slow -cq 10 -g 150 Sully.mp4 
Die alte Ausgabe war ja (letzte Zeile)

Code: Alles auswählen

frame=137883 fps=164 q=14.0 Lsize= 1662363kB time=01:35:50.82 bitrate=2368.0kbits/s dup=5 drop=0 speed=6.85x 
jetzt hab ich die Befehlszeile:

Code: Alles auswählen

ffmpeg -hwaccel cuvid -c:v h264_cuvid -i /media/HD753LJ/Import/Filme/Sully/Sully.mkv -vcodec hevc_nvenc Sully_neu.mp4 
mit (jetzt) letzten Zeilen:

Code: Alles auswählen

frame=137883 fps=231 q=15.0 Lsize= 1661833kB time=01:35:50.82 bitrate=2367.3kbits/s dup=5 drop=0 speed=9.64x    
video:1382355kB audio:276660kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.169900%
[aac @ 0x555de3919f80] Qavg: 348.367
Das lässt mich vermuten, dass das Fehlen des "Buchstaben und Zahlen Arrangements"

vcodec hevc_nvenc -preset slow -cq 10 -g 150

wohl bewirkt, dass ffmpeg bestimmte Sachen (Untertitel / Audio) nicht befohlen bekommt, sondern sich selbst raus sucht,
um es dann stolz anschließend zu präsentieren :roll:

Heliosstyx hat geschrieben: ↑ zum Beitrag ↑
28.07.2019 14:15:50
Du solltest via vdpauinfo und vainfo prüfen welche Decoder/Encoder Du installiert hast und welche von Deiner Grafikkarte unterstützt werden. Siehst Du auch in nvidia-settings
Das weiß ich schon. Hilft mir beim Ansprechen der Graka bloß kein bisschen weiter, es sei denn ich nehme die Ausgabe von ffmpeg (Siehe oben)

Code: Alles auswählen

 ffmpeg -codecs |grep hevc
Codecs:
 [..............]
 DEV.L. hevc                 H.265 / HEVC (High Efficiency Video Coding) 
 (decoders: hevc hevc_qsv hevc_v4l2m2m hevc_cuvid )
 (encoders: libx265 nvenc_hevc hevc_nvenc hevc_qsv hevc_v4l2m2m hevc_vaapi libkvazaar )
Heliosstyx hat geschrieben: ↑ zum Beitrag ↑
28.07.2019 14:15:50
Die professionelle Videobearbeitung kostet immer noch eine Menge Geld und es bedarf spezieller Ausrüstung.
Und ich möchte gar keine Videobearbeitung machen.
Nur aus Spaß die Filme etwas "schrumpfen", ohne großen Qualitätsverlust und qualmende CPU.
Und wenn ich mal die passende Befehlszeile für ffmpeg habe und das auch so halbwegs verstanden habe, reicht mir das.

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren

Beitrag von guennid » 28.07.2019 15:44:51

willy4711 hat geschrieben:Und ich möchte [...] nur aus Spaß die Filme etwas "schrumpfen", ohne großen Qualitätsverlust und qualmende CPU.
Dann versteh' ich ehrlich gesagt, den großen Bohai nicht, den du da veranstaltest. ein ffmpeg mitgegebenes -b:v 2500k etwa, oder alternativ ein wenig Rumgespiele mit -crf sollte doch reichen. Oder geht's vordringlich um die Schonung bestimmter Hardwarekomponenten (CPU)? Das hat mich nie gekümmert und die Temperaturen hab' ich immer im Blick.

Wie kriegt man 11.4 Mb/s in ein MKV? Das entspricht so ungefähr dem, was VDR hier ungefiltert in ein DVB-TS packt. Jenseits von 3000kb/s sieht kein Mensch mehr Qualitätsunterschiede, habe ich mal gelesen.

Grüße, Günther.

willy4711

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von willy4711 » 28.07.2019 16:17:32

@ guennid
Hab mal den Titel um HEVC erweitert. Darum geht es mir nämlich.
Und es geht mir auch um die Kompressionsrate, die halt nur mit H265 Codecs zu erreichen ist.
7,8 GB ---> 1,7 GB bei gleichbleibender Quali.
guennid hat geschrieben: ↑ zum Beitrag ↑
28.07.2019 15:44:51
Wie kriegt man 11.4 Mb/s in ein MKV? Das entspricht so ungefähr dem, was VDR hier ungefiltert in ein DVB-TS packt. Jenseits von 3000kb/s sieht kein Mensch mehr Qualitätsunterschiede, habe ich mal gelesen.
Steht doch da:

Code: Alles auswählen

Writing application                      : mkvmerge v8.3.0 ('Over the Horizon') 64bit
Writing library                          : libebml v1.3.1 + libmatroska v1.4.2
Ist ja auch DVD - Datei Grösse
Aber ich würde die Bitrate und Quali gerne erhalten und die Datei schrumpfen.
Und da ich eine relativ gute Graka habe, will ich sie auch nutzen.
Ist doch nicht so schlimm :wink:
guennid hat geschrieben: ↑ zum Beitrag ↑
28.07.2019 15:44:51
Dann versteh' ich ehrlich gesagt, den großen Bohai nicht, den du da veranstaltest. ein ffmpeg mitgegebenes -b:v 2500k etwa, oder alternativ ein wenig Rumgespiele mit -crf sollte doch reichen.
willy4711 hat geschrieben: ↑ zum Beitrag ↑
28.07.2019 12:23:25
Angeregt durch diesen Thread hab ich mich mal als absoluter DAU
dran gemacht, einen Film via Terminal zu bearbeiten.
Man verzeihe mir, aber Filme haben mich noch nie sonderlich interessiert. Mein Hobby ist Musik.
Aber da dieses scheiß Debian :facepalm: einfach funktioniert, und es kaum was zu schrauben gibt, will ich halt mal ein neues Feld beackern,
und vor allen verstehen, was ich da tue.
Da du es ja so schön erwähnst: Was bedeutet denn -b:v bzw. -c:v hatte ich ja schon gefragt :wink:

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von guennid » 28.07.2019 16:21:07

-b:v = bitrate:video
-c:v keine Ahnung. Wenn ich die Videospur umcodieren will, verwende ich -vcodec h264 (z.B.)

willy4711

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von willy4711 » 28.07.2019 16:26:45

guennid hat geschrieben: ↑ zum Beitrag ↑
28.07.2019 16:21:07
-b:v = bitrate:video :hail: :hail:

Nun noch -c:v :mrgreen:

Die Abkürzungen findet man nämlich nicht im Manual, und man steht dann einfach doof da


Hast ja nachgelegt :wink:

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von guennid » 28.07.2019 16:57:44

Hier mal das, was ich so im Allgemeinen maximal verwende (TV-Mitschnitte)

Code: Alles auswählen

ffmpeg -i /media/filme/originale/00001.ts -map 0:0 -map 0:1 -map 0:2 -map 0:6 -ss 00:8:19 -to 02:15:48  -vcodec h264 -crf 20 -acodec aac -b:a 192k -scodec dvdsub /opt/forum/filme/ausgabe.mkv
Soll ich die Optionen einzeln erklären oder kommst du so damit klar?

MaGe
Beiträge: 1717
Registriert: 01.06.2014 17:12:16

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von MaGe » 28.07.2019 17:34:06

guennid hat geschrieben:
Soll ich die Optionen einzeln erklären oder kommst du so damit klar?
Alt

Code: Alles auswählen

-vcodec
-acodec

Neu

Code: Alles auswählen

-c:v 
-c:a 

gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

willy4711

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von willy4711 » 28.07.2019 18:24:02

Aus dem Manual:
-vcodec codec (output)
Set the video codec. This is an alias for "-codec:v".
sucht man aber nach c:v findet man nichts. :twisted:
Das muss man dann halt wissen
oder irgendwo abgeschrieben haben
oder in einen netten Forum erklärt bekommen

Bleibt noch der Rest :hail:
-cq 10 -g 150

MaGe
Beiträge: 1717
Registriert: 01.06.2014 17:12:16

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von MaGe » 28.07.2019 18:52:54

@: willy4711
sucht man aber nach c:v findet man nichts.

Zum Beispiel: NVDEC/CUVID

https://trac.ffmpeg.org/wiki/HWAccelIntro

und
man spart sich so eine menge an Eingaben.

( Video codec )
-vcodec
-codec:v
-c:v

( Audio codec )
-acodec
-codec:a
-c:a

( Subtitle codec )
-scodec
-codec:s
-c:s

ffmpeg -h encoder=h264_nvenc
ffmpeg -h encoder=hevc_nvenc

-cq <float> E..V........ Soll-Qualitätsstufe (0 bis 51, 0 bedeutet automatisch) für den Modus konstante Qualität in der VBR-Ratenregelung (von 0 bis 51) einstellen (Standard 0).

-g 150 ? manche einstellungen gib es bei GPU nicht


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

Benutzeravatar
detix
Beiträge: 1705
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von detix » 28.07.2019 19:00:47

guennid hat geschrieben:

Code: Alles auswählen

ffmpeg -i /media/filme/originale/00001.ts -map 0:0 -map 0:1 -map 0:2 -map 0:6 -ss 00:8:19 -to 02:15:48  -vcodec h264 -crf 20 -acodec aac -b:a 192k -scodec dvdsub /opt/forum/filme/ausgabe.mkv
Nur mal kurz nachgefragt: -crf vs -b:v
Bei meinen ffmpeg Versuchen musste ich leider festgestellen, das -crf das Video nur um eine gewisse Bitrate reduziert, während -b:v auf die vorgegebene Bitrate reduziert was ich auch favorisiere, da man so kleinere Filmschnipsel einfach und schnell ohne anschließende Neukodierung per „ffmpeg...concat...copy” zusammenfügen kann.
Ist das richtig?
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

MaGe
Beiträge: 1717
Registriert: 01.06.2014 17:12:16

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von MaGe » 28.07.2019 19:26:08

@:detix
das -crf das Video nur um eine gewisse Bitrate reduziert

spiele mal mit den einstellungen -crf 20, 23, 26, 29 u.s.w

@:detix
während -b:v auf die vorgegebene Bitrate reduziert was ich auch favorisiere,

ich auch :THX:


gruss MaGe
Wir müssen uns vor der Klimaerwärmung nicht fürchten.
Uns rottet die soziale Kälte viel früher aus.

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von guennid » 28.07.2019 19:28:36

detix hat geschrieben:Bei meinen ffmpeg Versuchen musste ich leider festgestellen, das -crf das Video nur um eine gewisse Bitrate reduziert
Kann ich so nicht nachvollziehen. Du musst dem -crf natürlich einen Zahlenwert mitgeben, z.B. -crf 20. Höhere Zahlenwerte bewirken weniger Qualität/niedrigere Bitrate. Bei meinen Versuchen bin ich nie über -crf 23 hinausgekommen, um im Endergebnis eine niedrigere durchschnittliche Gesamtbitrate als < 3000kb/s zu erhalten. Davon abesehen habe ich keine Vergleichswerte dazu, ob sich der crf-Aufwand gegenüber der Einstellung einer konstanten Bitrate von z.B -b:v 2500k überhaupt lohnt.

edit: „kleinere“ Filmschnipsel habe ich nicht, sondern in der Regel Material von 60 min+ Und nach meiner Erfahrung muss man ffmpeg mit einem crf-Wert mind. 10 min laufen lassen, um einigermaßen verlässlich die resultierende Durchschnittsbitrate einschätzen zu können.

Benutzeravatar
detix
Beiträge: 1705
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von detix » 03.08.2019 13:58:42

guennid hat geschrieben:Kann ich so nicht nachvollziehen...
Oh doch, das ist nachvollziehbar und lohnt sich mMn auch, und genau das meinte ich ja mit meiner Nachfrage:
-crf reduziert das original Video relativ um einen Wert, hier macht nur Versuch klug, während -b:v das Video absolut auf die vorgegebene Bitrate reduziert ‒ wünschenswert!
Hier zB: -b:v 800k reicht völlig aus, man muss nicht jedes originale Pixel sehen...
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von guennid » 04.08.2019 17:25:33

datix hat geschrieben:-crf [...], hier macht nur Versuch klug
Nichts anderes schrieb ich.
Konstante Qualität ist das Gegenstück zur konstanten Dateigröße des 2-Pass-Verfahrens. Heute ist es das Standardverfahren. Wir definieren vor dem Encoding ein Qualitätsniveau, das vom Encoder eingehalten wird, ohne auf die Größe zu achten. Deswegen wissen wir vorher nicht, wie groß der Film werden wird. (2) Mit Qualität ist hier die visuelle Qualität gemeint, die wir beim Anschauen wahrnehmen. Für den Encoder heißt das, dass er je nach Eigenschaften der Szene unterschiedlich stark komprimieren darf.
(1)
Für Entscheidend halte ich den letzten Satz. Ich interpretiere den so, dass bei Verwendung von crf im Resultat eine bessere Qualität erreicht wird, als im gleich großen (resultierenden) Video bei Kodierung mit konstanter Bitrate. Oder so 'rum ausgedrückt: Wenn von einem Quellvideo zwei gleich große Zielvideos erzeugt werden, ist das Zielvideo, das mit crf erzeugt wurde, qualitativ besser als das mit konstanter Bitrate erzeugte. Meine Interpretation. Ob die stimmt, und ob sich das lohnt, das menschliche Auge den Unterschied auch sehen kann, ist eine andere Frage, aber das sagte ich ja schon. Im Übrigen bin ich in meinem laienhaften Verständnis durchaus skeptisch, ob sich das lohnt (in der Regel spiele ich zeitaufwendig 'rum mit crf zwischen 18 und 24, siehe oben). Glaube aber einstweilen nicht, dass ich mit crf schlechtere Videos erzeuge, als wenn ich sie mit konstanter Bitrate erzeugte.

(1) https://encodingwissen.de/codecs/encodingmethoden/

(2) es sei denn, wir probieren was (guennid)

siehe auch den entsprechenden Abschnitt in:

https://encodingwissen.de/codecs/x264/technik/

wanne
Moderator
Beiträge: 7463
Registriert: 24.05.2010 12:39:42

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von wanne » 05.08.2019 23:12:13

detix hat geschrieben: ↑ zum Beitrag ↑
03.08.2019 13:58:42
-crf reduziert das original Video relativ um einen Wert, hier macht nur Versuch klug, während -b:v das Video absolut auf die vorgegebene Bitrate reduziert ‒ wünschenswert!
Bullschit!
-crf (oder -q oder CQP oder -cq ) setzt auf eine bestimmte Qualität. Wünschenswert.
CBR setzt dir deine Dateigröße pro Sekunde auf einen bestimmten Wert.
=> Action- oder komplexe Szenen bekommen schlechte Qualität, weil sie sich bei gleicher Qualität deutlich schlechter komprimieren lassen würden und Standbilder werden mit Nullen zu gleicher Größe aufgepumpt. Sinn dahinter sind primitive Hardwaredcoder und Funksysteme, die immer die gleiche Anzahl an Bits lesen/übertragen.
Auch DVDs oder Bluerays nutzen das, damit sich die Scheibe immer mit der gleichen Geschwindigkeit drehen kann.
Für moderne Hardware absolut unerwünscht. Da hat man Buffer und arbeitet mit VBR.
-v:b oder VBR machen eine Mischung aus beiden Varianten. Actionszenen brauchen etwas mehr speicher die nachfolgenden Szenen werden dann in der Qualität etwas heruntergesetzt, damit man im Schnitt auf wenige Sekunden wieder auf die passende Bitrate kommt. Gedacht für Streaming, wo man ein paar Sekunden puffer hat aber ansonsten an begrenzter Bandbreite hängt. Die Action-Scene braucht den Buffer auf und in den nachfolgenden kann der sich dann wieder füllen.
Sonst absolut nicht gewünscht.
Wozu VBR oft "missbraucht" wird, ist Dateien mit einer bestimmten Größe zu erstellen (z.B. damit sie exakt auf eine DVD/CD... passen.) Das funktioniert zwar hat aber eben den Nachteil, dass man an bestimmten stellen (Üblicherweise nach Schnitten und Action-Szenen) schlechte Qualität hat. Deutlich sinnvoller sind da two-Pass-Verfahren, die zuerst mit VBR encodieren und dann ein CRF-Verfahren mit durschnittlichem RF der VBR nutzt. Dann hat man die gleiche Größe aber konstant gute Qualität. Braucht dann aber zwei encodierungen.
Zum Rechenzeit-Sparen ist VBR also noch die bevorzugte Variante.

Zusammengefasst: Um einfach möglichst kleine Dateien bei guter Qualität zu erzeugen ist der von willy4711 benutzte -cq parameter der deutlich vorteilhaftere im Vergleich zu -b:v, da er in Actionreichen-Teilen bessere Qualität und in "langweiligeren" Teilen kleinere Dateien liefert als ein vergleichbarer -b:v.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
king-crash
Beiträge: 722
Registriert: 08.08.2006 12:07:56
Lizenz eigener Beiträge: MIT Lizenz

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von king-crash » 06.08.2019 09:53:50

Könnten wir da nicht einen Wiki Artikel daraus machen?

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von Lord_Carlos » 06.08.2019 14:28:43

king-crash hat geschrieben: ↑ zum Beitrag ↑
06.08.2019 09:53:50
Könnten wir da nicht einen Wiki Artikel daraus machen?
Steht schon alles im ffmpeg wiki, und das seit Jahren. Wird hier auch immer wieder erklaert :) Und dann kommt immer wieder jemande der constant quality / CRF / CQP nicht ganz versteht und richtig begeistert von VBR ist :)) Macht aber nichts.
Wenn ich mich recht erinnere habe ich bei der letzten Diskussion hier im Forum ein ffmpeg / xh264 dev gefragt, der auch meinte das VBR eher ein Nieschen anwendungsfall hat. Z.B. man muss etwas auf genau 700mb komprimieren.

__________
@ willy4711
Blicke gerade nicht ganz durch was hier schon beantwortet wurde und was nicht. Hast du noch Fragen?

-v:c h264 VS hevc_nvenc
Das erstere benutzt den CPU um die Datei ins h264 format "packen", und letzteres benutzt deine Nvidia GPU mit dem h265 (auch HVEC genannt) codec.
In deinem Fall, wo du einfach fix eine Datei auf das Handy haben willst, wuerde ich auch den GPU HVEC encoder empfehlen. Macht die Datei kleiner, Handy kann es abspielen und es ist sehr sehr schnell.
h264 oder h265 mit dem CPU geht auch, sieht bei gleicher groesse vielleicht auch besser aus, aber dauert schon laenger. Und ob man das es dann auf dem Handy sieht ist auch ne gute Frage. Einfach ein wenig testen.
Und ja, benutzte constant quality / CRF / CQP, nicht feste / average bitrate.

Preset gibt es auch noch. Da kann man slower, slow, medium, fast, faster very fast etc. einstellen. Das ist wie viel Zeit der encoder sich gibt. Ich meine wenn man zwei spruenge macht, also z.B von medium auf slower geht, dann verdoppelt sich die encoding Zeit. Zu mindestens auf dem CPU. Ob das auch eine grosse auswirkung bei GPU h265 hat weis ich leider nicht.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von guennid » 06.08.2019 14:36:35

Lord_Carlos hat geschrieben:Steht schon alles im ffmpeg wiki, und das seit Jahren.
Meinst du das:
https://trac.ffmpeg.org/?

Benutzeravatar
Lord_Carlos
Beiträge: 5578
Registriert: 30.04.2006 17:58:52
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Dänemark

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von Lord_Carlos » 06.08.2019 14:44:14

guennid hat geschrieben: ↑ zum Beitrag ↑
06.08.2019 14:36:35
Lord_Carlos hat geschrieben:Steht schon alles im ffmpeg wiki, und das seit Jahren.
Meinst du das:
https://trac.ffmpeg.org/?
Genau.
z.B. https://trac.ffmpeg.org/wiki/Encode/H.264
Da werden immer wiederkehrende Fragen beantwortetet. z.B. unterschied der presets und ob two pass besser ist als CRF (ist es nicht*)

Hier auch noch ein wenig zu GPU encoding mit Nvidia:
https://trac.ffmpeg.org/wiki/HWAccelIntro#NVENCNVDEC

*Mit wenigen Ausnahmen.

Code: Alles auswählen

╔═╗┬ ┬┌─┐┌┬┐┌─┐┌┬┐╔╦╗
╚═╗└┬┘└─┐ │ ├┤ │││ ║║
╚═╝ ┴ └─┘ ┴ └─┘┴ ┴═╩╝ rockt das Forum!

guennid

Re: Filme mit Nvidia GTX 1060 transcodieren - HEVC

Beitrag von guennid » 06.08.2019 14:47:58

Tolle Links für Leute, die sich mit einer recht komplexen Materie beschäftigen wollen, aber nicht allzuviel Englisch können.

on topic
Dem TE geht's womöglich um Musikvideos, da mögen die Beurteilungskriterien möglicherweise andere sein als bei „richtigen“ :wink: Videos.

Grüße, Günther

Antworten