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 🤷️

CONNEXION UTILISATEUR