FFmpeg

Publié le 27 novembre 2023 par Zaebos @MetatroneFR

Décodez, encodez, transcodez, multiplexez, démultiplexez, diffusez, filtrez et lisez à peu près tout ce que les humains et les machines ont créé.

Il prend en charge les formats anciens les plus obscurs jusqu’aux derniers formats. Peu importe s’ils ont été conçus par un comité de normalisation, la communauté ou une entreprise. Il contient libavcodec, libavutil, libavformat, libavfilter, libavdevice, libswscale et libswresample qui peuvent être utilisés par les applications. Ainsi que ffmpeg, ffserver, ffplay et ffprobe qui peuvent être utilisés par les utilisateurs finaux pour le transcodage, le streaming et la lecture.

Le projet FFmpeg tente de fournir la meilleure solution techniquement possible aux développeurs d’applications et aux utilisateurs finaux. Pour y parvenir, nous combinons les meilleures options de logiciels gratuits disponibles. Nous favorisons légèrement notre propre code pour maintenir les dépendances sur les autres bibliothèques à un niveau faible et pour maximiser le partage de code entre les parties de FFmpeg. Partout où la question du « meilleur » ne peut pas être résolue, nous prenons en charge les deux options afin que l’utilisateur final puisse choisir.

La sécurité est une priorité élevée et la révision du code est toujours effectuée dans un souci de sécurité. Cependant, en raison des très grandes quantités de code touchant aux données non fiables, des problèmes de sécurité sont inévitables et nous fournissons donc des mises à jour aussi rapides que possible de nos dernières versions stables lorsque de nouveaux problèmes de sécurité sont détectés.

Tout le monde est le bienvenu dans FFmpeg et toutes les contributions sont également les bienvenues. Nous sommes heureux de recevoir des correctifs, des pull request, des rapports de bugs, des dons ou tout autre type de contribution.

FFmpeg fournit divers outils :

  • ffmpeg est un outil en ligne de commande pour convertir des fichiers multimédia entre formats.
  • ffserver est un serveur de streaming multimédia pour les diffusions en direct.
  • ffplay est un simple lecteur multimédia basé sur SDL et les bibliothèques FFmpeg.
  • ffprobe est un simple analyseur de flux multimédia.

et bibliothèques de développeurs :

  • libavutil est une bibliothèque contenant des fonctions permettant de simplifier la programmation, notamment des générateurs de nombres aléatoires, des structures de données, des routines mathématiques, des utilitaires multimédia de base et bien plus encore.
  • libavcodec est une bibliothèque contenant des décodeurs et des encodeurs pour les codecs audio/vidéo.
  • libavformat est une bibliothèque contenant des démultiplexeurs et des multiplexeurs pour les formats de conteneurs multimédia.
  • libavdevice est une bibliothèque contenant des périphériques d’entrée et de sortie permettant de récupérer et de restituer vers de nombreux cadres logiciels d’entrée/sortie multimédia courants, notamment Video4Linux, Video4Linux2, VfW et ALSA.
  • libavfilter est une bibliothèque contenant des filtres multimédias.
  • libswscale est une bibliothèque effectuant des opérations de mise à l’échelle d’image et de conversion d’espace colorimétrique/format de pixel hautement optimisées.
  • libswresample est une bibliothèque effectuant des opérations de rééchantillonnage audio, de rematriçage et de conversion de format d’échantillon hautement optimisées.

Quoi de neuf

FFmpeg 6.1 « Heaviside », une nouvelle version majeure, est désormais disponible ! Quelques-uns des points forts :

  • décodeur libaribcaption
  • Décodeur et démultiplexeur vidéo Playdate
  • Étendre la prise en charge VAAPI pour libva-win32 sous Windows
  • filtre de source audio afireqsrc
  • filtre arls
  • Nouvelle option de la CLI ffmpeg : -readrate_initial_burst
  • filtre de source vidéo zoneplate
  • prise en charge des commandes dans les filtres setpts et asetpts
  • Vulkan décode hwaccel, prenant en charge H264, HEVC et AV1
  • filtre color_vulkan
  • filtre bwdif_vulkan
  • filtre nlmeans_vulkan
  • Décodeur vidéo RivaTuner
  • filtre xfade_vulkan
  • Décodeur vidéo vMix
  • Analyseur, multiplexeur et démultiplexeur Essential Video Coding
  • Fusion de cadres de codage vidéo essentiel bsf
  • filtre bwdif_cuda
  • Encodeur vidéo Microsoft RLE
  • Multiplexeur et démultiplexeur Raw AC-4
  • Analyseur, multiplexeur et démultiplexeur de flux binaires VVC bruts
  • Filtre Bitstream pour éditer les métadonnées dans les flux VVC
  • Filtre Bitstream pour convertir VVC de MP4 en Annexe B
  • filtre scale_vt pour videotoolbox
  • filtre transpose_vt pour videotoolbox
  • prise en charge de l’indication P_SKIP pour accélérer l’encodage libx264
  • Prise en charge des codecs HEVC, VP9, ​​AV1 au format flv amélioré
  • filtres audio apsnr et asisdr
  • Démultiplexeur et décodeur OSQ
  • Prise en charge de la liste de codecs HEVC, VP9, ​​AV1 dans le protocole rtmp amélioré
  • Démultiplexeur CRI USM
  • Option ffmpeg CLI ‘-top’ obsolète au profit du filtre setfield
  • Encodeur VAAPI AV1
  • Le schéma de sortie XML de ffprobe a été modifié pour tenir compte de plusieurs éléments de champs variables au sein du même élément parent.
  • Option ffprobe -output_format ajoutée comme alias de -of

Cette version était attendue depuis au moins six mois, mais en raison de l’activité constante dans le référentiel, elle a dû être retardée, et nous avons finalement pu bifurquer sur la version récemment, avant que certains des changements importants prévus pour la version 7.0 ne soient fusionnés.

En interne, nous avons également eu un certain nombre de changements. L’implémentation FFT, MDCT, DCT et DST utilisée pour les codecs et les filtres a été entièrement remplacée par libavutil/tx, plus rapide (article complet à ce sujet à venir).
Cela a également conduit à une réduction de la taille du binaire compilé, ce qui peut être perceptible dans les petites versions.
Il y a eu une réduction très importante du nombre total d’allocations effectuées sur chaque image dans les décodeurs vidéo, réduisant ainsi les frais généraux.

Les optimisations RISC-V pour de nombreuses parties de notre code DSP ont été fusionnées, laissant principalement les grands décodeurs.
Des efforts ont été déployés pour améliorer l’exactitude des horodatages et des durées de trame de chaque paquet, augmentant ainsi la précision de la vidéo à fréquence d’images variable.

La prochaine version majeure sera la version 7.0, dont la sortie est prévue en février. Nous essaierons de mieux respecter le nouveau calendrier de sortie que nous avons annoncé au début de cette année.

Nous recommandons fortement aux utilisateurs, aux distributeurs et aux intégrateurs système de mettre à niveau à moins qu’ils n’utilisent le git master actuel.

Continue de lire