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
ressource:logiciel:ffmpeg:start [2023/06/15 10:54]
emoc [Petits trucs pratiques]
ressource:logiciel:ffmpeg:start [2024/07/23 17:04] (Version actuelle)
emoc [Conversion]
Ligne 97: Ligne 97:
 </​code>​ </​code>​
  
 +==== Extraire les 20 premières secondes de chaque morceau d'un dossier de mp3 ====
 +
 +<code bash>
 +#!/bin/bash
 +# ffmpeg 3.2.5-1 debian 9.1 stretch @ urzhiata / 20180807 ​
 +for i in *.mp3
 +do
 +  ffmpeg -i "​$i"​ -t 10 -vn -acodec pcm_s16le -sample_fmt s16 -ar 44.1k -ac 1 mod_"​$i"​.wav
 +done
 +</​code>​
 ===== Petits trucs pratiques ===== ===== Petits trucs pratiques =====
 +
 +==== Conversion / encodage ====
  
 **Convertir des fichiers realmedia (.rm) en mp3** \\ **Convertir des fichiers realmedia (.rm) en mp3** \\
Ligne 106: Ligne 118:
 **Convertir des fichiers audio en wav mono 16 bits et avec une fréquence d’échantillonnage de 16000 Hz** **Convertir des fichiers audio en wav mono 16 bits et avec une fréquence d’échantillonnage de 16000 Hz**
   $ ffmpeg -i in.mp3 -acodec pcm_s16le -ac 1 -ar 16000 out.wav   $ ffmpeg -i in.mp3 -acodec pcm_s16le -ac 1 -ar 16000 out.wav
 +
 +**Réencoder en changeant les dimensions**
 +  # testé 14 juin 2023 / ffmpeg version 3.2.18-0+deb9u1
 +  ffmpeg -i video.mp4 -vf scale="​360:​360"​ -c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p output.mp4
 +==== Assemblage / montage ====
  
 **Concaténer plusieurs fichiers son en un seul** **Concaténer plusieurs fichiers son en un seul**
   $ ffmpeg -f concat -safe 0 -i <(for f in ./*.wav; do echo "file '​$PWD/​$f'";​ done) -c copy out.wav   $ ffmpeg -f concat -safe 0 -i <(for f in ./*.wav; do echo "file '​$PWD/​$f'";​ done) -c copy out.wav
 +  ​
 +**Vidéo à partir d'une image fixe (sans son)**
 +  ffmpeg -loop 1 -i image.png -c:v libx264 -t 10 -pix_fmt yuv420p -vf scale=768:​768 video.mp4
  
 **Vidéo à partir d'une image fixe et d'un son, la vidéo fait la durée du son** **Vidéo à partir d'une image fixe et d'un son, la vidéo fait la durée du son**
   ffmpeg -loop 1 -r 30 -i 5054.png -i 5054.wav -c:v libx264 -tune stillimage -c:a aac -b:a 250k -shortest 5054.mp4   ffmpeg -loop 1 -r 30 -i 5054.png -i 5054.wav -c:v libx264 -tune stillimage -c:a aac -b:a 250k -shortest 5054.mp4
  
-**Enregistrer une video du bureau (sur Debian)** 
-  # ffmpeg 3.2.12-1 / debian 9.5 @ kirin / 20181203 
-  ffmpeg -video_size 1600x900 -framerate 10 -f x11grab -i :0.0+0,0 output.mp4 
-options : https://​trac.ffmpeg.org/​wiki/​Capture/​Desktop ​ 
- 
-**Extraction d'un son depuis une vidéo en mp3** 
-  # ffmpeg 3.2.12-1 / debian 9.5 stretch @ kirin / 20190327 
-  ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 320k -f mp3 audio.mp3 
  
-**Extraction d'un son depuis un VOB en .wav 16bits** 
-  # ffmpeg 3.2.5-1 / debian 9.1 @ urzhiata / 20180415 
-  ffmpeg -i ./​VTS_01_1.VOB -vn -acodec pcm_s16le -sample_fmt s16 -ar 44.1k -ac 2 ./son.wav 
-  ​ 
-**Extraction d'​images de film toutes les x secondes** 
-  # ffmpeg 3.2.5-1 / debian 9.1 @ urzhiata / 20180831 
-  ffmpeg -i film.avi -r 1 -f image2 "​image-du-film-%4d"​ 
- 
-**Extraction de toutes les images d'une vidéo** 
-  # testé 1( juin 2023 / ffmpeg version 3.2.18-0+deb9u1 
-  ffmpeg -i video.mp4 images_%04d.png 
-  ​ 
 **Vidéo à partir d'une image fixe et d'un son, pour publication en post instagram** ([[https://​ffmpegfromzerotohero.com/​blog/​ffmpeg-instagram-best-practices/​|source]]) **Vidéo à partir d'une image fixe et d'un son, pour publication en post instagram** ([[https://​ffmpegfromzerotohero.com/​blog/​ffmpeg-instagram-best-practices/​|source]])
   # testé 21 fev 2023 / ffmpeg version 3.2.18-0+deb9u1   # testé 21 fev 2023 / ffmpeg version 3.2.18-0+deb9u1
   ffmpeg -loop 1 -i image.png -i son.wav -map 0:v -map 1:a -r 25 -c:v h264 -tune stillimage -crf 18 -c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p -max_muxing_queue_size 1024 -shortest video.mp4   ffmpeg -loop 1 -i image.png -i son.wav -map 0:v -map 1:a -r 25 -c:v h264 -tune stillimage -crf 18 -c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p -max_muxing_queue_size 1024 -shortest video.mp4
  
--loop 1 : joue le flux vidéo en boucle, ici une image qui se répète indéfiniment (mais sera adaptée à la longueur du son, voir plus bas -shortest) +-loop 1 : joue le flux vidéo en boucle, ici une image qui se répète indéfiniment (mais sera adaptée à la longueur du son, voir plus bas -shortest) ​\\ 
- +-map 0:v -map 1:a: comment les entrées sont mappées sur les flux de sortie, ici le flux 0 sera utilisé pour la vidéo principale et le flux 1 pour le son principal ​\\ 
--map 0:v -map 1:a: comment les entrées sont mappées sur les flux de sortie, ici le flux 0 sera utilisé pour la vidéo principale et le flux 1 pour le son principal +-r 25: 25 images par seconde\\ 
- +-c:v h264 -tune stillimage -crf 18: encodage h264 basique, avec réglage optionnel pour image fixe \\ 
--r 25: 25 images par seconde +-c:a aac -b:a 128k -ac 2 -ar 44100: encodage audio selon les recommandations d'​instagram : format AAC, 128Kbps, stereo, 44.100 kHz. \\ 
- +-pix_fmt yuv420p: encodage colorimétrique,​ cf. https://​en.wikipedia.org/​wiki/​YUV ​\\ 
--c:v h264 -tune stillimage -crf 18: encodage h264 basique, avec réglage optionnel pour image fixe +-max_muxing_queue_size 1024: instruction magique pour repousser le mauvais sort et les bugs \\
- +
--c:a aac -b:a 128k -ac 2 -ar 44100: encodage audio selon les recommandations d'​instagram : format AAC, 128Kbps, stereo, 44.100 kHz.  +
- +
--pix_fmt yuv420p: encodage colorimétrique,​ cf. https://​en.wikipedia.org/​wiki/​YUV +
- +
--max_muxing_queue_size 1024: instruction magique pour repousser le mauvais sort et les bugs +
 -shortest: adapte à la longueur du flux le plus court, ici le son car les mages sont en boucle -shortest: adapte à la longueur du flux le plus court, ici le son car les mages sont en boucle
  
Ligne 173: Ligne 166:
   # avec réencodage   # avec réencodage
   ffmpeg -i video.mp4 -i son.wav -map 0:v -map 1:a -r 25 -c:v h264 -tune stillimage -crf 18 -c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p -max_muxing_queue_size 1024 -shortest video2.mp4   ffmpeg -i video.mp4 -i son.wav -map 0:v -map 1:a -r 25 -c:v h264 -tune stillimage -crf 18 -c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p -max_muxing_queue_size 1024 -shortest video2.mp4
 +
 +**"​Hardsub"​ (incruster des sous-titres dans une vidéo)**
 +  # testé 27 avril 2023 / ffmpeg version 3.2.18-0+deb9u1
 +  ffmpeg -i film.mp4 -c:v libx264 -crf 18 -preset slow -c:a copy -vf "​\subtitles=sous-titre.srt"​ film_sub.mp4
 +(-c:a copy : copie du flux audio, -crf : 18 qualité visuellement proche du lossless) \\
 +cf. infos sur les qualité du h264 : https://​trac.ffmpeg.org/​wiki/​Encode/​H.264
 +
 +**Vidéo sans son en ping-pong / yoyo** ([[https://​stackoverflow.com/​a/​42257863|source]])\\
 +Une fois à l'​endroit,​ une fois à l'​envers
 +  # testé 12 juin 2023 / ffmpeg version 3.2.18-0+deb9u1
 +  ffmpeg -i input.mp4 -filter_complex "​[0:​v]reverse,​fifo[r];​[0:​v][r] concat=n=2:​v=1 [v]" -map "​[v]"​ output.mp4
 +
 +**Assembler une vidéo à partir d'une série d'​images fixes, sans son**
 +  # testé 6 juin 2024 / ffmpeg version 3.2.18-0+deb9u1  ​
 +  ffmpeg -r 25 -an -i image-%03d.png -s 768x960 video.mp4 # image-001.png à image-999.png ​
 +Avec des réglages adaptés à instagram  ​
 +  # test 10 juil. 2024 / ffmpeg version 5.1.5-0+deb12u1
 +  ffmpeg -r 25 -an -i segwords-%06d.png -s 1024x1280 -map 0:v -c:v h264 -tune stillimage -crf 18 -an -pix_fmt yuv420p -max_muxing_queue_size 1024 -vsync vfr segwords.mp4
 +
 +**Répéter une séquence x fois dans une même vidéo** \\
 +  # testé 7 juin 2024 sans son / ffmpeg version 3.2.18-0+deb9u1  ​
 +  ffmpeg -f concat -i sequences.txt -c copy video.mp4
 +Au préalable il faut avoir préparé un fichier texte comme ceci :
 +  # sequences.txt
 +  file '​scene.mp4'​
 +  file '​scene.mp4'​
 +  file '​scene.mp4'​
 +
 +**Assembler une vidéo de 10 images à partir d'une image unique, sans son**
 +  # testé 10 juin 2024 sans son / ffmpeg version 3.2.18-0+deb9u1 ​
 +  ffmpeg -loop 1 -i image.png -c:v libx264 -t 1 -r 10 -pix_fmt yuv420p -vf scale=1536:​1920 video.mp4
 +-t 1 : durée de la vidéo = 1 seconde \\
 +-r 10 : nombre d'​images par secondes
 +
 +==== Extraction ====
 +
 +**Extraction d'un son depuis une vidéo en mp3**
 +  # ffmpeg 3.2.12-1 / debian 9.5 stretch @ kirin / 20190327
 +  ffmpeg -i video.mp4 -vn -ar 44100 -ac 2 -ab 320k -f mp3 audio.mp3
 +
 +**Extraction d'un son depuis un VOB en .wav 16bits**
 +  # ffmpeg 3.2.5-1 / debian 9.1 @ urzhiata / 20180415
 +  ffmpeg -i ./​VTS_01_1.VOB -vn -acodec pcm_s16le -sample_fmt s16 -ar 44.1k -ac 2 ./son.wav
  
 **Extraire une image d'une vidéo** **Extraire une image d'une vidéo**
   ffmpeg -i video.mp4 -vframes 1 image.png   ffmpeg -i video.mp4 -vframes 1 image.png
   ffmpeg -i video.mp4 -ss 00:23:45 -vframes 1 image.png ​  # momen de capture de l'​image défini par -ss    ffmpeg -i video.mp4 -ss 00:23:45 -vframes 1 image.png ​  # momen de capture de l'​image défini par -ss 
 +  ​
 +**Extraction d'​images de film toutes les x secondes**
 +  # ffmpeg 3.2.5-1 / debian 9.1 @ urzhiata / 20180831
 +  ffmpeg -i film.avi -r 1 -f image2 "​image-du-film-%4d"​
 +  # pour des versions de ffmpeg plus récentes, essayer
 +  ffmpeg -i video.mp4 -vf fps=1 out%d.png ​      # extraction d'une image par seconde
 +  ffmpeg -i video.mp4 -vf fps=1/60 out%02d.jpg ​ # extraction d'une image par minute
 +
 +**Extraction de toutes les images d'une vidéo**
 +  # testé 1( juin 2023 / ffmpeg version 3.2.18-0+deb9u1
 +  ffmpeg -i video.mp4 images_%04d.png
 +
 +**Extraire une séquence sans réencoder**
 +  # testé 23 juillet 2024 / ffmpeg version 5.1.5-0+deb12u1 @ tenko
 +  ffmpeg -ss 20 -i video.mp4 -c copy -t 00:00:30 extrait.mp4
 +-ss 30 : placer le point de départ de l'​extrait à la seconde 20 
 +-t 00:00:30 : extraire 30 secondes
 +
 +==== Divers ====
 +
 +**Enregistrer une video du bureau (sur Debian)**
 +  # ffmpeg 3.2.12-1 / debian 9.5 @ kirin / 20181203
 +  ffmpeg -video_size 1600x900 -framerate 10 -f x11grab -i :0.0+0,0 output.mp4
 +options : https://​trac.ffmpeg.org/​wiki/​Capture/​Desktop ​
  
 **Ajouter du délai à un sous-titre externe (au format .srt)** **Ajouter du délai à un sous-titre externe (au format .srt)**
Ligne 182: Ligne 242:
   # cas ou les sous-titres sont en avance de 3s, on les retarde   # cas ou les sous-titres sont en avance de 3s, on les retarde
   ffmpeg -itsoffset 3 -i sous-titre.srt -c copy sous-titre_retard.srt   ffmpeg -itsoffset 3 -i sous-titre.srt -c copy sous-titre_retard.srt
- 
-**"​Hardsub"​ (incruster des sous-titres dans une vidéo)** 
-  # testé 27 avril 2023 / ffmpeg version 3.2.18-0+deb9u1 
-  ffmpeg -i film.mp4 -c:v libx264 -crf 18 -preset slow -c:a copy -vf "​\subtitles=sous-titre.srt"​ film_sub.mp4 
-(-c:a copy : copie du flux audio, -crf : 18 qualité visuellement proche du lossless) \\ 
-cf. infos sur les qualité du h264 : https://​trac.ffmpeg.org/​wiki/​Encode/​H.264 
  
 **Changer le framerate et modifier la vitesse de lecture, sans réencoder** ([[https://​stackoverflow.com/​a/​64251589|source]]) \\ **Changer le framerate et modifier la vitesse de lecture, sans réencoder** ([[https://​stackoverflow.com/​a/​64251589|source]]) \\
Ligne 195: Ligne 249:
   ffmpeg -r 30 -i output_raw_bitstream.h264 -c copy video_30fps.mp4   ffmpeg -r 30 -i output_raw_bitstream.h264 -c copy video_30fps.mp4
   ​   ​
-**Vidéo sans son en ping-pong / yoyo** ([[https://​stackoverflow.com/​a/​42257863|source]])\\ 
-Une fois à l'​endroit,​ une fois à l'​envers 
-  # testé 12 juin 2023 / ffmpeg version 3.2.18-0+deb9u1 
-  ffmpeg -i input.mp4 -filter_complex "​[0:​v]reverse,​fifo[r];​[0:​v][r] concat=n=2:​v=1 [v]" -map "​[v]"​ output.mp4 
  
-**Réencoder en changeant ​les dimensions** +   
-  # testé ​14 juin 2023 / ffmpeg version ​3.2.18-0+deb9u1 +==== Effets ==== 
-  ffmpeg -i video.mp4 -vf scale="360:360" ​-c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p output.mp4+ 
 +**Inverser ​les couleurs de pixel d'une vidéo (négatif)** 
 +  # testé ​17 juillet 2024 sans son / ffmpeg version ​5.1.5-0+deb12u1 @ tenko 
 +  ffmpeg -i video.mp4 -vf lutrgb="r=negval:g=negval:​b=negval" ​negatif.mp4 
 +doc  
 +  * https://​ffmpeg.org/​ffmpeg-filters.html#​lut_002c-lutrgb_002c-lutyuv 
 +  * https://​trac.ffmpeg.org/​wiki/​FilteringGuide 
 +  * https://​trac.ffmpeg.org/​wiki/​FancyFilteringExamples 
 + 
 +**Miroir** 
 +  # testé 17 juillet 2024 sans son / ffmpeg version 5.1.5-0+deb12u1 @ tenko 
 +  ffmpeg -i 01.mp4 -vf "​crop=iw/​2:​ih:​0:​0,​split[left][tmp];​[tmp]hflip[right];​[left][right] hstack"​ 01miroir.mp4 
 +  ffmpeg ​-i 01miroir.mp4 ​-vf "​crop=iw:​ih/​2:​0:​0,​split[top][tmp];​[tmp]vflip[bottom];​[top][bottom] vstack"​ 01miroirhv.mp4 
 +   
 ===== Ressources ===== ===== Ressources =====
  
  • ressource/logiciel/ffmpeg/start.1686819240.txt.gz
  • Dernière modification: 2023/06/15 10:54
  • par emoc