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 | ||
ressource:logiciel:ffmpeg:start [2024/06/07 09:11] 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** | ||
Ligne 116: | Ligne 133: | ||
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" | ||
- | # 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 | ||
- | | ||
**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 179: | 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 | ||
- | |||
- | **Extraire une image d'une vidéo** | ||
- | 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 | ||
- | |||
- | **Ajouter du délai à un sous-titre externe (au format .srt)** | ||
- | # testé 27 avril 2023 / ffmpeg version 3.2.18-0+deb9u1 | ||
- | # 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 | ||
**"Hardsub" (incruster des sous-titres dans une vidéo)** | **"Hardsub" (incruster des sous-titres dans une vidéo)** | ||
Ligne 195: | Ligne 173: | ||
cf. infos sur les qualité du h264 : https://trac.ffmpeg.org/wiki/Encode/H.264 | 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]]) \\ | ||
- | En 2 étapes, en partant d'une vidéo à 60 fps pour la passer à 30 fps, et la ralentir (2 fois plus lente). Dans ce cs, je n'ai pas besoin de son mais l'exemple de la source concerne aussi le son. | ||
- | # testé 12 juin 2023 / ffmpeg version 3.2.18-0+deb9u1 | ||
- | ffmpeg -i video_60fps.mp4 -c copy -f h264 output_raw_bitstream.h264 | ||
- | 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]])\\ | **Vidéo sans son en ping-pong / yoyo** ([[https://stackoverflow.com/a/42257863|source]])\\ | ||
Une fois à l'endroit, une fois à l'envers | Une fois à l'endroit, une fois à l'envers | ||
Ligne 206: | Ligne 178: | ||
ffmpeg -i input.mp4 -filter_complex "[0:v]reverse,fifo[r];[0:v][r] concat=n=2:v=1 [v]" -map "[v]" output.mp4 | 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 | ||
- | ffmpeg -i video.mp4 -vf scale="360:360" -c:a aac -b:a 128k -ac 2 -ar 44100 -pix_fmt yuv420p output.mp4 | ||
- | | ||
**Assembler une vidéo à partir d'une série d'images fixes, sans son** | **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 | # 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 | 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 |
- | **Répéter une séquence x fois ans une même vidéo** | + | # 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 | # testé 7 juin 2024 sans son / ffmpeg version 3.2.18-0+deb9u1 | ||
ffmpeg -f concat -i sequences.txt -c copy video.mp4 | ffmpeg -f concat -i sequences.txt -c copy video.mp4 | ||
Ligne 222: | Ligne 193: | ||
file 'scene.mp4' | 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** | ||
+ | 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 | ||
+ | | ||
+ | **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)** | ||
+ | # testé 27 avril 2023 / ffmpeg version 3.2.18-0+deb9u1 | ||
+ | # 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 | ||
+ | |||
+ | **Changer le framerate et modifier la vitesse de lecture, sans réencoder** ([[https://stackoverflow.com/a/64251589|source]]) \\ | ||
+ | En 2 étapes, en partant d'une vidéo à 60 fps pour la passer à 30 fps, et la ralentir (2 fois plus lente). Dans ce cs, je n'ai pas besoin de son mais l'exemple de la source concerne aussi le son. | ||
+ | # testé 12 juin 2023 / ffmpeg version 3.2.18-0+deb9u1 | ||
+ | ffmpeg -i video_60fps.mp4 -c copy -f h264 output_raw_bitstream.h264 | ||
+ | ffmpeg -r 30 -i output_raw_bitstream.h264 -c copy video_30fps.mp4 | ||
+ | | ||
+ | |||
+ | | ||
+ | ==== Effets ==== | ||
+ | |||
+ | **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 ===== |