Μαζική μετατροπή αρχείων βίντεο σε Η264/Η265 με επιτάχυνση GPU AMD/NVIDIA (windows)

nicksoti

AVClub Addicted Member
14 April 2013
1,911
Να γράψω τον τρόπο που εδώ και 1 χρόνο χρησιμοποιώ για μαζική μετατροπή αρχείων σε H264/H265 χρησιμοποιώντας ffmpeg μέσω της παραθυρικής εφαρμογής QWinFF.

  • Eγκαθιστούμε το QWinFF
  • Στον υποφάκελο /tools της εγκατάστασης αν θέλουμε αντικαθιστούμε τα αντίστοιχα αρχεία από την τελευταία έκδοση του ffmpeg.
  • Ανοίγουμε το QWinFF και κάνουμε drag n drop τα αρχεία που επιθυμούμε. Ανοίγει τα πάντα.
  • Στο παράθυρο που εμφανίχεται πατάμε next.
  • Επιλέγουμε output path. Εγώ συνήθως αφήνω την επιλογή της αυτόματης δημιουργίας υποφακέλου και την οργάνωση των αρχείων την κάνω μετά.
  • Στα output settings αφήνουμε το "convert to" σε mp4 και πατάμε edit στο preset
  • Στο tab Audio θέτουμε sample rate και bitrate. Μπορούμε να μην συμπληρώσουμε τίποτα, απλά ο ήχος θα είναι 44000HZ και 128kb/s. Συνήθως εγώ βάζω 48000 και 190kb/s για χρήση online.
  • Στο tab Video ΔΕΝ συμπληρώνουμε τίποτα πλην της ανάλυσης αν θέλουμε το τελικό αρχείο να γίνει downscale ή upscale. Oμοίως και στο ΤΙΜΕ, δεν θέλουμε προφανώς να κάνουμε εδώ cut ή να αλλάξουμε ταχύτητα.
  • Στο tab advanced επικολάμε τις παρακάτω εντολές:
  1. Για κάρτα γραφικών Nvidia (pascal): "-vcodec hevc_nvenc -pix_fmt yuv420p10 -preset hq -cbr 1 -vb 20000k"
  2. Για κάρτα γραφικών AMD (polaris): "-c:v hevc_amf -quality balanced -usage transcoding -b:v 20M -bufsize 16M -maxrate 25M"
  • Ok -> Next ->Start και αρχίζει η μετατροπή.
Μπορούμε να ανοίξουμε πολλαπλά πααράθυρα QwinFF και να κάνουμε πολλές μετατροπές ταυτόχρονα. Σε AMD κάρτες είναι αποδοτικότερο, διότι το κάθε encode engine είναι πιο αδύναμο αλλά έχει πολλά οπότε κερδίζουμε σε χρόνο. Και σε Nvidia όμως, 2 ταυτόχρονα είναι ταχύτερα ειδικά με ταχύτερη CPU και ανάλογα αν το decoding του πηγαίου αρχείου γίνεται μέσω GPU ή CPU, παραπάνω δεν επιτρέπουν οι drivers τουλάχιστο σε 1050Ti που είχα δοκιμάσει. Νομίζω ότι σε 1070/1080 μπορούμε να τρέξουμε και 3ο instance.

Tις εντολές που παρέθεσα τις έχω βρει στο διαδίκτυο και έχω αλλάξει 1-2 πραγματάκια με trial & error διότι δεν λειτουργούν όλες οι εντολές του ffmpeg με τον ίδιο ακριβώς τρόπο στο QwinFF, κάποια πράγματα εξάλλου όπως το path και ο ήχος τα επιλέγεις σε άλλα πεδία. Για παράδειγμα, θα παρατηρήσετε ότι στην Nvidia χρησιμοποιώ σταθερό bitrate (-cbr), στην AMD μεταβλητό. Δεν μπορούσα να τα κάνω να λειτουργήσουν αλλιώς μέσω Qwinff. Υποτίθεται ότι το CBR είναι λιγότερο αποδοτικό στο τελικό μέγεθος αλλά πιο συμβατό με players και Youtube/Vimeo, ωστόσο εγώ απτές διαφορές δεν έχω δει.

Ότι έχω σε bold στις 2 εντολές είναι παραμετροποιήσιμο από εμάς.
Συγκεκριμένα και απλοϊκά:

