Différences
Ci-dessous, les différences entre deux révisions de la page.
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érieures. Si 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 .mp4, etc.;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 son, aprè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×272, avec 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:9 -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 ips, il 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 | | ||
+ | | 3 | 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 simple. Celle-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).// |