logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

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édentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
doc:media:ffmpeg [21/11/2017 07:44]
smolski Tableau pense bête à ska
doc:media:ffmpeg [19/08/2018 11:39]
kao changement de l'ordre de certain chapitre avant simplification
Ligne 9: Ligne 9:
     * Mis à jour le 29-04-2012     * Mis à jour le 29-04-2012
   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=2504 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))   * Commentaires sur le forum : [[http://​debian-facile.org/​viewtopic.php?​id=2504 | Lien vers le forum concernant ce tuto]]((N'​hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !))
- 
  
  
Ligne 24: Ligne 23:
 ===== Installation ===== ===== Installation =====
  
-ffmpeg est dans [[doc:​systeme:​apt:​sources.list#​les-depots-deb-multimedia|les fichiers sources.list - deb-multimedia]] : +<code root>apt install ffmpeg</​code>​
-<code root>apt-get install ffmpeg</​code>​+
 ===== Utilisation ===== ===== Utilisation =====
  
Ligne 243: Ligne 241:
  
 ==== Encoder la vidéo en VP8 ==== ==== Encoder la vidéo en VP8 ====
 +<​note>​Le VP8 est souvent déprécié au profit du VP9 plus souple et plus performant</​note>​
 VP8 est un codec vidéo libre promu par Google, un bon équivalent au h264/mp4 : VP8 est un codec vidéo libre promu par Google, un bon équivalent au h264/mp4 :
 <code user>​ffmpeg -i tears_of_steel_720p.mkv -c:v:0 libvpx -crf 10 -vb 4M -c:a copy   ​tears_of_steel_vp8.mkv</​code>​ <code user>​ffmpeg -i tears_of_steel_720p.mkv -c:v:0 libvpx -crf 10 -vb 4M -c:a copy   ​tears_of_steel_vp8.mkv</​code>​
Ligne 251: Ligne 249:
   *-vb 4M permet de donner un objectif de débit à 4 Megabit/s   *-vb 4M permet de donner un objectif de débit à 4 Megabit/s
  
-Une liste des options possibles pour encoder en vp8 est disponible ici: +Une liste des options possibles pour encoder en vp8 est disponible ici: [[http://​wiki.webmproject.org/​ffmpeg]] 
-  * [[http://​wiki.webmproject.org/​ffmpeg]]+ 
 +==== Encoder la vidéo en VP9 ==== 
 + 
 +VP9 est un codec vidéo libre promu par Google pour concurrencer le h265/HEVC : 
 + 
 +<code user>​ffmpeg -i tears_of_steel_720p.mkv -c:v:0 libvpx-vp9 -threads 8 -crf 10 -vb 4M -c:a copy   ​tears_of_steel_vp9.mkv</​code>​ 
 + 
 +Ici on utilise la librairie libvpx-vp9 avec trois options : 
 + 
 +    -crf permet de définir un niveau de qualité entre 0 et 63 (petit nombre = meilleure qualité mais plus de temps de calcul) 
 +    -vb 4M permet de donner un objectif de débit à 4 Megabit/s 
 +    -threads reste nécessaire pour forcer le nombre de core, libvpx-vp9 ne les detecte pas encore automatiquement. ​
  
 +Une liste des options possibles pour encoder en vp9 est disponible ici: [[http://​wiki.webmproject.org/​ffmpeg/​vp9-encoding-guide]]
  
 ==== Encoder la vidéo en H264/Mpeg4 ==== ==== Encoder la vidéo en H264/Mpeg4 ====
Ligne 263: Ligne 273:
   * **-crf** ​ permet de définir un niveau de qualité entre 0 et 51 (petit nombre = meilleure qualité mais plus de temps de calcul)   * **-crf** ​ permet de définir un niveau de qualité entre 0 et 51 (petit nombre = meilleure qualité mais plus de temps de calcul)
  
-Une documentation plus détaillé en anglais est disponible ici: +Une documentation plus détaillé en anglais est disponible ici: [[https://​trac.ffmpeg.org/​wiki/​x264EncodingGuide | trac.ffmpeg.org]]
-  * [[https://​trac.ffmpeg.org/​wiki/​x264EncodingGuide | trac.ffmpeg.org]]+
  
-==== Regrouper plusieurs vidéos mp4 en 1 seule ====+==== Encoder la vidéo ​en H.265/​HEVC ​====
  
-Il y a une fonction **concat** qui concatène des fichiers en entréeC’est ce que l’on va utiliser… sauf que cela ne fonctionne pas avec des fichiers MP4 (container MOV, h264 en codec vidéoet aac en codec audio).+Le H.265/​HEVC ​est un nouveau ​codec propriétairesuccesseur du H264/Mpeg4La syntaxe suit celle du H264
  
-=== Préparation ===+<code user>​ffmpeg -i tears_of_steel_720p.mkv -c:v:0 libx265 -preset slow -crf 22 -c:a copy tears_of_steel_h265.mkv</​code>​
  
-On va d’abord changer de container pour nos flux source, puis les assembler, car on ne va pas refaire de transcodage,​ juste de la copie de flux. \\ +Une documentation plus détaillée ​en anglais ​est disponible ici https://trac.ffmpeg.org/wiki/Encode/H.265 et ici http://x265.readthedocs.org/en/default/
-La fonction **concat** accepte bien le MPEG Transport Stream, allons y : +
-<code user>​ffmpeg -y -i "​source1.mp4"​ -c copy -bsf:v h264_mp4toannexb -f mpegts "​source1.ts"</​code>​ +
-Le -bsf:v h264_mp4toannexb restructure le flux h264 pour qu’il puisse rentrer dans le TS. Il le demande, et ça marche. +
- +
-=== Assemblage === +
- +
-Une fois que tous les fichiers à assembler sont passés ​en TS, on les regroupe et les converti en mp4 ainsi : +
-<code user>​ffmpeg -y -i concat:"​source1.ts|source2.ts"​ -c copy -f mov "​destination.mp4"</​code>​ +
- +
-<note important>​Si cela ne fonctionne pas, vérifiez que vos fichiers ont bien le même format, codec, résolution… \\ +
-À la moindre différence,​ l’assemblage ​est impossible.</​note>​ +
- +
-Source ​: +
-  * http://hd3g.tv/​b/​2012/​08/​coller-des-fichiers-mp4-entre-eux-avec-ffmpeg+
- +
-=== Utiliser une boucle for === +
- +
-Si les fichiers à assembler sont nombreux, on peut utiliser une boucle. +
- +
-Rassembler les vidéos afin qu'​elle portent un numéro progressif pour la vidéo finale. \\ +
-Créer le répertoire accueillant les MPG, par exemple : +
-<code user>​mkdir ~./video-mpg<​/code> +
-Y déposer les videos MPG à assembler : +
-<code user>​mv ​/répertoire_acquis/​*.mpg ~./​video-mpg</​code>​ +
-Les numéroter dans l'​ordre où nous souhaitons les assembler. \\ +
-Perso, j'​utilise [[doc:systeme:​gprename|GPRENAME]] qui me rend la vie facile... ;-) +
- +
-Lister le contenu obtenu : +
-<code user>ls ~./video/</​code>​ +
-<code config retour de la commande ls>​0001.mpg 0002.mpg 0003.mpg 0004.mpg 0005.mpg</code>  +
- +
-Nous allons d'​abord les convertir chacune ​en mp4 en utilisant une première fois la boucle for : +
-<code user>​cd ​/repertoire/video-mpg</​code>​ +
-<code user>for i in {0001..0005};​ do $i -c:v:0 libx264 -preset slow -crf 15 -s 1024x768 -threads 0 -c:a $i.mp4; done</​code>​ +
- +
-**Explication :** \\ +
-''​for i in {0001..0005};''​ +
- +
-Se traduit : la variable ''​i''​ prendra respectivement les chiffres ''​0001''​ ''​0002''​ ''​0003''​ ''​0004''​ ''​0005''​ comme valeur. \\ +
-Le point virgule '';''​ indique la fin de cette indication. +
- +
-Ensuite vient : +
-''​do $i -c:v:0 libx264 -preset slow -crf 15 -s 1024x768 -threads 0 -c:a $i.mp4;​done''​ +
- +
-**Explication :** +
- +
-Au début : ''​do $i''​ indique qu'il faut considérer chacun des numéros attribués à la variable ''​i''​ précédemment définie. \\ +
-Le : '';​done''​ indique la fin de la commande qui est à répéter pour chaque variable ''​$i''​ trouvée. +
- +
-[[doc:​programmation:​shell:​cd|Se placer dans le dossier]] rassemblant les vidéos MPG numérotées : +
-<code user>cd /​repertoire/​video-mpg</​code>​ +
- +
-On exécute la commande de conversion en TS : +
-<code user>for i in {0001..0005};​ do ffmpeg -y -i "​$i.mp4"​ -c copy -bsf:v h264_mp4toannexb -f mpegts "​$i.ts";​ done</​code>​ +
- +
-Et pour assembler le tout directement en MP4 : +
-<code user>​ffmpeg -y -i concat:"​0001.ts|0002.ts|0003.ts|0004.ts|0005.ts"​ -c copy -f mov "​1.mp4"</​code>​ +
- +
-Où la vidéo 1.mp4 est la vidéo finale assemblée. +
- +
-**Alternative :** +
- +
-En utilisant la boucle de nouveau : +
-<code user>​toto="";​ for i in {0001..0005};​ do toto="​$toto$i.ts|";​ done; ffmpeg -y -i concat:"​$toto"​ -c copy -f mov "​1.mp4"</​code>​ +
-Merci **kyodev** pour cette astuce ! :-D +
- +
-Source de la boucle : +
-  * [[utilisateurs:​smolski:​tutos:​copies-incrementees]]+
  
 ==== Aspect 16:9 ==== ==== Aspect 16:9 ====
Ligne 347: Ligne 288:
 <code user>​ffmpeg -i film.mkv -aspect 16:9 -c copy film2.mkv</​code>​ <code user>​ffmpeg -i film.mkv -aspect 16:9 -c copy film2.mkv</​code>​
  
-On peut en profiter pour changer le codage par la même occasion, par exemple : +==== CRF (Constant Rate Factor) ====
-<code user>​ffmpeg -i film.avi -aspect 16:9 -c copy film2.mkv</​code>​+
  
-==== Option crf) ==== +Il faut utiliser le CRF pour définir une qualité d'​image constante. L'​objectif est d'​obtenir une qualité d'​image stable entre plusieurs vidéos. À durée égale, la taille du fichier peut varier suivant si la vidéo est facilement compressible ou pas.\\ 
- +<note tip>Une vidéo de 30mn avec beaucoup de scènes fixes, typiquement une conférence,​ sera beaucoup moins lourde qu'une vidéo de 30mn avec des explosions et effets stroboscopiques tout du long. L'​encodeur fait varier le bitrate pour s'​adapter à différentes scènes, en gardant comme objectif une certaine qualité d'​image.</​note>​
-Il faut utiliser le CRF (Constant Rate Factor) ​pour définir une qualité d'​image constante. L'​objectif est d'​obtenir une qualité d'​image stable entre plusieurs vidéos. À durée égale, la taille du fichier peut varier suivant si la vidéo est facilement compressible ou pas. Une vidéo de 30mn avec beaucoup de scènes fixes, typiquement une conférence,​ sera beaucoup moins lourde qu'une vidéo de 30mn avec des explosions et effets stroboscopiques tout du long. L'​encodeur fait varier le bitrate pour s'​adapter à différentes scènes, en gardant comme objectif une certaine qualité d'​image.+
  
 L'​encodage en 1 ou 2 passes en spécifiant un bitrate était utile à une certaine époque pour utiliser le maximum de place disponibles sur des supports comme le CD ou le DVD, typiquement obtenir la meilleure qualité de vidéo sur 700Mo exactement. En définissant un bitrate de 1000kb/s (vidéo+audio) pour une vidéo de 30mn00s, on obtient un fichier de 219,72 Mio exactement (ajouter quelques Mio pour le conteneur mkv). \\ L'​encodage en 1 ou 2 passes en spécifiant un bitrate était utile à une certaine époque pour utiliser le maximum de place disponibles sur des supports comme le CD ou le DVD, typiquement obtenir la meilleure qualité de vidéo sur 700Mo exactement. En définissant un bitrate de 1000kb/s (vidéo+audio) pour une vidéo de 30mn00s, on obtient un fichier de 219,72 Mio exactement (ajouter quelques Mio pour le conteneur mkv). \\
Ligne 368: Ligne 307:
 Une vidéo en 1080p à CRF 23 sera excellente, alors qu'une vidéo en 240p à CRF 23 pourrait faire apparaître des artefacts.</​note>​ Une vidéo en 1080p à CRF 23 sera excellente, alors qu'une vidéo en 240p à CRF 23 pourrait faire apparaître des artefacts.</​note>​
  
-=== Pense-bête de ska=== 
- 
-^ Commentaire ​ ^ Option | 
-|On peut séparer plusieurs filtres avec une virgule, l'​ordre est important |-vf filtre1,​filtre2,​etc | 
-|Rogner l'​image,​ origine = en haut à gauche |-vf crop=largeurX:​hauteurY:​decalageX:​decalageY | 
-|Mettre à l'​échelle |-1 conserve le ratio flag peut être '​bicubic'​ : -vf scale=-1:​480:​flags='​lanczos'​ | 
-|Débruitage de vidéo|défaut = 4. Utiliser 2 pour les vidéos faiblement bruitées : -vf hqdn3d=2 | 
-|Désentralaçage (mcdeint et kerndeint sont moins efficaces) |-vf yadif | 
-|Ajustement des couleurs |([mini/​maxi%%|%%défaut]) : -vf mp=eq2=gamma:​contraste:​luminosite:​saturation |[0.1/​10%%|%%1:​-2/​2%%|%%1:​-1/​1%%|%%0:​0/​3%%|%%1] | 
-|Modifie le ratio, le lecteur affichera la vidéo en 16/9 peut importe la définition |-aspect 16:9 | 
-|Change le départ, la fin ou la durée |-ss départ en secondes\\ -t durée en secondes\\ -to fin en secondes | 
-|Désactive les flux audios ou vidéos |-an sans audio\\ -vn sans vidéo | 
-|Audio Opus | bitrate -c:a libopus -b:a 64k | 
-|Audio Vorbis, qualité | -c:a libvorbis | -q:a 0 (~64 kbps)\\ -q:a 2 (~96 kbps\\ -q:a 3 (~112 kbps standard)\\ -q:a 4 (~128 kbps)\\ -q:a 5 (~160 kbps) | 
-|Conversion audio multi-canaux vers stéréo |-ac 2 | 
- 
-Et le lien vers la doc complète de ffmpeg avec toutes les options disponibles pour faire des trucs vraiment spéciaux : 
-  * https://​ffmpeg.org/​ffmpeg-all.html 
-Les conseils pour du x264 sur le wiki ffmpeg : 
-  * https://​trac.ffmpeg.org/​wiki/​Encode/​H.264 
- 
-Pompé du forum df là : 
-  * https://​forum.doom9.org/​showthread.php?​t=143904 
-Merci **ska** ! //Que ton chemin se couvre de pétales de rose...// :-D 
 ===== Encoder le son ===== ===== Encoder le son =====
  
Ligne 511: Ligne 426:
  
 <note important>​FFmpeg ne semble pas respecter le nombre d'​image par seconde. Si les capacités de la machine le permettent, il pourra aller au delà, la vidéo sera donc ralentie.</​note>​ <note important>​FFmpeg ne semble pas respecter le nombre d'​image par seconde. Si les capacités de la machine le permettent, il pourra aller au delà, la vidéo sera donc ralentie.</​note>​
 +
 +===== Regrouper plusieurs vidéos mp4 en 1 seule =====
 +
 +Il y a une fonction **concat** qui concatène des fichiers en entrée. C’est ce que l’on va utiliser… sauf que cela ne fonctionne pas avec des fichiers MP4 (container MOV, h264 en codec vidéo, et aac en codec audio).
 +
 +=== Préparation ===
 +
 +On va d’abord changer de container pour nos flux source, puis les assembler, car on ne va pas refaire de transcodage,​ juste de la copie de flux. \\
 +La fonction **concat** accepte bien le MPEG Transport Stream, allons y :
 +<code user>​ffmpeg -y -i "​source1.mp4"​ -c copy -bsf:v h264_mp4toannexb -f mpegts "​source1.ts"</​code>​
 +Le -bsf:v h264_mp4toannexb restructure le flux h264 pour qu’il puisse rentrer dans le TS. Il le demande, et ça marche.
 +
 +=== Assemblage ===
 +
 +Une fois que tous les fichiers à assembler sont passés en TS, on les regroupe et les converti en mp4 ainsi :
 +<code user>​ffmpeg -y -i concat:"​source1.ts|source2.ts"​ -c copy -f mov "​destination.mp4"</​code>​
 +
 +<note important>​Si cela ne fonctionne pas, vérifiez que vos fichiers ont bien le même format, codec, résolution… \\
 +À la moindre différence,​ l’assemblage est impossible.</​note>​
 +
 +Source :
 +  * http://​hd3g.tv/​b/​2012/​08/​coller-des-fichiers-mp4-entre-eux-avec-ffmpeg/​
 +
 +=== Utiliser une boucle for ===
 +
 +Si les fichiers à assembler sont nombreux, on peut utiliser une boucle.
 +
 +Rassembler les vidéos afin qu'​elle portent un numéro progressif pour la vidéo finale. \\
 +Créer le répertoire accueillant les MPG, par exemple :
 +<code user>​mkdir ~./​video-mpg</​code>​
 +Y déposer les videos MPG à assembler :
 +<code user>mv /​répertoire_acquis/​*.mpg ~./​video-mpg</​code>​
 +Les numéroter dans l'​ordre où nous souhaitons les assembler. \\
 +Perso, j'​utilise [[doc:​systeme:​gprename|GPRENAME]] qui me rend la vie facile... ;-)
 +
 +Lister le contenu obtenu :
 +<code user>ls ~./​video/</​code>​
 +<code config retour de la commande ls>​0001.mpg 0002.mpg 0003.mpg 0004.mpg 0005.mpg</​code> ​
 +
 +Nous allons d'​abord les convertir chacune en mp4 en utilisant une première fois la boucle for :
 +<code user>cd /​repertoire/​video-mpg</​code>​
 +<code user>for i in {0001..0005};​ do $i -c:v:0 libx264 -preset slow -crf 15 -s 1024x768 -threads 0 -c:a $i.mp4; done</​code>​
 +
 +**Explication :** \\
 +''​for i in {0001..0005};''​
 +
 +Se traduit : la variable ''​i''​ prendra respectivement les chiffres ''​0001''​ ''​0002''​ ''​0003''​ ''​0004''​ ''​0005''​ comme valeur. \\
 +Le point virgule '';''​ indique la fin de cette indication.
 +
 +Ensuite vient :
 +''​do $i -c:v:0 libx264 -preset slow -crf 15 -s 1024x768 -threads 0 -c:a $i.mp4;​done''​
 +
 +**Explication :**
 +
 +Au début : ''​do $i''​ indique qu'il faut considérer chacun des numéros attribués à la variable ''​i''​ précédemment définie. \\
 +Le : '';​done''​ indique la fin de la commande qui est à répéter pour chaque variable ''​$i''​ trouvée.
 +
 +[[doc:​programmation:​shell:​cd|Se placer dans le dossier]] rassemblant les vidéos MPG numérotées :
 +<code user>cd /​repertoire/​video-mpg</​code>​
 +
 +On exécute la commande de conversion en TS :
 +<code user>for i in {0001..0005};​ do ffmpeg -y -i "​$i.mp4"​ -c copy -bsf:v h264_mp4toannexb -f mpegts "​$i.ts";​ done</​code>​
 +
 +Et pour assembler le tout directement en MP4 :
 +<code user>​ffmpeg -y -i concat:"​0001.ts|0002.ts|0003.ts|0004.ts|0005.ts"​ -c copy -f mov "​1.mp4"</​code>​
 +
 +Où la vidéo 1.mp4 est la vidéo finale assemblée.
 +
 +**Alternative :**
 +
 +En utilisant la boucle de nouveau :
 +<code user>​toto="";​ for i in {0001..0005};​ do toto="​$toto$i.ts|";​ done; ffmpeg -y -i concat:"​$toto"​ -c copy -f mov "​1.mp4"</​code>​
 +Merci **kyodev** pour cette astuce ! :-D
 +
 +Source de la boucle :
 +  * [[utilisateurs:​smolski:​tutos:​copies-incrementees]]
 +
 +=== Pense-bête à ska ===
 +
 +^ Commentaire ​ ^ Option |
 +|On peut séparer plusieurs filtres avec une virgule, l'​ordre est important |-vf filtre1,​filtre2,​etc |
 +|Rogner l'​image,​ origine = en haut à gauche |-vf crop=largeurX:​hauteurY:​decalageX:​decalageY |
 +|Mettre à l'​échelle |-1 conserve le ratio et flag peut être '​bicubic'​ : -vf scale=-1:​480:​flags='​lanczos'​ |
 +|Débruitage de vidéo|défaut = 4. Utiliser 2 pour les vidéos faiblement bruitées : -vf hqdn3d=2 |
 +|Désentralaçage (mcdeint et kerndeint sont moins efficaces) |-vf yadif |
 +|Ajustement des couleurs |([mini/​maxi%%|%%défaut]) : -vf mp=eq2=gamma:​contraste:​luminosite:​saturation |[0.1/​10%%|%%1:​-2/​2%%|%%1:​-1/​1%%|%%0:​0/​3%%|%%1] |
 +|Modifie le ratio, le lecteur affichera la vidéo en 16/9 peut importe la définition |-aspect 16:9 |
 +|Change le départ, la fin ou la durée |-ss départ en secondes\\ -t durée en secondes\\ -to fin en secondes |
 +|Désactive les flux audios ou vidéos |-an sans audio\\ -vn sans vidéo |
 +|Audio Opus | bitrate -c:a libopus -b:a 64k |
 +|Audio Vorbis, qualité | -c:a libvorbis | -q:a 0 (~64 kbps)\\ -q:a 2 (~96 kbps\\ -q:a 3 (~112 kbps standard)\\ -q:a 4 (~128 kbps)\\ -q:a 5 (~160 kbps) |
 +|Conversion audio multi-canaux vers stéréo |-ac 2 |
 +
 +Et le lien vers la doc complète de ffmpeg avec toutes les options disponibles pour faire des trucs vraiment spéciaux :
 +  * https://​ffmpeg.org/​ffmpeg-all.html
 +Les conseils pour du x264 sur le wiki ffmpeg :
 +  * https://​trac.ffmpeg.org/​wiki/​Encode/​H.264
 +
 +Pompé du forum df là :
 +  * https://​forum.doom9.org/​showthread.php?​t=143904
 +Merci **ska** ! //Que ton chemin se couvre de pétales de rose...// :-D
  
  
doc/media/ffmpeg.txt · Dernière modification: 22/06/2024 19:25 par vv222

Pied de page des forums

Propulsé par FluxBB