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
ffmpeg [Le 10/11/2017, 12:05]
bcag2 restauration du §Effectuer une capture vidéo (screencast) de l'écran
ffmpeg [Le 24/09/2023, 10:36] (Version actuelle)
146.70.196.140 [Utilisation]
Ligne 1: Ligne 1:
-{{tag>Xenial ​audio vidéo encodage montage_vidéo capture_vidéo multimédia}}+{{tag>Focal audio vidéo encodage montage_vidéo capture_vidéo multimédia}}
  
 ---- ----
Ligne 7: Ligne 7:
  
 **FFmpeg** est une application de lecture et encodage de vidéo. Très puissante comme son alter ego [[Mencoder]],​ il assure en [[;​commande_shell|ligne de commande]] la possibilité de convertir les fichiers vidéo d'un format à un autre, dont le **mts** et m2ts. **FFmpeg** est une application de lecture et encodage de vidéo. Très puissante comme son alter ego [[Mencoder]],​ il assure en [[;​commande_shell|ligne de commande]] la possibilité de convertir les fichiers vidéo d'un format à un autre, dont le **mts** et m2ts.
- 
-<​note>​Pour la [[:​versions|version d'​Ubuntu]] [[:​trusty|Trusty 14.04]], **FFmpeg** a été remplacé par son [[wpfr>​fork]] [[:​avconv|avconv]]. **FFmpeg** a cependant été réintégré depuis la version [[:​xenial|Ubuntu  16.04]] si bien que **FFmpeg** et **avconv** sont désormais deux applications à part entière.</​note>​ 
  
 ===== Utilisation graphique ===== ===== Utilisation graphique =====
Ligne 15: Ligne 13:
   * [[http://​ekd.tuxfamily.org/​|EKD]] - EKD est un logiciel libre qui se propose de faire des opérations de post-production aussi bien pour des vidéos, que pour des images. En ce qui concerne les images, EKD fait du traitement par lots.   * [[http://​ekd.tuxfamily.org/​|EKD]] - EKD est un logiciel libre qui se propose de faire des opérations de post-production aussi bien pour des vidéos, que pour des images. En ce qui concerne les images, EKD fait du traitement par lots.
   * [[WinFF]] - Cette application vous permet de choisir parmi une liste de profils un encodage vidéo qui conviendra à vos attentes. Par exemple si vous voulez faire une vidéo compatible Blackberry, il ne vous sera même pas nécessaire de savoir quel est l'​encodage interne utilisé.   * [[WinFF]] - Cette application vous permet de choisir parmi une liste de profils un encodage vidéo qui conviendra à vos attentes. Par exemple si vous voulez faire une vidéo compatible Blackberry, il ne vous sera même pas nécessaire de savoir quel est l'​encodage interne utilisé.
-  * [[:​arista|Arista Transcoder]] ​ - Type WinFF , avec une interface. 
  
 D'​autres interfaces graphiques ont été créées pour répondre à des attentes spécifiques : D'​autres interfaces graphiques ont été créées pour répondre à des attentes spécifiques :
Ligne 25: Ligne 22:
   * [[Cinelerra]] - Application de montage extrêmement puissante, ne convient pas aux débutants et ne propose pas une interface simple d'​utilisation en matière de transcodage. Réservez-la à vos effets spéciaux :-D   * [[Cinelerra]] - Application de montage extrêmement puissante, ne convient pas aux débutants et ne propose pas une interface simple d'​utilisation en matière de transcodage. Réservez-la à vos effets spéciaux :-D
   * [[Kino]] - Application de montage et de transcodage destinée aux débutants.   * [[Kino]] - Application de montage et de transcodage destinée aux débutants.
-  * [[http://​sourceforge.net/​projects/​outreel/​files/​|Outreel]] - Une autre interface graphique pour FFMpeg.+  * [[https://​sourceforge.net/​projects/​outreel/​files/​|Outreel]] - Une autre interface graphique pour FFMpeg.
  
-=====Pré-requis===== 
-  * Disposer des [[:​sudo|droits d'​administration]];​ 
-  * Disposer d'une connexion à Internet configurée et activée. 
  
 ===== Installation ===== ===== Installation =====
  
-==== Via les dépôts officiels==== +[[:​tutoriel:​comment_installer_un_paquet|Installer le paquet]] **[[apt>​ffmpeg]]**
-<note important>​__[[:​trusty|Particularité pour Ubuntu Trusty 14.04]]:​__\\ +
-**FFmpeg** n'est pas disponible dans les [[:​depots|dépôts officiels]] pour [[:​trusty|Trusty 14.04]]. Il est remplacé par son [[wpfr>​fork]] [[:avconv]] (présent dans le paquet **libav-tools**). Si vous souhaitez utiliser **FFmpeg** à la place de [[:avconv]] il est possible de l'​installer [[#Via un PPA pour Trusty 14.04 uniquement|depuis un PPA]]. +
-</​note>​ +
-[[:​tutoriel:​comment_installer_un_paquet|Installer le paquet]] **[[apt>ffmpeg|ffmpeg]]**+
  
-__Note__: \\ FIXME : N'est plus d'​actualité,​ mpeg4 est maintenant pris en charge et la désinstallation des paquets ci-après provoquera la désinstallation des éventuelles applications vidéos utilisant l'​encodeur. \\ <​del>​les packages par défaut ne contiennent pas les codecs les plus classiques comme "​mpeg4",​ pour cela il faut [[:​tutoriel:​comment_installer_un_paquet|installer spécifiquement]] **[[apt>​libavcodec54,​libavdevice53,​libavformat54,​libavutil52,​libpostproc52,​libswscale2,​ffmpeg|libavcodec54 libavdevice53 libavformat54 libavutil52 libpostproc52 libswscale2 ffmpeg]]**</​del>​+===== Utilisation =====
  
-====Via un PPA pour Trusty 14.04 uniquement==== +**Tout ce qui suit parlera de la partie manipulation de fichier Audio Video.**
-<note important>​Les [[:​PPA|dépôts PPA]] sont des [[:​dépôts]] non-officiels et installer un paquet hors des [[:​dépôts]] officiels peut présenter un risque d'​instabilité pour votre système</​note>​+
  
-Pour utiliser **FFmpeg** sous [[:​trusty|Ubuntu Trusty 14.04]] : +Cependant, il est utile de savoir que **ffmpeg** ​intègre par défaut un lecteur minimaliste audio-video **ffplay** utilisable depuis le terminal.
-  - [[:​ppa|Ajoutez le PPA]] **ppa:​mc3man/​trusty-media**((https://​launchpad.net/​~mc3man/​+archive/​ubuntu/​trusty-media)) à vos sources ​de logiciels ; +
-  - [[:​tutoriel:​comment_modifier_sources_maj#​recharger_la_liste_des_paquets|Rechargez la liste de vos paquets]] ; +
-  - [[:​tutoriel:​comment_installer_un_paquet|Installez le paquet]] ​**[[apt>ffmpeg]]**.  +
-  ​:!: __Attention__:​ Le [[:​PPA]] ​**mc3man/​trusty-media** contient de très nombreux autres paquets médias de versions supérieuresSi vous ne souhaitez pas de mise à jour vers des versions supérieures de ses paquets lors de la prochaine mise à jour de votre système, [[:​ppa#​suppression_d_un_ppa|supprimer ce PPA]] de vos sources de logiciels. +
-Ou bien dans un [[:​terminal]],​ saisir les [[:​commande_shell|commandes]] suivantes : <​code>​sudo add-apt-repository ppa:​mc3man/​trusty-media +
-sudo apt-get update +
-sudo apt-get install ffmpeg</​code>​ +
-Puis si vous souhaitez retirer le [[:PPA]] **mc3man/​trusty-media** de vos sources de logiciels: <​code>​sudo add-apt-repository -r ppa:​mc3man/​trusty-media</​code>​+
  
 +Attention, minimaliste ne veut pas dire peu performant.\\
 +Avec toutes les possibilités de ffmpeg vous pouvez aller bien plus loin que n'​importe quel lecteur.\\
 +Seul ressource pour cela ... connaitre les arguments à entrer dans la commande terminal.
  
-À noter que le binaire fourni ​par ce PPA (depuis la version 2.7.8) prend en compte les filtres x265 et fdk_aac (codec AAC de Fraunhofer) +En bref : plus léger, plus simple et plus qualitatif ​par défaut. Par choix, plus tout ce que vous voulez pour aller plus loin.
  
-==== Par compilation ==== 
-<note important>​ 
-Cette méthode permet d'​installer la toute dernière version de FFmpeg, mais celle-ci provenant du serveur [[git|Git]],​ elle est toujours en développement,​ ce qui signifie qu'​elle peut se révéler instable. L'​utilisation de cette version est donc à vos risques et périls.</​note>​ 
  
-Il peut être intéressant de compiler FFmpeg afin de bénéficier des dernières optimisations et de manipuler des formats qui n'​étaient pas encore supportés. Par exemple ​pour les vidéos haute définition encodées avec x264 qui demandent beaucoup moins de ressources dans les dernières versions. (Voir le [[http://​ffmpeg.mplayerhq.hu/​changelog.html|changelog]] de FFmpeg) +**Utilisation ​pour lire UN SEUL fichier Audio ou Video**
-Pour les détails de la compilation,​ rendez-vous à la page : [[tutoriel:​comment_compiler_ffmpeg|Comment compiler FFmpeg]]\\+
  
 +Tapez dans le terminal ce qui suit et appuyez sur la touche "​Entrée"​ du clavier\\
  
-==== FFmpeg et le support AAC ==== +__Pour un fichier video__\\ 
-Référez-vous à la méthode par compilation : [[tutoriel:​comment_compiler_ffmpeg|Comment compiler FFmpeg]]\\ +<​code>​ffplay "​le_chemin_du_fichier_que_je_veux_lire.mkv"​ (ou .mp4etc.;​l'​extension du fichier à lire)</​code>​
-Et voilàla version compilée devrait permettre de compresser vos vidéo pour la  PSP.+
  
-===== Utilisation =====+__Pour un fichier audio__\\ 
 +<​code>​ffplay "​le_chemin_du_fichier_que_je_veux_lire.wav"​ (ou .aac, etc.;​l'​extension du fichier à lire)</​code>​ 
 + 
 +//NB les guillemets sont importants car ils vous éviteront une erreur si le chemin a des espaces ou des caractères spéciaux//​ 
 + 
 +Pour arrêter la lecture appuyer sur "​Echap"​ ou "​q"​\\ 
 +**IMPORTANT** Quitter proprement le terminal en tapant ​ //​exit// ​ une fois pour terminer le processus son, et une autre fois pour fermer le terminal\\ 
 +\\ 
 + 
 +**Utilisation ​pour lire plusieurs fichiers audio ou video CONTENUS __DANS UN SEUL ET MEME REPERTOIRE__**\\ 
 + 
 + 
 +Tapez dans le terminal ce qui suit et appuyez sur la touche "​Entrée" ​ du clavier\\ 
 + 
 +<​code>​cd /​le_chemin_de_votre_repertoire_contenant_les_fichiers_a_lire</​code>​ 
 +puis\\ 
 +<​code>​for f in *.wav ; do ffplay -hide_banner -nodisp -autoexit "​$f";​ done</​code>​ 
 + 
 +// si vous lisez une video supprimez dans la commande ci-dessus l'​option -nodisp qui indique de ne pas afficher la fenêtre du graph audio//\\ 
 +//​-hide_banner bloque l'​affichage des infos sur ffmpeg//​\\ 
 +//-autoexit ferme ffplay quand le fichier est lu//\\ 
 +//(.wav à remplacer par votre format .flac .ogg .mp3 .mp4 .m4a .aac .opus .mkv .webm etc.)// 
 + 
 +Ctrl + C pour passer au morceau suivant\\ 
 +Ctrl + Z pour arrêter\\ 
 +**IMPORTANT** Quitter proprement le terminal en tapant ​ //​exit// ​ une fois pour terminer le processus son, et une autre fois pour fermer le terminal\\ 
 +\\ 
 + 
 +**Utilisation pour lire TOUT LE CONTENU D'UN RÉPERTOIRE contenant PLUSIEURS DOSSIERS avec des fichiers audio** 
 + 
 +<​code>​find /​chemin_du_repertoire/​ma_musique/​ -type f > filelist.txt && while [ 1 ]; do SDL_AUDIODRIVER=alsa AUDIODEV=hw:2,0 ffplay -hide_banner -nodisp -autoexit "`shuf -n 1 filelist.txt`";​ done</​code>​\\ 
 +NB //​SDL_AUDIODRIVER=alsa AUDIODEV=hw:2,0// sert à contourner le mixeur du PC pour envoyer cela directement sur la sortie USB, ici hw:2,0; trouvez la vôtre avec la commande\\ 
 +<​code>​cat /​proc/​asound/​cards</​code>​ 
 +Ctrl + C pour passer au morceau suivant\\ 
 +Ctrl + Z pour arrêter\\ 
 +**IMPORTANT** Quitter proprement le terminal en tapant ​ //​exit// ​ une fois pour terminer le processus son, et une autre fois pour fermer le terminal\\ 
 + 
 +J'​invite les pros de ffmpeg à ajouter une rubrique à la fin de cette page pour les commandes détaillées de ffplay en ce qui concerne les fichiers videos et la sélection directe des langues et sous-titres ainsi que l'​augmentation du format pour supprimer les bandes noires et utiliser tout l'​écran.\\
  
 ==== Commencer sur une bonne base ==== ==== Commencer sur une bonne base ====
Ligne 78: Ligne 95:
  
 Pour identifier le format d'un fichier multimedia (audio et/ou video), tapez : Pour identifier le format d'un fichier multimedia (audio et/ou video), tapez :
-  ffmpeg -i fichier 2>&1 | egrep "​Seems|Input|Duration:​|Stream"​+  ffmpeg -i fichier 2>&1 | grep -E "​Seems|Input|Duration:​|Stream"​
 <​code>​ <​code>​
 Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1) Seems stream 1 codec frame rate differs from container frame rate: 1000.00 (1000/1) -> 25.00 (25/1)
Ligne 218: Ligne 235:
 2 étant le nombre de voies (2 : stéréo, 6 : 5.1, etc ...) 2 étant le nombre de voies (2 : stéréo, 6 : 5.1, etc ...)
  
 +Pour supprimer l'​audio
 +<​code>​-an</​code>​
 ==== Instructions d'​encodage vidéo ==== ==== Instructions d'​encodage vidéo ====
  
Ligne 354: Ligne 373:
  
  
-| qqvga   | qvga    | vga     | svga    | wvga    |  +| qqvga   | qvga    | vga     | svga    | wvga    | 
-| 160x120 | 320x240 | 640x480 | 800x600 | 852x480 | +| 160x120 | 320x240 | 640x480 | 800x600 | 852x480 |
  
 | xga      | uxga      | sxga      | wxga     | wsxga     | wuxga     | qxga      | woxga     | qsxga     | wqsxga ​   | wquxga ​   | | xga      | uxga      | sxga      | wxga     | wsxga     | wuxga     | qxga      | woxga     | qsxga     | wqsxga ​   | wquxga ​   |
Ligne 394: Ligne 413:
  
 ==== Exemples de conversions ==== ==== Exemples de conversions ====
 +
 +=== Convertir un fichier video pour faciliter le partage sur les clouds, réseaux sociaux et messageries ===
 +Cette conversion est utile pour réduire de façon drastique la taille des fichiers en conservant une qualité suffisante pour le regarder sur un téléphone.
 +<​code>​ffmpeg -i FichierSource.MOV -vcodec libx264 FichierResultat.mp4</​code>​
 +Si la source est en HD, vous pouvez réduire la définition pour réduire de façon importante la taille du fichier :
 +<​code>​ffmpeg -i FichierSourceHD.MOV -s wvga -vcodec libx264 FichierResultat.mp4</​code>​
 +(on peut remplacer //wvga// par //hd720//, cf. [[wpfr>​Format_d'​affichage_vidéo]]… ou définir la taille//​x//​×//​y//,​ mais attention de respecter le ratio
  
 === Convertir une vidéo en WebM (VP8+Vorbis) en deux passes === === Convertir une vidéo en WebM (VP8+Vorbis) en deux passes ===
Ligne 402: Ligne 428:
 <​code>​avconv -i '​fichier source'​ -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -an  -pass 1 -passlogfile pass1.fpf pass1.webm <​code>​avconv -i '​fichier source'​ -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -an  -pass 1 -passlogfile pass1.fpf pass1.webm
 avconv -i '​fichier source'​ -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -acodec libvorbis -ab 192k -pass 2 -passlogfile pass1.fpf "​fichier final.webm"</​code>​ avconv -i '​fichier source'​ -threads 0 -vcodec libvpx -b 1500k -minrate 0 -maxrate 9000k -rc_lookahead 16 -keyint_min 0 -g 360 -skip_threshold 0 -level 116 -qmin 1 -qmax 51 -acodec libvorbis -ab 192k -pass 2 -passlogfile pass1.fpf "​fichier final.webm"</​code>​
 +
 +===Convertir un fichier webm en .mp4===
 +Le format [[webm|webm]] est largement utilisé sur internet, en particulier pour youtube. Vous pouvez télécharger ces vidéos de différentes façons, par exemple via [[youtube-dl|youtube-dl]]. Pour voir ces vidéos sur une télévision,​ il vous faudra sans doute modifier le format (il n'est généralement pas reconnu). Pour passer la vidéo webm en .mp4 :
 +
 +<​code>​ffmpeg -i ma-video.webm ma-video.mp4</​code>​
 +La qualité de sortie est alors en qualité moyenne.
 +
 +Vous pouvez spécifier une autre qualité de sortie avec l'​option **-crf**. "​0"​ donne la meilleur qualité (et le plus gros fichier), "​51"​ donne la moins bonne qualité (et le plus petit fichier). Pour une qualité maximum (mais le fichier peut-être 10 fois plus gros que le webm initial !) :
 +
 +<​code>​ffmpeg -i ma-video.webm -crf 0 ma-video.mp4</​code>​
  
 === Convertir une vidéo en x264 en qualité constante === === Convertir une vidéo en x264 en qualité constante ===
Ligne 410: Ligne 446:
 === Convertir le format FLV en AVI === === Convertir le format FLV en AVI ===
  
-Cette conversion est utile si vous téléchargez des vidéos en streaming (YouTube, Google Video, etc.).+Cette conversion est utile si vous téléchargez des vidéos en streaming (YouTube, Google Video, framatube.org !-), etc.).
 <​code>​ffmpeg -i nom_du_fichier.flv -f avi nom_du_fichier.avi</​code>​ <​code>​ffmpeg -i nom_du_fichier.flv -f avi nom_du_fichier.avi</​code>​
 +
 +Si vous voulez télécharger une vidéo depuis Youtube ou d'​autres sites, voir aussi : [[:​telecharger_streaming]]
  
 === Convertir le format AVI en MPEG === === Convertir le format AVI en MPEG ===
Ligne 433: Ligne 471:
  
 Ce script permet d'​automatiser la conversion de vidéos de plusieurs formats ( Mpeg4, Avi, Flv etc... ) vers le format MP3. Ce script permet d'​automatiser la conversion de vidéos de plusieurs formats ( Mpeg4, Avi, Flv etc... ) vers le format MP3.
-Plusieurs formats de vidéos peuvent se trouver dans le même dossier au moment de la conversion. ​+Plusieurs formats de vidéos peuvent se trouver dans le même dossier au moment de la conversion. 
 +<file bash videos_to_mp3_converter.sh>​ 
 +#!/bin/bash
  
-<​code>​ #!/bin/bash +echo videos to mp3 converter!
-#Fichier "​Conversion Script " ​+
  
-echo "Création de la liste de fichiers..."​ +VIDEO_DIR="$HOME/Vidéos" # mettez ​le chemin vers votre dossier ​de vidéos 
-cd CHEMIN_VERS_LES_VIDEOS ( par exemple ~/Downloads ou ~/Videos ) +MUSIQUE_DIR="$HOME/Musique" # mettez ​le chemin vers votre dossier ​de musiques/sons
-ls *.* > to_convert +
-echo "​Préparation de ffmpeg..."​ +
-while read line   +
-do +
- echo "​Traitement de $line programmé"​ +
-done < to_convert +
-#On s'​assure que chaque vidéo a été détectée +
-while read line +
-do +
- sed -i -e "s/(//g" ​to_convert +
- sed -i -e "​s/​)//​g"​ to_convert  +
- sed -i -e "​s/​\[//​g"​ to_convert  +
- sed -i -e "​s/​\]//​g"​ to_convert  +
- sed -i -e "s/\ /\./g" to_convert +
-done < to_convert +
-#Ceci permet de contourner ​le problème posé par d'​éventuels caractères spéciaux dans le titre de la vidéo traitée ( tels que "​[","​]","​(","​)"​ ou " ") +
-echo "​_______________________________________________"​ +
-while read line +
-do +
- rename=`echo ${line%%.*}` +
- original=`ls CHEMIN_VERS_LES_VIDEOS| grep $rename` +
- mv CHEMIN_VERS_LES_VIDEOS/​"$original"​ CHEMIN_VERS_LES_VIDEOS/"$line"​ +
- echo "$line loaded"​ +
-done < to_convert +
-echo "​______________________________________________"​ +
-echo "La conversion a démarré : " +
-while read line  +
-do +
- sdot=`echo ${line%.*}` +
- echo "​CONVERSION EN COURS :[ $line ]" +
- ffmpeg -ab 192k -i `echo "​$line"​` `echo "​$sdot.mp3"​` 1>​.ffmpeg_last_log 2>/​dev/​null +
-        ​#Le fichier log de la conversion seront stockés dans le dossier ​courant sous le nom "​.ffmpeg_last_log"​ +
- mv $line /​RÉPERTOIRE OU SERONT STOCKÉES LES VIDÉOS SI ON SOUHAITE LES CONSERVER ( COMMENTER POUR ENLEVER ) +
- mv "​$sdot.mp3"​ /​RÉPERTOIRE OU SERA DÉPLACÉ LE FICHIER *.MP3 GÉNÉRÉ ( COMMENTER POUR ENLEVER ) +
- echo "→ OK !" +
-done < to_convert +
-rm to_convert +
-</code>+
  
-==== Effectuer une capture vidéo (screencast) de l'​écran ====+cd "​$VIDEO_DIR"​ || exit 1
  
 +for FILE in *.*; do
 + if file --mime-type "​$FILE"​ | grep -qF video; then
 + echo -e "​Processing file '​$FILE'"​
 + ffmpeg -i "​${FILE}"​ -vn -ab 128k -ar 44100 -y "​$MUSIQUE_DIR""/""​${FILE%.*}.mp3"​ 2> /dev/null
 + fi
 +done
 +</​file>​
 +
 +=== Convertir tous les fichiers Windows Media Audio ( WMA ) en mp3  ===
 +
 +Dans un dossier contenant des fichiers au format wma.
 +La boucle for lance la conversion des fichiers.
 +Il suffira de supprimer les fichier wma une fois la conversion terminée.
 +
 +<​code>​for i in *.wma; do ffmpeg -i "​$i"​ -ab 256k "​${i%wma}.mp3";​ done</​code>​
 +
 +=== Convertir le format AVI en MP4 (PSP) ===
 +
 +Cette conversion est utile pour lire vos vidéos sur une console portable [[PSP]]. En ligne de commande, tapez :
 +
 +<​code>​ffmpeg -i video.avi -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 480x160 m4v00001.mp4 </​code>​
 +
 +Attention, si vous générez plusieurs fichiers vidéos, ceux-ci doivent avoir un nommage particulier pour pouvoir être lus sur votre console (m4v00001.mp4,​ m4v00002.mp4,​ m4v00003.mp4,​ et ainsi de suite).
 +
 +Si vous encodez une vidéo qui est au format 4/3, choisissez une taille de 320×240 pour conserver les proportions.
 +
 +Pour avoir une bonne qualité avec une résolution 480×272, avec un débit de 768 kbps, //​firmware//​ conseillé 3.71 ou supérieur :
 +<​code>​ffmpeg -i video_en_entrée.avi -r 29.97 -vcodec h264 -s 640x480 -aspect 16:9 -flags +loop -cmp +chrom</​code>​
 +
 +=== Convertir un mkv en gif animé ===
 +
 +<​code>​ffmpeg -i input.mkv -pix_fmt rgb24 -r 10 -s 320x240 output.gif</​code>​
 +
 +Résumé des options
 +
 +-pix_fmt rgb24 pour '​encoder'​ le gif.
 +
 +-r 10 pour avoir 10 images par seconde.
 +
 +-s 320x240 pour avoir une résolution de sortie de 320x240.
 +
 +Vous pouvez également choisir de découper une portion de vidéo avec les options -ss et -t.
 +Par exemple :
 +<​code>​ffmpeg -i input.mkv -ss 00:01:00.00 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.00 output.gif</​code>​
 +Permet de convertir 10 secondes de vidéo à partir de 1 minute.
 +
 +=== Réaliser une rotation d'une vidéo ===
 +Une vidéo pourtant prise en "​paysage"​ se visualisait en mode "​portrait"​. Pour réaliser la rotation, on utilise l'​option //​filtergraph//​ (-vf) avec //​transpose//​.\\
 +Le chiffre passé avec transpose correspond à:
 +^chiffre ^ filtrage appliqué ^ désignation en anglais ^
 +|0|-90° (sens anti-horaire) puis symétrie verticale (par défaut)|90CounterClockwise and Vertical Flip (default)|
 +|1|90° (sens horaire) |90Clockwise|
 +|2|-90° (sens anti-horaire)|90CounterCLockwise|
 +|3|90° (sens horaire) puis symétrie verticale|90Clockwise and Vertical Flip (default)|
 +Voici la  commande pour -90°:
 +<​code>​ffmpeg -i vidéo_originale.mp4 -vf "​transpose=2"​ vidéo_correctement_orienté.mp4</​code>​
 +du fait du  codec audio utilisé, //aac//, une erreur est survenu en précisant d'​ajouter //-strict -2//, ce qui donne:
 +<​code>​ffmpeg -i vidéo_originale.mp4 -strict -2 -vf "​transpose=2"​ vidéo_correctement_orienté.mp4</​code>​
 +
 +==== Effectuer une capture vidéo (screencast) de l'​écran ====
 Après avoir exécuté cette commande, appuyez sur q pour arrêter la capture. Après avoir exécuté cette commande, appuyez sur q pour arrêter la capture.
  
Ligne 486: Ligne 547:
 //-f// force la capture de l'​écran (//​x11grab//​)\\ //-f// force la capture de l'​écran (//​x11grab//​)\\
 //-s// définit la [[wpfr>​Format_d'​affichage_vidéo|taille de la capture]], doit être inférieur ou égale à la taille réelle d'​affichage!\\ //-s// définit la [[wpfr>​Format_d'​affichage_vidéo|taille de la capture]], doit être inférieur ou égale à la taille réelle d'​affichage!\\
-//-r// définit le nombre d'​images ​pas seconde : 12.5, 25, 30 sont les plus courants, pour un //​screencast//​ de tutoriel, on peut descendre à 5, mais du fait de la compression,​ l'​économie sur la taille mémoire n'est pas proportionnel.\\+//-r// définit le nombre d'​images ​par seconde : 12.5, 25, 30 sont les plus courants, pour un //​screencast//​ de tutoriel, on peut descendre à 5, mais du fait de la compression,​ l'​économie sur la taille mémoire n'est pas proportionnel.\\
 //-i:0:0// correspond au nombre du serveur X11, [[http://​ffmpeg.org/​ffmpeg.html#​X11-grabbing|peut permettre de définir un offset]] auquel cas, il faut réduire la taille d'​autant avec l'​option -s\\ //-i:0:0// correspond au nombre du serveur X11, [[http://​ffmpeg.org/​ffmpeg.html#​X11-grabbing|peut permettre de définir un offset]] auquel cas, il faut réduire la taille d'​autant avec l'​option -s\\
-<note warning>​Si une autre session est active (ou l'a été) il se peut que ça ne fonctionne pas avec -i:​0:​0</​note>​+<note warning>​Si une autre session est active (ou l'a été) il se peut que ça ne fonctionne pas avec -i:0:0, en effet, le premier nombre correspond au numéro de session qui s'​affiche entre parenthèse dans ce que retourne la commande //who// et qui correspond à l'​ordre d'​ouverture de session (:0 pour le premier connecté, :1 pour le deuxième …). Si c'est le cas, vous pouvez utiliser la commande ci-dessous qui ajuste le numéro de session: 
 +<​code>​ffmpeg -f x11grab -s 1920x1080 -r 25 -i $(who | awk '​{print substr($5,​2,​2)}'​).0 screencast.mp4</​code>​</​note>​
 Pour une capture d'​écran Hi-Fi, **son et vidéo** sans perte, avec **Pulse Audio** comme serveur de son : Pour une capture d'​écran Hi-Fi, **son et vidéo** sans perte, avec **Pulse Audio** comme serveur de son :
 <​code>​ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 25 -s 1024x768 -i :0.0 -acodec flac -vcodec libx264 -preset ultrafast -qn 0 output.mkv <​code>​ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 25 -s 1024x768 -i :0.0 -acodec flac -vcodec libx264 -preset ultrafast -qn 0 output.mkv
 </​code>​ </​code>​
  
-==== Utilisations spécifiques ====+**NB1** vous pouvez changer ​ flac  par  aac  ou  ac3  ou  mp3  etc. Testez car selon votre PC cela joue sur la qualité et fluidité globales lors de la restitution.
  
-=== Convertir le format AVI en MP4 (PSP) ===+**NB2** pour la même raison que NB1 vous pouvez aussi changer l'​extension ​ .mkv  du fichier ​en  ​.mp4 ​ .avi   etc.. Une fois de plus, testez et voyez.
  
-Cette conversion est utile pour lire vos vidéos sur une console portable [[PSP]]. En ligne de commande, tapez :+**PROBLEME DE CAPTURE ECRAN SANS L'​AUDIO**
  
-<​code>​ffmpeg -i video.avi -f psp -r 29.97 -b 768k -ar 24000 -ab 64k -s 480x160 m4v00001.mp4 </​code>​+Dans le terminal lancez la commande ​   alsamixer
  
-Attention, si vous générez plusieurs fichiers vidéos, ceux-ci doivent avoir un nommage particulier pour pouvoir être lus sur votre console (m4v00001.mp4,​ m4v00002.mp4,​ m4v00003.mp4, ​et ainsi de suite).+Appuyez ​sur  ​F6  ​et choisissez ​ default ​ (normalement c'est la première ligne)
  
-Si vous encodez ​une vidéo qui est au format 4/3, choisissez ​une taille ​de 320×240 ​pour conserver les proportions.+Si vous utilisez ​une carte sonaprès avoir fait F6 choisissez ​là afin de vérifier-ajuster le volume à son maximum. 
 +Ensuite ​ esc  et retapez dans le terminal ​ alsamixer puis F6 pour choisir la valeur ​ default ​ puis  esc
  
-Pour avoir une bonne qualité avec une résolution 480×272avec un débit ​de 768 kbps, //firmware// conseillé ​3.71 ou supérieur ​+Ensuite toujours dans le terminal tapez  pavucontrol 
-<​code>​ffmpeg -i video_en_entrée.avi -r 29.97 -vcodec h264 -s 640x480 ​-aspect 16:-flags +loop -cmp +chrom</​code>​+Vérifiez que vous avez bien choisi la source de sortie que vous utilisez habituellement,​ déconnectez toutes les autres, micro inclus puis allez à l'​onglet ​ gestion des entrée. Vérifiez qu'il affiche un élément actif pour la source d'​entrée retenue avec le volume à 100. Si non, activez le en cliquant sur l'​icone d'un haut-parleur (en haut à droite juste au-dessus de la ligne concernée) et ajustez si besoin le volume à 100. 
 + 
 +ENFIN, redémarrez votre PC car j'ai relevé que sur certains PC tout devenait fonctionnel après un redémarrage (???). Ne me demandez pas pourquoi je ne suis pas un expert hardware-software bas/​moyen-niveau donc je n'​aurai aucune réponse à vous donner. 
 + 
 + 
 +==== Pour créer ​une vidéo à partir de photos ==== 
 +À partir des images //​img001.png,​ img002.png, img003.png//:​\\ 
 +FIXME (le code ci-dessous ne fonctionne pas sous [[:​Jammy]] 
 +<​code>​ 
 +ffmpeg -framerate 24 -i img%03d.png output.mp4 
 +</​code>​ 
 +[[https://​trac.ffmpeg.org/​wiki/​Slideshow|Explication pour créer ​une vidéo à partir de photo (animation) (en)]]\\ 
 +Alternative ((src (en) : https://​stackoverflow.com/​a/​37478183/​6614155)) : 
 +<code bash> 
 +ffmpeg -framerate 1 -pattern_type glob -i '​img*.png'​ -c:v libx264 -pix_fmt yuv420p output.mp4 
 +</​code>​ 
 +<note important>​le //​framerate//​ est le nombre d'​images pas seconde en entrée (ips)… si vous avez 24 images et définissez 24… vous n'​aurez qu'une seconde de vidéo et n'​aurez pas le temps de voir les images si elles sont très différentes. Pour 10 secondes de vidéo à 24 ipsil faut donc 240 images ! Il est possible d'​avoir ​un //​framerate//​ sur les images fournies en entrée et un //fps// en sortie différent, ffmpeg laissera la même image plusieurs fois ou au contraire en enlèvera ((https://​trac.ffmpeg.org/​wiki/​Slideshow#​Framerates))</​note>​ 
 + 
 +==== Découper une vidéo ==== 
 +Découper la vidéo entre la 24ème minute et la 50ème plus 14 secondes (-c:v copy -c:a copy permettent ​de conserver le même encodeur vidéo et audio) 
 +<​code>​ 
 +ffmpeg -i fichieradecouper.avi -ss 00:24:00.00 -to 00:50:14.00 -c:v copy -c:a copy  extrait.avi 
 +</​code>​ 
 + 
 +Extraire une séquence de 12 mn 18.25 secondes à partir de la 18ème minute 
 +<​code>​ 
 +ffmpeg -i fichieradecouper.avi -ss 00:18:00.00 -t 00:12:18.25 -c:v copy -c:a copy  extrait.avi 
 +</​code>​ 
 + 
 +<note tip>​Insérer les balises de temps -ss-to et -t avant -i permet d'​éviter de ré-encoder les parties du fichier qui ne sont pas utilisées : 
 +<​code>​ 
 +ffmpeg -ss 00:8:00.00 -t 00:12:18.25 -i fichieradecouper.avi -c:v copy -c:a copy  extrait.avi 
 +</code> 
 +</note> 
 +<note tip>​L'​utilisation de -c:v copy et -c:a copy permet une découpe très rapide car il n'y a pas de ré-encodage du fichier. Cependant la découpe est moins précise car calée sur l'​image clé la plus proche de la borne de temps définie par l'​utilisateur. L'​utilisation de la syntaxe suivante permet une découpe plus précise mais prend davantage de temps car il y a ré-encodage de la séquence extraite : 
 +<​code>​ 
 +ffmpeg -ss 00:18:00.00 -t 00:12:18.25 -i fichieradecouper.mp4 fichierdecoupe.mp4 
 +</code><​/note> 
 + 
 +==== Pivoter une vidéo ==== 
 +Utile par exemple pour redresser une vidéo réalisée avec un téléphone mobile tourné dans le mauvais sens 
 +<​code>​ 
 +ffmpeg -i VideoInitiale.MOV -vf "​transpose=1"​ VideoRedressee.MOV 
 +</​code>​ 
 +L'​option transpose supporte plusieurs paramètres selon la transformation à réaliser : 
 +| Option | Effet | 
 +| 0 | Rotation à 90° sens des aiguilles d'une montre et miroir vertical (défaut) | 
 +| 1 | Rotation à 90° sens des aiguilles d'une montre | 
 +| 2 | Rotation à 90° sens inverse des aiguilles d'une montre | 
 +| Rotation à 90° sens inverse des aiguilles d'une montre et miroir vertical (défaut) | 
 + 
 +==== Concaténer plusieurs vidéos ==== 
 +Abouter (enfiler plusieurs vidéos successivement en une seule plus longue) plusieurs vidéos n'est pas l'​opération la plus simpleCelle-ci dépend de la nature des fichiers à concaténer. 
 + 
 +=== Concaténation simple === 
 +Quelques rares formats ("file level"​) acceptent la concaténation simple : MPEG-1, MPEG-2 PS, DV. Dans ce cas l'​opération reste assez simple à réaliser. 
 +<​code>​ 
 +cat fichier1.mpg fichier2.mpg > Fichier_concatene.mpg 
 +</​code>​ 
 +ou 
 +<​code>​ 
 +ffmpeg -i concat:"​fichier1.mpg|fichier2.mpg"​ -c copy Fichier_concatene.mpg 
 +</code> 
 +<note tip>Si la qualité des fichiers s'y prête, il peut être plus simple de convertir les fichiers à concaténer en mpg, de réaliser la concaténation en mpg puis de ré-encoder le fichier concaténé dans votre format de prédilection.</​note>​ 
 + 
 +=== Avec concat === 
 +Le filtre concat opère sur des segments synchrones de flux vidéo et audio. Tous les segments doivent avoir le même nombre de flux, qui sera également celui du fichier concaténé. 
 +Options du filtre : 
 +| Option | Usage | Valeur par défaut | 
 +| n | Nombre de segments à concaténer | 2 | 
 +| v | Nombre de flux vidéo (identique dans les sources et la destination) | 1 | 
 +| a | Nombre de flux audio (identique dans les sources et la destination) | 0 | 
 +| unsafe | Prévient l'​échec de l'​opération si les sources ne possèdent pas le même nombre de flux | désactivé | 
 + 
 +Concaténer une ouverture, un milieu et une fin avec 2 pistes son 
 +<​code>​ 
 +ffmpeg -i ouverture.avi -i milieu.avi -i fin.avi ​-filter_complex '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2] concat=n=3:​v=1:​a=2 [v] [a1] [a2]' -map '​[v]'​ -map '​[a1]'​ -map '​[a2]'​ fichierfinal.avi 
 +</​code>​ 
 + 
 +=== Autres cas et cas complexes === 
 +Voir la documentation (en anglais), notamment [[https://​ffmpeg.org/​faq.html#​How-can-I-concatenate-video-files_003f|3.14]],​ [[https://​ffmpeg.org/​ffmpeg-filters.html#​concat|15.8]] et [[https://​ffmpeg.org/​ffmpeg-formats.html#​concat|3.4]] 
 + 
 +==== Méta-données ==== 
 +On peut visualiser quelques méta-données en exécutant : 
 +<code bash>​ffmpeg -i ma_vidéo.AVI</​code>​ 
 +qui va nous retourner l'​appareil qui a créé la vidéo, la date de création, la durée, et des infos sur l'​encodage de la vidéo et de la bande son.\\ 
 +Pour les méta-données,​ on peut aussi utiliser [[:​exiftool]] 
 + 
 +==== Ajouter une piste son ainsi que des sous-titres ==== 
 +Dans cet exemple : 
 +  * on va ajouter une deuxième piste son (française) au fichier video.mp4 qui en possède déjà une (anglaise) 
 +  * on va ajouter des sous-titres dans chacune des deux langues 
 +  * on va ajouter une image de couverture image.jpg 
 +  * on va mettre à jour des métadonnées 
 +<code bash>​ffmpeg -i video.mp4 -i son_francais.aac -i st_ang.srt -i st_fr.srt -i image.jpg -map 0 -map 1 -map 2 -map 3 -map 4 -c copy -metadata comment="​Paris brûle-t-il (1966) doublé 1080p x265" -metadata:s:a:0 title="​Anglais (English)" ​-metadata:​s:​a:0 language=eng ​-metadata:​s:​a:​1 title="​Français (French)" ​-metadata:​s:​a:​1 language=fra -metadata:​s:​v:​0 title="​Vidéo"​ -c:s mov_text -metadata:​s:​s:​0 language=eng -metadata:​s:​s:​1 language=fra output.mp4 
 +</​code>​ 
 +<note tip> ​ * -map 0 -map 1 -map 2 -map 3 -map 5 : applique le traitement aux 5 fichiers d'​entrée définis avec -i 
 +  * -c copy : copie sans réencoder 
 +  * -metadata comment="​Ceci est un commentaire 1080p x265" : modifie la métadonnée commentaire du fichier 
 +  * -metadata title="​Le titre de la vidéo"​ : modifie la métadonnée titre du fichier (en général s'​affiche au lancement) 
 +  * -metadata:​s:​a:​0 title="​Anglais (English)"​ : titre du premier flux (stream) audio (au cas d'​espèces déjà dans le fichier) 
 +  * -metadata:​s:​a:​0 language=eng : langue du premier flux audio (anglais) 
 +  * -metadata:​s:​a:​1 title="​Français (French)"​ : titre du deuxième flux audio (son_francais.aac) 
 +  * -metadata:​s:​a:​1 language=fra : langue du deuxième flux audio (français) 
 +  * -metadata:​s:​v:​0 title="​Vidéo"​ : titre du premier flux vidéo 
 +  * -c:s mov_text : convertit les fichiers srt en sous-titres mov_text pour mp4 
 +  * -metadata:​s:​s:​0 language=eng : métadonnée langue (anglais) du premier fichier de sous-titres (st_ang.srt) 
 +  * -metadata:​s:​s:​1 language=fra : métadonnée langue (français) du deuxième fichier de sous-titres (st_fr.srt) 
 +  * output.mp4 : fichier de sortie 
 +</​note>​ 
 +==== Pour consulter le manuel de FFmpeg ==== 
 + 
 +<​code>​man ffmpeg</​code>​ 
 + 
 +Pour une synthèse des options 
 +<​code>​ffmpeg -help long</​code>​ 
 + 
 +===== Pour en savoir plus sur Internet ===== 
 +  * ''​**(en)**''​ [[http://​ffmpeg.org/​|Site officiel]]  
 +  * ''​**(fr)**''​ [[http://​www.jcartier.net/​spip.php?​article36|Exemples d'​usages]] 
 +  * ''​**(fr)**''​ [[http://​www.korben.info/​ffmpeg-pour-les-nuls.html|FFMPEG pour les nuls]] 
 + 
 + ----
  
 +//​Contributeurs principaux : loup_74, ElGeneralMidi,​ [[utilisateurs:​Wido]],​ [[utilisateurs:​laurentb|Laurent Bellegarde]],​ Isamaya (pour l'​extraction des flux audio et vidéo).//
  • ffmpeg.1510311914.txt.gz
  • Dernière modification: Le 10/11/2017, 12:05
  • par bcag2