Outils pour utilisateurs

Outils du site


all:bibles:linux:commandes:ffmpeg

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
all:bibles:linux:commandes:ffmpeg [2024/10/03 18:12] – ↷ Page déplacée de all:bibles:linux:applications:ffmpeg à all:bibles:linux:commandes:ffmpeg omeylhocall:bibles:linux:commandes:ffmpeg [2024/12/04 19:20] (Version actuelle) – [Copie d'une partie d'une vidéo (sans réencodage)] omeylhoc
Ligne 1: Ligne 1:
 +====== FFMPEG ======
 +
 +----
 +
 +===== Informations =====
 +
 +==== Information sur le contenu d'une vidéo ====
 +
 +<code bash>
 +ffmpeg -i fichier
 +</code>
 +
 +==== Liste des codecs ====
 +
 +=== Liste des codecs ===
 +
 +  * Liste tous les codecs (Audio, vidéo, sous-titres) disponibles en encodage et/ou décodage. 
 +
 +<code bash>
 +ffmpeg -codecs
 +</code>
 +
 +  * Liste uniquement les codecs (Audio, vidéo, sous-titres) disponibles pour l'encodage. 
 +
 +<code bash>
 +ffmpeg -encoders
 +</code>
 +
 +  * Liste uniquement les codecs (Audio, vidéo, sous-titres) disponibles pour le décodage. 
 +
 +<code bash>
 +ffmpeg -decoders
 +</code>
 +
 +=== Liste les formats ===
 +
 +  * Liste tous les formats de fichier (Audio, vidéo, sous-titres) disponibles en multiplexage et/ou démultiplexage. 
 +
 +<code bash>
 +ffmpeg -formats
 +</code>
 +
 +  * Liste uniquement les formats de fichier (Audio, vidéo, sous-titres) disponibles pour le multiplexage. 
 +
 +<code bash>
 +ffmpeg -muxers
 +</code>
 +
 +  * Liste uniquement les formats de fichier (Audio, vidéo, sous-titres) disponibles pour le démultiplexage. 
 +
 +<code bash>
 +ffmpeg -demuxers
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]
 +
 +===== Copie =====
 +
 +==== Copie d'une partie d'une vidéo (sans réencodage) ====
 +
 +Permet de changer de container ou de prendre qu'une partie de la vidéo sans passer par un réencodage.
 +
 +Exemple copie de la vidéo input.mkv dans output.mkv en commençant à partir de 3 mn et pour une durée de 10 mn et 1/2 seconde.
 +
 +<code bash>
 +ffmpeg -i input.mkv -c copy -ss 00:03:00 -t 00:10:00.5 output.mkv
 +</code>
 +
 +==== Copie de la partie vidéo sans l'audio ====
 +
 +<code bash>
 +ffmpeg -i input.mkv -vcodec copy -an output.mkv
 +</code>
 +
 +==== Copie de différents streams (audio/sous titres) ====
 +
 +  * Identifier les streams avec la commande 
 +
 +<code bash>
 +ffmpeg -i input.mkv
 +</code>
 +
 +  * Lancer la copie sur les streams désirés 
 +
 +<code bash>
 +ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:2 -map 0:6 -map 0:7 -c copy output.mkv
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]
 +
 +===== Transformation =====
 +
 +==== Réencodage ====
 +
 +=== Réencodage de la partie vidéo ===
 +
 +<code bash>
 +ffmpeg -i input.mkv -vcodec hevc -acodec copy output.mkv
 +</code>
 +
 +=== Réencodage de la partie audio ===
 +
 +<code bash>
 +ffmpeg -i input.mkv -vcodec copy -acodec libmp3lame output.mkv
 +</code>
 +
 +en précisant le bitrate :
 +
 +<code bash>
 +ffmpeg -i input.mkv -vcodec hevc-acodec libmp3lame -b:a 64k output.mkv
 +</code>
 +
 +==== Encodage à partir d'un DVD ==== 
 +
 +=== Identification des streams à récupérer ===
 +
 +A partir du répertoire VIDEO_TS lister les streams disponibles :
 +
 +<code bash>
 +ffmpeg -i VTS_01_1.VOB
 +</code>
 +
 +Noter les streams souhaités (stream vidéo 0:1 et stream audio 0:2 par exemple).
 +
 +=== Récupération des streams dans un seul fichier ===
 +
 +A partir du répertoire VIDEO_TS récupérer les streams souhaités de tous les fichiers VTS_xx_y.VOB :
 +
 +<code bash>
 +ffmpeg -i "concat:VTS_01_1.VOB|VTS_01_2.VOB|....|VTS_xx_y.VOB" -map 0:1 -map 0:2 -f mpeg -c copy fichier.mpeg
 +</code>
 +
 +<note tip>On peut mettre les streams dans l'ordre que l'on veut, par exemple pour avoir l'audio français avant l'anglais.</note>
 +
 +=== Encodage final ===
 +
 +Réencodage classique avec la commande :
 +
 +<code bash>
 +ffmpeg -i fichier.mpeg -vcodec <codec video> -acodec <codec audio> <fichier de sortie>
 +</code>
 +
 +==== Rotation d'une vidéo ====
 +
 +<code>
 +-vf "transpose=dir=x" 
 +</code>
 +
 +avec x :
 +
 +  * 0 : 90° antihoraire et miroir vertical
 +  * 1 : 90° horaire
 +  * 2 : 90° anti horaire
 +  * 3 : 90° horaire et miroir vertical
 +
 +Pour une rotation à 180° on fera 2 fois 90° :
 +
 +<code>
 +-vf "transpose=dir=2:transpose=dir=2" 
 +</code>
 +
 +==== Effet miroir sur une vidéo ====
 +
 +<code bash>
 +ffmpeg -i input.mp4 -vf "hflip" output.mp4  # miroir horizontal
 +ffmpeg -i input.mp4 -vf "vflip" output.mp4  # miroir vertical
 +</code>
 +
 +==== Changement de résolution ====
 +
 +=== format HD ===
 +
 +<code>
 +-vf scale=1920:1080
 +</code>
 +
 +==== Modification vitesse ====
 +
 +L'accélération est déterminé par le rapport entre le débit d'image de la source (souvent 25 fps) et le débit de lecture. Le débit d'écriture dans le fichier de sortie n'intervient pas dans le ratio. 
 +
 +=== Accélérer par 20 ===
 +
 +<code>
 +ffmpeg -r 500 -i input.mkv -r 25 output.mkv
 +</code>
 +
 +Ici on lit à 500 fps une source à 25 fps donc on accélère par 500/25 = 20 fois. Le fait d'écrire la vidéo à 25 fps (ou autre) n'intervient pas dans le ratio. 
 +
 +=== Ralentir par 5 ===
 +
 +<code>
 +ffmpeg -r 5 -i input.mkv -r 25 output.mkv
 +</code>
 +
 +Ici on lit à 5 fps une source à 25 fps donc on accélère par 5/25 = 0,2 fois, on ralenti donc d'un facteur 5.
 +
 +==== Inverser une vidéo ====
 +
 +Appliquer le filtre d'inversion vidéo :
 +
 +<code bash>
 +ffmpeg -i input.mp4 -vf reverse output.mp4
 +</code>
 +
 +==== Vidéo en split-screen ====
 +
 +[[https://coderocks.fr/datarocks/cmdtools-ffmpeg-video/creer-des-videos-en-split-screen-avec-ffmpeg-820/]]
 +
 +==== Mosaïque de vidéos====
 +
 +[[https://coderocks.fr/datarocks/cmdtools-ffmpeg-video/assembler-des-clips-video-en-une-mosaique-avec-ffmpeg-828/]]
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]
 +
 +===== Concaténation de vidéos =====
 +
 +==== Sans réencodage ====
 +
 +Créer un fichier "liste.txt" contenant la liste des fichiers avec le chemin :
 +
 +<file>
 +file '/chemin/video1.mkv'
 +file '/chemin/video2.mkv'
 +...
 +file '/chemin/videox.mkv'
 +</file>
 +
 +Puis lancer la commande :
 +
 +<code bash>
 +ffmpeg -f concat -safe 0 -i liste.txt -c copy output.mkv
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]
 +
 +===== Sous titrage d'une vidéo =====
 +
 +==== Intégration sous-titres dans la vidéo ====
 +
 +On peut intégrer un fichier de sous-titres au format SRT (SubRip). Le fichier doit être correctement formaté avec des marqueurs de temps.
 +
 +<code bash>
 +ffmpeg -i input.mp4 -vf "subtitles=subtitles.srt" output.mp4
 +</code>
 +
 +=== Personnalisation sous-titres ===
 +
 +<code bash>
 +ffmpeg -i input.mp4 -vf "subtitles=subtitles.srt:force_style='FontName=Arial,FontSize=24,PrimaryColour=&H00FFFF&,Alignment=2'" output.mp4
 +</code>
 +
 +==== Ajout d'une piste de sous titres ====
 +
 +<code bash>
 +ffmpeg -i input.mkv -f srt -i sous-titres.srt -map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy -c:s srt output.mkv
 +</code>
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]
 +
 +===== Chapitrage d'une vidéo =====
 +
 +==== Créer fichier chapitres ====
 +
 +Créer un fichier au format OGG texte en évitant les accents et caractères spéciaux dans les titres :
 +
 +<file>
 +CHAPTER01=00:00:00.000
 +CHAPTER01NAME=Titre du premier chapitre
 +CHAPTER02=00:09:19.000
 +CHAPTER02NAME=Titre du chapitre
 +...
 +CHAPTER12=01:55:50.320
 +CHAPTER12NAME=Titre du chapitre
 +</file>
 +
 +==== Intégration à la vidéo ====
 +
 +Utiliser un outil comme [[https://doc.ubuntu-fr.org/mkvtoolnix|MKVToolnix]] pour intégrer le chapitrage à la vidéo.
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]
 +
 +===== Sources =====
 +
 +[[https://debian-facile.org/doc:media:ffmpeg]]\\
 +[[https://coderocks.fr/datarocks/cmdtools-ffmpeg/]]
 +
 +----
 +
 +[[all:bibles:linux:commandes:ffmpeg|Haut de page]]