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
doc:media:ffmpeg [02/09/2017 09:57]
smolski [Images Fixes] huffyuv
doc:media:ffmpeg [03/12/2023 17:28] (Version actuelle)
Croutons [Regrouper plusieurs vidéos mp4 en 1 seule]
Ligne 5: Ligne 5:
   * Commentaires : //ffmpeg est une suite de logiciels libres en ligne de commande qui permet de traiter des flux vidéos ou audio. //   * Commentaires : //ffmpeg est une suite de logiciels libres en ligne de commande qui permet de traiter des flux vidéos ou audio. //
   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-)   * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-)
-  * Suivi : {{tag>​à-compléter}}{{tag>​à-tester}}+  * Suivi :​{{tag>​à-placer}}
     * Création par [[user>​Pititux]] le 22-04-2010     * Création par [[user>​Pititux]] le 22-04-2010
     * 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 !))
  
- +{{/​file-R021ef1f149c0db9a48fa309d80a15165.png}}
 ===== Introduction ===== ===== Introduction =====
  
 ffmpeg est une suite de logiciels libres en ligne de commande qui permet de traiter des flux vidéos ou audio. Avec ffmpeg, on peut déclencher des enregistrements,​ comme des lectures, appliquer des corrections à l'aide de filtres, ou transcoder des médias d'un format à un autre. ffmpeg est une suite de logiciels libres en ligne de commande qui permet de traiter des flux vidéos ou audio. Avec ffmpeg, on peut déclencher des enregistrements,​ comme des lectures, appliquer des corrections à l'aide de filtres, ou transcoder des médias d'un format à un autre.
  
-Aujourd'hui, il est préférable d'​utiliser avconv à la place de ffmpeg tout en conservant les mêmes options. \\ +D'autres outils sont disponibles dans ce paquet et possèdent leur page propre:
-Pour ce faire, si ce n'est déjà fait, installer ​: +
-<code root>​apt-get update && apt-get install libav-tools</​code>​ +
- +
-Et lancez vos commandes en remplaçant //ffmpeg// par **avconv**, tout simplement.+
  
 +  * [[:​doc:​media:​ffmpeg:​ffplay | ffplay]] : lecteur multimédia
 +  * [[:​doc:​media:​ffmpeg:​ffprobe | ffprobe]] : analyseur de flux
 ===== 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 ​libavcodec-extra</​code>​
-<code root>apt-get install ffmpeg</​code>​+
 ===== Utilisation ===== ===== Utilisation =====
  
Ligne 33: Ligne 29:
  
 Ou directement en ligne de commande comme on va le détailler ci-dessous. Ou directement en ligne de commande comme on va le détailler ci-dessous.
 +
 +Une documentation est disponible directement dans l'​application,​ ou sur le site officiel : https://​ffmpeg.org/​
 +<code user>​ffmpeg -h</​code>​
  
 ===== Préambule ===== ===== Préambule =====
Ligne 59: Ligne 58:
 </​file>​ </​file>​
 Le D signifie la capacité à le lire, et E la possibilité d'​encapsuler dans le format. Le D signifie la capacité à le lire, et E la possibilité d'​encapsuler dans le format.
 +
 +Il est possible de voir les options du muxer ou demuxer disponibles pour un format spécifique comme par exemple avec //matroka// (.mkv) :
 +<code user>​ffmpeg -h muxer=matroska</​code>​
  
 ==== Les codecs ==== ==== Les codecs ====
Ligne 65: Ligne 67:
 De la même manière que pour les formats, ffmpeg liste les codecs qu'il est capable de gérer: De la même manière que pour les formats, ffmpeg liste les codecs qu'il est capable de gérer:
 <code user>​ffmpeg -codecs</​code>​ <code user>​ffmpeg -codecs</​code>​
 +
 +Il est possible de voir les options disponibles d'un encoder ou décoder pour un codec spécifique comme par exemple //vp9//:
 +<code user>​ffmpeg -h encoder=vp9</​code>​
  
 ==== Les filtres ==== ==== Les filtres ====
Ligne 70: Ligne 75:
 ffmpeg dispose aussi d'une base importante de filtres qui permettent de modifier le contenu de chaque flux, comme changer la résolution,​ modifier le volume d'une piste, incruster un logo etc.... ffmpeg dispose aussi d'une base importante de filtres qui permettent de modifier le contenu de chaque flux, comme changer la résolution,​ modifier le volume d'une piste, incruster un logo etc....
 <code user>​ffmpeg -filters</​code>​ <code user>​ffmpeg -filters</​code>​
 +Il est possible de voir les options disponibles d'un filtre spécifique comme par exemple avec //scale// :
 +<code user>​ffmpeg -h filter=scale</​code>​
 +
 +
  
 ==== Formats + Codecs + filtres ==== ==== Formats + Codecs + filtres ====
