68 lines
5.7 KiB
Plaintext
68 lines
5.7 KiB
Plaintext
|
====== Changer de résolution d'une vidéo avec FFmpeg ======
|
||
|
{{ :dummy.png?75x75|Nom de la section}}
|
||
|
|
||
|
Dans ce tutoriel sur FFmpeg, nous allons apprendre à changer la résolution d'une vidéo en utilisant l'outil en ligne de commande de FFmpeg. Le changement de résolution est une opération courante en édition vidéo, en traitement et en compression. Il est souvent utilisé dans le contexte du streaming //vidéo ABR//, où une seule vidéo source est compressée en plusieurs combinaisons //bitrate-resolution//.
|
||
|
|
||
|
Pour déterminer la résolution d'une vidéo d'entrée, nous allons utiliser l'outil ''ffprobe'', qui est inclus dans les compilations FFmpeg. Nous allons exécuter la commande suivante dans la ligne de commande pour récupérer la résolution de la vidéo d'entrée :
|
||
|
|
||
|
ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.mp4
|
||
|
|
||
|
Cette commande utilise l'option ''-select_streams v:0'' pour sélectionner le flux vidéo de la vidéo d'entrée, ''-show_entries stream=width,height'' pour afficher les informations sur la largeur et la hauteur du flux vidéo, et ''-of csv=s=x:p=0'' pour formater la sortie en une chaîne de caractères ''largeur x hauteur''.
|
||
|
|
||
|
L'outil ''ffprobe'' affichera la résolution de la vidéo d'entrée sur la console.
|
||
|
|
||
|
===== Mettre à l'échelle la résolution d'une vidéo =====
|
||
|
|
||
|
Pour mettre à l'échelle ou changer la résolution d'une vidéo à l'aide de FFmpeg, il est nécessaire d'utiliser le filtre d'échelle (**scale filter**) de FFmpeg. Pour utiliser ce filtre, voici la commande à utiliser:
|
||
|
|
||
|
ffmpeg -i input.mp4 -vf scale=$w:$h <encoding-parameters> output.mp4
|
||
|
|
||
|
où ''$w'' et ''$h'' correspondent à la largeur et la hauteur souhaitées pour la vidéo de destination. Par exemple, ''-vf scale=640:480'' peut être utilisé pour redimensionner la vidéo à une résolution de 480p.
|
||
|
|
||
|
Après que FFmpeg ait changé la résolution de la vidéo, il va la réencoder avec cette nouvelle résolution. Dans la ligne de commande ci-dessus, des paramètres d'encodage peuvent être ajoutés pour encoder la vidéo mise à l'échelle avec ces paramètres. Par exemple, il est possible de demander à FFmpeg de l'encoder en utilisant ''crf=18'' pour obtenir un encodage H.264/AVC de qualité élevée, ou en utilisant d'autres paramètres selon le besoin.
|
||
|
|
||
|
===== Changer la résolution d'une vidéo en conservant l'aspect ratio =====
|
||
|
|
||
|
L'aspect ratio d'une image est très bien défini sur Wikipédia comme suit : l'aspect ratio d'une image est le rapport entre sa largeur et sa hauteur. Il est couramment exprimé sous forme de deux nombres séparés par un deux-points, comme dans 16:9. Pour un aspect ratio x:y, l'image est large de x unités et haute de y unités.
|
||
|
|
||
|
Il est très courant de rencontrer ce problème lors du travail avec des vidéos : Comment changer la résolution d'une vidéo (ou la mettre à l'échelle) tout en gardant l'aspect ratio d'origine de la vidéo ?
|
||
|
|
||
|
Dans FFmpeg, si vous souhaitez mettre à l'échelle une vidéo tout en conservant son aspect ratio, il est nécessaire de définir l'une des deux paramètres, la hauteur ou la largeur, et de définir l'autre paramètre à ''-1''. Si vous définissez la hauteur, vous devez définir la largeur à ''-1'' et vice versa.
|
||
|
|
||
|
Pour démontrer cela, supposons que les commandes suivantes prennent une vidéo HD (1920x1080) en entrée. Et, supposons que nous souhaitons changer sa résolution. Cela peut être fait de deux manières comme discuté précédemment, alors essayons les deux façons.
|
||
|
|
||
|
--
|
||
|
|
||
|
Spécifiez la largeur pour conserver l'aspect ratio
|
||
|
|
||
|
ffmpeg -i input.mp4 -vf scale=320:-1 output.mp4
|
||
|
|
||
|
La vidéo résultante aura une résolution de 320x180. C'est parce que 1920/320 = 6. Ainsi, la hauteur est mise à l'échelle à 1080/6 = 180 pixels.
|
||
|
|
||
|
--
|
||
|
|
||
|
Spécifiez la hauteur pour conserver l'aspect ratio
|
||
|
|
||
|
ffmpeg -i input.mp4 -vf scale=-1:720 output.mp4
|
||
|
|
||
|
La vidéo résultante aura une résolution de 1280x720. C'est parce que 1080/720 = 1,5. Ainsi, la largeur est mise à l'échelle à 1920/1,5 = 1280 pixels.
|
||
|
|
||
|
--
|
||
|
|
||
|
Pour plus d'informations sur l'utilisation de FFimpeg pour créer des vidéos à partir d'images ou pour d'autres tâches liées à la vidéo, veuillez vous référer à la documentation officielle de FFmpeg disponible sur leur site web.
|
||
|
|
||
|
===== Protection contre l'upscalling =====
|
||
|
|
||
|
Chaque action de mise à l'échelle, à la hausse ou à la baisse, ne produira généralement pas le même niveau de qualité vidéo que la vidéo d'origine. Il est susceptible d'y avoir quelques pertes de compression lors du processus de mise à l'échelle. Si la résolution d'entrée est trop faible, FFmpeg offre une astuce pour éviter la mise à l'échelle.
|
||
|
|
||
|
ffmpeg -i input.mp4 -vf "scale='min(320,iw)':'min(240,ih)'" output.mp4
|
||
|
|
||
|
Dans la ligne de commande ci-dessus, la largeur/hauteur minimale pour effectuer la mise à l'échelle est fixée respectivement à 320 et 240 pixels. Il s'agit d'une manière très simple de se protéger contre une mise à l'échelle de mauvaise qualité.
|
||
|
|
||
|
Cela ne garantit pas une qualité de sortie exceptionnelle, mais cela permet de s'assurer que la qualité ne sera pas dégradée par l'ajout de pixels qui n'existent pas dans l'entrée originale. Pour plus d'informations sur l'utilisation de FFmpeg pour la mise à l'échelle de vidéos, veuillez vous référer à la documentation officielle de FFmpeg.
|
||
|
|
||
|
Il est possible d'utiliser la commande suivante pour mettre à l'échelle la vidéo tout en conservant l'aspect ratio et en utilisant la largeur minimale de 320 pixels :
|
||
|
|
||
|
ffmpeg -i input.mp4 -vf "scale='min(320,iw)':'-1'" output.mp4
|
||
|
|
||
|
Dans cette commande, la hauteur est définie à -1 pour que FFmpeg calcule automatiquement la hauteur en fonction de l'aspect ratio d'origine de la vidéo, tandis que la largeur est définie à la valeur minimale de 320 pixels.
|