FFmpeg 4.0 prend mieux en charge les cartes graphiques

Nicolas Furno |

Grosse mise à jour pour FFmpeg, l’outil en ligne de commande de décodage et d’encodage vidéo open-source qui est certainement l’un des plus courants et utilisés à l’heure actuelle. Même si vous l’ignorez, il est souvent utilisé comme base pour d’autres apps, comme le lecteur vidéo mpv et sa variante plus grand public IINA que nous évoquons régulièrement. Une version 4.0 est sortie pendant le week-end et la liste de nouveautés est, comme toujours, très longue.

À la base, FFmpeg est un outil en ligne de commande, à utiliser dans un terminal, mais de nombreuses apps l’exploitent avec une interface.

Plusieurs nouveautés concernent les cartes graphiques et leur prise en charge pour décoder ou encoder les fichiers. Sans cela, FFmpeg repose sur le processeur, mais exploiter les cartes graphiques a plusieurs avantages. Elles sont en général parfaitement optimisées pour cette tâche et peuvent ainsi le faire plus rapidement et en nécessitant moins de puissance, ce qui est utile sur un portable.

L’outil pouvait déjà faire certaines tâches, la version 4.0 complète la prise en charge. Du côté de Nvidia, elle intègre NVDEC pour décoder avec le matériel la plupart des codecs du moment, y compris le HEVC/H.265 qui nécessite plus de puissance en écriture comme en lecture. Pour AMD, FFmpeg ajoute les encodeurs AMD pour le H.264 et le H.265, ce qui permet de convertir des vidéos dans ces codecs en utilisant la carte graphique plutôt que le processeur.

Malheureusement, ces deux fonctions ne sont pas disponibles, a priori, sur les Mac. Apple boude Nvidia depuis des années et même si le constructeur de cartes graphiques propose ses propres pilotes pour macOS, les fonctions d’encodage et de décodage matériel des vidéos sont réservées à Windows et Linux. Si macOS ne gère pas les pilotes spécifiques publiés par AMD et Nvidia, c’est peut-être aussi parce qu’Apple intègre à son système de quoi bénéficier de l’accélération matérielle pour décoder et encoder des vidéos.

Comme le montre cette page du wiki publié par FFmpeg, on peut utiliser VideoToolbox, un framework fourni aux développeurs pour utiliser la carte graphique plutôt que le processeur. Et la différence est impressionnante. Ajoutez le paramètre -c:v h264_videotoolbox pour forcer l’utilisation de ce framework avec FFmpeg. Voici au minimum ce que vous devrez utiliser :

ffmpeg -i video.mp4 -c:v h264_videotoolbox out.mp4

Même si le processeur est toujours bien utilisé, la différence de temps de traitement est phénoménale, surtout si votre Mac est récent. Nous avons testé avec un MacBook Pro 15 pouces de 2017 : alors qu’il fallait autour de 40 secondes pour convertir une vidéo HEVC filmée à l’iPhone1 en H.264, l’option permet de réduire ce temps de traitement à 6 secondes seulement. Même sur un MacBook Pro 13 pouces Retina de 2014 équipé seulement d’un circuit graphique Intel, la différence reste spectaculaire : moins de 15 secondes avec VideoToolbox, contre plus d’une minute trente sans l’option.

Autant dire que c’est une option bien utile, avec des temps de conversion entre six et sept fois moins importants selon les Mac. Précisons que la version 4.0 qui vient de sortir ajoute aussi la prise en charge du H.265 pour l’encodage. C’était l’une des nouveautés de macOS High Sierra et FFmpeg la gère à son tour, même s’il faudra probablement compiler l’outil vous même pour ajouter le bon encodeur2. Cela permettra à terme de convertir les vidéos en bénéficiant de l’accélération matérielle et du meilleur codec du moment, avec une meilleure qualité à poids de fichier égal, ou un poids de fichier plus léger à qualité visuelle égale.

Notons que cette solution fournie par Apple n’est pas aussi souple que celles que l’on a sur Linux et Windows. Par exemple, sur le hackintosh que j’ai monté à l’été 2016, je ne peux pas utiliser la carte graphique de Nvidia présente dans l’ordinateur. VideoToolbox ne la prend pas en charge puisqu’il ne s’agit pas d’une carte AMD, et l’encodage matériel fourni par Nvidia n’est pas disponible sur macOS.

Si vous voulez découvrir FFmpeg sur macOS, vous pouvez télécharger la dernière version à cette adresse, mais le mieux serait de passer par le gestionnaire de paquets HomeBrew. Voici les deux lignes de commande à saisir si vous n’aviez jamais utilisé ces deux outils :

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install ffmpeg

  1. Vidéo 1080p 60 FPS de 20 secondes. ↩︎

  2. La version fournie par Homebrew ne dispose pas du bon encodeur, et il n’est pas possible de l’ajouter pour le moment. Seule solution à court terme : télécharger le code-source et le compiler avec la bonne configuration. ↩︎

avatar PiRMeZuR | 

Génial !

avatar C1rc3@0rc | 

@PiRMeZuR

Oui, tres bon soft opensource mais qui ne fait pas de miracle: le traitement graphique necessite une machine equipée d'un vrai GPU...

avatar chouchoutnt | 

Beaucoup utilise sur les nas avec plex

avatar obcd | 

j'ai vu ca ce mois ci dans la devel,
mais pour avoir testé la qualité n'est pas vraiment au rendez vous,
pas test la finale a voir ?

avatar CKJBeOS | 

petite question, est-ce que ca fonctionne toujours avec ffmpegX ?

avatar Oh la belle Pomme | 

Mais du coup je n'ai pas bien compris : est-ce que MPV et IINA utilisent bien le décodage matériel pris en charge par ffmpeg?
Parce que la suite de l'article semble dire que pour bénéficier de l'encodage/décodage matériel il faut passer par la ligne de commande. Du coup je ne comprends pas bien.

avatar YAZombie | 

Assez d'accord, c'est un chouïa confus 🤷️

avatar pynux | 

ca y est homebrew integre ffmpeg avec videotoolbox pour le support du hevc (h265)
sur mon macbook pro 2016 Touch Bar 13 pouce (donc sans carte graphique dédié):
avec libx265 , je tournais a 5-6 fps pour encoder du 1080p
avec hevc_videotoolbox : je tourne a 30fps pour encoder le meme fichier en 1080p :)

avec libx264 , je tournais à 22-23 fps pour encoder du 1080p
avec h264_videotoolbox : je tourne a 220fps pour encoder le meme fichier en 1080p :)

j'ai une question pour ceux qui ont des eGPU externe si ffmpeg peu utiliser ces eGPU pour encoder les videos ?

avatar wolwerine69 | 

J'en profite pour ajouter quelques précisions concernant la prise en charge des GPU par FFMPEG

La version 4.0.x ajoute le support des GPU intel (videotoolbox : `h264_videotoolbox` & `hevc_videotoolbox`) qui utilise exclusivement le processeurs intel au niveau QuickSync
Le support des carte AMD utilisant ces transcodeur `h264_amf` & `hevc_amf` ne sont utilisable que via la version Windows de FFmpeg

Je possède un MacBook Pro 15 2017 avec Radeon Pro 560
lorsque je lance un transcodage c'est bien le module QuickSync du CPU intel qui travail et non la carte AMD
ça arrive, mais pas pour tout de suite sur MaCOS

CONNEXION UTILISATEUR