Ligne 85: Ligne 94:
 Heureusement le libre fournit plusieurs formats ainsi que plusieurs codecs libre de droit : Heureusement le libre fournit plusieurs formats ainsi que plusieurs codecs libre de droit :
   * Dans les formats citons: mkv, webm, ogv, ogg...   * Dans les formats citons: mkv, webm, ogv, ogg...
-  * Dans les codecs vidéos citons: vp9, vp8, theora(vp3),​ dirac...+  * Dans les codecs vidéos citons: ​AV1,vp9, vp8, theora(vp3),​ dirac...
   * Dans les codecs audio citons: flac, opus, vorbis et bien d'​autres...   * Dans les codecs audio citons: flac, opus, vorbis et bien d'​autres...
  
Ligne 196: Ligne 205:
 Et l'on peut, très bien, faire une conversion dans la foulée : Et l'on peut, très bien, faire une conversion dans la foulée :
 <code user>​ffmpeg -i tears_of_steel.mkv -map 0:2 -acodec libmp3lame -ar 44100 -ac 2 -ab 192k tears_of_steel_BO.mp3</​code>​ <code user>​ffmpeg -i tears_of_steel.mkv -map 0:2 -acodec libmp3lame -ar 44100 -ac 2 -ab 192k tears_of_steel_BO.mp3</​code>​
 +
 +Méthode-2/​plus simple :
 +<code user>​ffmpeg -i video_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3</​code>​
 +Source :
 +[[http://​www.jcartier.net/​FFMpeg-par-l-exemple.html]]
  
 ====Extraire un sous-titre ==== ====Extraire un sous-titre ====
Ligne 210: Ligne 224:
 <code user>​ffmpeg -ss 00:​06:​46 ​ -i tears_of_steel.mkv -c copy -to 00:01:00 tears_of_steel_extrait.mkv</​code>​ <code user>​ffmpeg -ss 00:​06:​46 ​ -i tears_of_steel.mkv -c copy -to 00:01:00 tears_of_steel_extrait.mkv</​code>​
  
 +==== Pour couper un vob ====
 +
 +<code user>​ffmpeg -fflags +genpts -i "​ton_vob.VOB"​ -ss 00:05:00 -t 00:01:00 -map 0:v -map 0:a -c:v copy -c:a copy -y out.VOB</​code>​
 +
 +à partir de:
 +<​code>​-ss 00:​05:​00</​code>​
 +
 +pour une durée de une minute :
 +<​code>​-t 00:​01:​00</​code>​
 +
 +Voir sur le forum :
 +[[https://​debian-facile.org/​viewtopic.php?​pid=366931#​p366931]]
 +
 +Merci aux participants pour cette solution bien pratique. :)
 ===== Augmenter le nombre de threads ===== ===== Augmenter le nombre de threads =====
  
Ligne 220: Ligne 248:
  
 ===== Encoder la vidéo ===== ===== Encoder la vidéo =====
 + La liste des options ffmpeg pour le traitement Video est disponible ici: http://​ffmpeg.org/​ffmpeg.html#​Video-Options
  
 +En voici les principales: ​
 ^ option ​   ^  explication de l'​option ​ | ^ option ​   ^  explication de l'​option ​ |
-|-configuration du débit binaire ​par défaut 200 kbps | +|-définit le nombre d'​images ​par seconde ​|
-|-sameq | copie à l'​identique le débit binaire ​|+
 |-s | configuration de la taille du cadre d'​affichage | |-s | configuration de la taille du cadre d'​affichage |
 |-aspect | configuration du format d'​affichage (4:3, 16:9 ou 1.3333, 1.7777) | |-aspect | configuration du format d'​affichage (4:3, 16:9 ou 1.3333, 1.7777) |
 |-vcodec ou -c:v | décision du choix du codec | |-vcodec ou -c:v | décision du choix du codec |
 |-pass | nombre de passage à l'​encodage,​ une passe (-pass 1) ou deux passes (-pass 2) | |-pass | nombre de passage à l'​encodage,​ une passe (-pass 1) ou deux passes (-pass 2) |
-|-qmin détermine le seuil minimum du débit binaire variable ​(VBR+|-crf permet de définir un niveau de qualité entre 0 et 63 (petit nombre = meilleure qualité mais plus de temps de calcul) (défaut 23)|
-|-qmax | détermine le seuil maximum du débit binaire variable ​(VBR+
-|-f | sélectionne le nom du conteneur | +
-|-r | définit le nombre d'​images par seconde ​|+
  
-==== Encoder en mkv ====+=== CRF (Constant Rate Factor) ​== 
 + 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. Un dessin animé avec des aplats prendra moins de place qu'un match de foot avec des panoramiques sur 80000 spectateurs. L'​échelle crf est logarithmique entre 0 et 63, une différence de 6 points double ou divise par 2 environ la taille du fichier final. 
 +Un petit nombre égal une meilleure qualité mais plus de temps de calcul, la valeur est souvent par défaut 23.
  
-Se placer dans le répertoire VIDEO_TS contenant les fichiers.VOB avec [[doc:​programmation:​shell:​cd|la commande cd]]puis, en utilisant [[doc:​systeme:​cat|la commande cat]]faire la convertion ainsi : +Le choix du CRF dépends du type d'​image à encoderde la résolution de l'​imagede qualité souhaité ou encore de la taille du fichier désiréVous pouvez faire des tests sur des segments avant de procéder à l'encodage total.
-<code user>cat *.VOB |  ffmpeg -i - video.mkv</​code>​ +
- +
-== Note : == +
- +
-Il suffit ​de changer en sortie ​l'extension vidéo mkv en mp2, mp4, etc... pour que la convertion se fasse dans le format vidéo indiqué;-)+
  
 ==== 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 274:
   *-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 298:
   * **-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/​Encode/H.264]]
-  * [[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 TSIl le demande, ​et ça marche.+
  
-=== Assemblage ​===+==== Encoder VOB en MKV ====
  
-Une fois que tous les fichiers à assembler sont passés en TS, on les regroupe et les converti en mp4 ainsi : +  ​https://debian-facile.org/viewtopic.php?id=24453
-<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 317:
 <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 : 
-<code user>​ffmpeg -i film.avi -aspect 16:9 -c copy film2.mkv</​code>​ 
  
 ===== Encoder le son ===== ===== Encoder le son =====
Ligne 389: Ligne 357:
 ==== Transformer une série d’images en vidéo ==== ==== Transformer une série d’images en vidéo ====
  
-<code user>​ffmpeg -f image2 ​-i image%d.jpg video.mpg</​code>​+Dans un répertoire nommé par exemple //images// on rassemble les fichiers JPG que l'on veut assembler en vidéo. \\ 
 +Pour faciliter le processus, ces fichiers doivent être numérotées,​ par exemple : \\ 
 +image1.jpg image2.jpg image3.jpg... 
 +On lance ensuite la commande : 
 +<code user>​ffmpeg -f images ​-i image%d.jpg video.mpg</​code>​
  
-Ce qui transformera les images ​du répertoire ​courant nommées ​image1.jpg, image2.jpg, image3.jpg... en un fichier vidéo nommé video.mpg. \\+Ce qui transformera les images ​contenues dans le répertoire ​images : image1.jpg, image2.jpg, image3.jpg ... en un fichier vidéo nommé video.mpg. \\
 Notons que %d sera automatiquement transformé en 1, 2, 3, 4, 5... Notons que %d sera automatiquement transformé en 1, 2, 3, 4, 5...
  
 Si l’on a des images nommées image001.jpg,​ image002.jpg,​ image003.jpg,​ ... vous utiliserez la commande : Si l’on a des images nommées image001.jpg,​ image002.jpg,​ image003.jpg,​ ... vous utiliserez la commande :
-<code user>​ffmpeg -f image2 ​-i image%03d.jpg video.mpg</​code>​+<code user>​ffmpeg -f images ​-i image%03d.jpg video.mpg</​code>​
  
 Mais on peut aussi utiliser d’autres types de format d’images : PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TGA, TIFF, SGI, PTX Mais on peut aussi utiliser d’autres types de format d’images : PGM, PPM, PAM, PGMYUV, JPEG, GIF, PNG, TGA, TIFF, SGI, PTX
Ligne 404: Ligne 376:
 Ici on spécifie 24 images par seconde et un bitrate de 1800kb/s. Ici on spécifie 24 images par seconde et un bitrate de 1800kb/s.
  
-==== huffyuv ​====+=== huffyuv ===
  
 Transformer une image fixe jpg en video mp4 : Transformer une image fixe jpg en video mp4 :
-ffmpeg -i votre_image.jpg -c:v huffyuv -vcodec libx264 -r 0.07 votre_image.mp4+<code user>ffmpeg -i votre_image.jpg -c:v huffyuv -vcodec libx264 -r 0.07 votre_image.mp4</​code>​
  
 L'​option : L'​option :
 <​code>​-r 0.-r 0.07</​code>​ <​code>​-r 0.-r 0.07</​code>​
  
-Implique ​environ ​12s de durée ​pour la video MP4.+module à environ ​1/15e la vitesse ​de défilement ​pour la video MP4. 
 +Si on augmente, ça accélère, si on diminue, ça ralentit. 
 + 
 +Merci au **captnfab** qui de son vaisseau flambloie les tutos à tour de bras ! LOL
  
 ==== Transformer une vidéo en une série images ==== ==== Transformer une vidéo en une série images ====
Ligne 466: Ligne 441:
  
 <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>​
 +
 +===== cat - Regrouper plusieurs vidéos VOB en mp4 =====
 +
 +  * [[doc:​media:​libdvdcss2 | cat-convertion-en-mp4]]
 +
 +===== 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]]
 +
 +=== Concatener facile ===
 +
 +<​note>​À tester...</​note>​
 +
 +Pour concaténer des mkv avec ffmpeg il faut faire comme suit :
 +Créer un fichier avec le contenu :
 +
 +<code user>​file '​partie1.mkv'​
 +file '​partie2.mkv'</​code>​
 + 
 +Appelons ce fichier « list-mkv.txt ».
 +Alors la commande :
 +
 +<code user>​ffmpeg -f concat -i list-mkv.txt -c copy output.mkv</​code>​
 +
 +Source sur le forum :
 +  * https://​debian-facile.org/​viewtopic.php?​pid=345771#​p345771
 +
 +=== 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 |
 +
 +===== Crop - découpe et recadrage vidéo =====
 +
 +<note important>​Tuto en cours - Commandes en tests à suivre... ;​)</​note>​
 +
 +Les options
 +  * out_w est la largeur du rectangle de sortie
 +  * out_h est la hauteur du rectangle de sortie
 +  * x et y indiquent le coin supérieur gauche du rectangle de sortie
 +
 +=== Exemples ===
 +
 +<code user>​ffmpeg -i in.mp4 -vf "​crop=out_w:​out_h:​x:​y"​ out.mp4</​code>​
 +
 +=== Recadrer en 80x60 ===
 +
 +Original en 320x240
 +
 +Faire un crop de 80×60, depuis la position (200, 100) :
 +<code user>​ffmpeg -i in.mp4 -vf "​crop=80:​60:​200:​100"​ -c:a copy out.mp4</​code>​
 +
 +=== Recadrer le quart inférieur droit ===
 +
 +<code user>​ffmpeg -i in.mp4 -vf "​crop=in_w/​2:​in_h/​2:​in_w/​2:​in_h/​2"​ -c:a copy out.mp4</​code>​
 +Ou bien :
 +<code user>​ffmpeg -i in.mp4 -vf "​crop=240:​120:​240:​120"​ -c:a copy out.mp4</​code>​
 +
 +=== Découpez 20 pixels par le haut et 20 par le bas ===
 +
 +<code user>​ffmpeg -i in.mp4 -vf "​crop=in_w:​in_h-40"​ -c:a copy out.mp4</​code>​
 +<note tip>Le filtre centrera automatiquement le rognage si x et y sont omis.</​note>​
 +
 +=== Prévisualisation ===
 +
 +Vous pouvez réaliser un recadrage (//heh heh heh//) et le prévisualiser en direct avec [[:​doc:​media:​ffmpeg:​ffplay|ffplay]] :
 +<code user>​ffplay -i input -vf "​crop=in_w:​in_h-40"</​code>​
 +
 +De cette façon, vous pouvez expérimenter et ajuster votre recadrage sans avoir besoin d'​encoder,​ de visualiser ni de recommencer.
 +
 +=====Réparer un fichier mp4=====
 +
 +Il peut arriver qu'un pompage sur le net ne soit pas correctement recodé (par ex. on aura un fichier vidéo et un fichier audio non fusionnés).
 +youtube-dl annonce dans ce cas que la «conversion» n'a pas abouti; à mon avis il s'agit d'une fusion et non d'une conversion.
 +
 +ffmpeg est capable de faire cette fusion:
 +
 +<code user>​ffmpeg -i <fichier vidéo> -i <fichier audio> <fichier final>​.mp4</​code>​
 +
  
  
 =====Liens===== =====Liens=====
  
 +  * Forum df - Améliorer la qualité des vidéos : [[https://​debian-facile.org
 +/​viewtopic.php?​pid=244397#​p244397]]
 +  * Forum df - Encoder en haute qualité : https://​debian-facile.org//​viewtopic.php?​pid=329699#​p329699
 +  * Forum df - Conversion video au format DVD PAL : https://​debian-facile.org/​viewtopic.php?​id=32071
   * Site officiel: (en)[[http://​ffmpeg.org/​]]   * Site officiel: (en)[[http://​ffmpeg.org/​]]
   * Documentation ffmpeg: (en)[[http://​trac.ffmpeg.org/​wiki]]   * Documentation ffmpeg: (en)[[http://​trac.ffmpeg.org/​wiki]]
doc/media/ffmpeg.1504339077.txt.gz · Dernière modification: 02/09/2017 09:57 par smolski

Pied de page des forums

Propulsé par FluxBB