Για Nvidia:
"hevc
" = h265,
"h264" = h264,
"yuv420p10" = 10bit output
"yuv420" = 8bit output
"preset hq" = high quality
"preset hp" = high performance
"20000Κ" = bitrate, (από δοκιμές μου σε 1080p high quality από πηγή prores 422 από 7500Κ τιμή και άνω δύσκολα καταλαβαίνεις διαφορά, πρέπει να πλησιάσω την 32άρα στο μισό μέτρο για να δω λιγότερη λεπτομέρεια στις υφές. Ας πούμε με 10000Κ είμαστε οκ. Αναφέρομαι σε σκηνές με λίγη κίνηση. Σε σκηνές δράσης δεν το έχω δοκιμάσει αλλά καλό είναι να ανεβάζουμε bitrate.

Για AMD:
"hevc" = h265,
"h264" = h264,
"quality balanced" = μέση ποιότητα και ταχύτητα
"quality quality" = ποιότητα σε βάρος ταχύτητας
"20M' = το μέσο bitrate (από δοκιμές που έχω κάνει, από ότι γράφω παραπάνω για Nvidia προσθέστε λίγο παραπάνω)
"25Μ" = το μέγιστο bitrate που θα επιτραπεί στον codec σε δύσκολες σκληνές (πχ γρήγορη κίνηση ή πλάνο με μεγάλη λεπτομέρεια). Καλό είναι αυτό να το θέτουμε κάτω του 1.5Χ του μέσου.

Nα τονίσω εδώ ότι με AMD κάρτα ΔΕΝ μπορούμε να κάνουμε encoding σε 10bit, μόνο decoding.

Όποιος έχει περισσότερες γνώσεις σε εντολές ffmpeg μπορεί να πειραματιστεί με το QwinFF και να γράψει τα αποτελέσματά του εδώ. Eιδικά για κάρτες AMD δεν έχω βρει άλλη εφαρμογή που να επιτρέπει batch transcoding μέσω GPU. Για Nvidia υπάρχουν αλλά συνήθως είναι επι πληρωμή.
 
Last edited:

nicksoti

AVClub Addicted Member
14 April 2013
1,911
Eννοείς μέσω X264 και cpu; Nαι σαφώς, ειδικά με Nvidia. Mε Radeon θες πάνω από 2 instances ταυτόχρονα για να πάρεις αντίστοιχες ταχύτητες fps συνολικά, και αν τις πάρεις.
Τώρα με κανα R7 2700, i7 8ΧΧΧ και veryfast δεν ξέρω να σου πω.
Παίζει ρόλο και το format του αρχικού αρχείου, πως γίνεται το decoding. Ακόμα και σε AVC από διαφορετικές κάμερες μπορεί να δεις μεγάλη διαφορά. Δεν το έχω ψάξει μέσω εντολών το decoding. Απλά τα βάζω να "γίνονται" όταν σεφάρω ή φεύγω από το PC.

Η μέθοδος αφορά κυρίως κατόχους AMD cpu, και ακόμα περισσότερο με Radeon κάρτα για την οποία υπάρχει και το A'S video converter αλλά είναι τραγικά... beta. Σε intel με quicksync δεν έχω δοκιμάσει.
 

evanfotis

Moderator
Staff member
26 March 2008
5,599
Eννοείται οτιδήποτε GPU accelerated εχει διαφορά απο σκέτο CPU rendering...
Σαν ποιότητα αρχείου βλέπεις διαφορές με τις κλασσικές μεθόδους; εχεις τεστάρει ίδια αρχειά να δείς;
 

nicksoti

AVClub Addicted Member
14 April 2013
1,911
Η265 με CPU δεν έχω κάνει render, δεν έχω τόσο δυνατή cpu. Σε σύγκριση με H264 το H265 έστω μέσω gpu έχει πολύ μεγάλη διαφορά σε χαμηλά bitrates. Αυτό χρησιμοποιώ κυρίως, για backup των αρχικών λήψεων σε blueray.

Σε H264 έχει να κάνει με τον encoder. Πχ ο AVC encoder του Vegas είναι μετριότατος. Εκείνος του Resolve ακόμα χειρότερος, θες αρκετό bitrate να ισοφαρίσεις. Αυτοί δεν νομίζω να υπερέχουν του GPU encoding. Της mainconcept και ο X264 μάλλον είναι καλύτεροι απο gpu, αλλά ειδικά η Nvidia την έχει ψαλιδίσει την διαφορά.

Δεν κάθομαι να το αναλύω πολύ, όταν με ενδιαφέρει η ποιότητα βάζω λίγο bitrate παραπάνω να είμαι safe.

Υ.Γ. με νέας γενιάς cpu υποψιάζομαι ότι για render 1 instance σε H264 η διαφορά σε ταχύτητα είναι αμελητέα. Απλά χάνεις σε κατανάλωση ρεύματος, εκεί που στη 1 περίπτωση 6-8 πυρήνες δουλεύουν τέρμα, η GPU λειτουργεί ρελαντί.. Σε Η265 είναι η μεγάλη διαφορά.