Outils pour utilisateurs

Outils du site


prog:ffmpeg

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édentesRévision précédente
Prochaine révision
Révision précédente
prog:ffmpeg [2019/11/11 16:24] – [Ajout d'un sous-titre à une vidéo] : avconv => ffmpeg rootprog:ffmpeg [2023/05/14 20:41] (Version actuelle) – [Rotation] : bien utiliser la même extension root
Ligne 5: Ligne 5:
 Il faut augmenter ''probesize'' et ''analyzeduration''. Il faut augmenter ''probesize'' et ''analyzeduration''.
   ffmpeg -analyzeduration 100000k -probesize 100000k -i input.ts   ffmpeg -analyzeduration 100000k -probesize 100000k -i input.ts
-[[http://www.ffmpeg.org/faq.html#Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f|Why does FFmpeg not see the subtitles in my VOB file?]]{{ prog:ffmpeg:ffmpeg_faq.mhtml |Archive}} +[[http://www.ffmpeg.org/faq.html#Why-does-FFmpeg-not-see-the-subtitles-in-my-VOB-file_003f|Why does FFmpeg not see the subtitles in my VOB file?]] {{ :prog:ffmpeg:ffmpeg_faq_2019-11-11_16_38_06_.html |Archive du 10/11/2019 le 11/11/2019}} 
-====Ajout d'un sous-titre à une vidéo==== +====Sous-titre à une vidéo==== 
-Format de sortie ''mkv''. [[https://stackoverflow.com/questions/8672809/use-ffmpeg-to-add-text-subtitles|mp4 - Use ffmpeg to add text subtitles - Stack Overflow]]{{ prog:ffmpeg:mp4_-_use_ffmpeg_to_add_text_subtitles_-_stack_overflow.mhtml |Archive}}+ 
 +===Incorporation d'un sous-titre externe=== 
 + 
 +Format de sortie ''mkv''. [[https://stackoverflow.com/questions/8672809/use-ffmpeg-to-add-text-subtitles|mp4 - Use ffmpeg to add text subtitles - Stack Overflow]] {{ :prog:ffmpeg:mp4_-_use_ffmpeg_to_add_text_subtitles_-_stack_overflow_2019-11-11_16_38_15_.html |Archive du 29/12/2011 le 11/11/2019}}
  
   ffmpeg -i entree.mp4 -i sous-titre.fr.ass -i sous-titre.us.ass -c copy -map 0 -map 1 -map 2 -metadata:s:s:0 language=fra -metadata:s:s:1 language=eng sortie.mkv   ffmpeg -i entree.mp4 -i sous-titre.fr.ass -i sous-titre.us.ass -c copy -map 0 -map 1 -map 2 -metadata:s:s:0 language=fra -metadata:s:s:1 language=eng sortie.mkv
Ligne 13: Ligne 16:
 Le ''-map 0'' indique tous les flux de la vidéo d'origine. Il est important de mettre un map pour chaque fichier d'entrée. Il est possible de mettre ''X:Y'' avec le premier chiffre indique le fichier et le deuxième le flux correspondant. Pour avoir la liste complète, une lecture des entêtes avec ''avplay'' permet de tous les avoir. Le ''-map 0'' indique tous les flux de la vidéo d'origine. Il est important de mettre un map pour chaque fichier d'entrée. Il est possible de mettre ''X:Y'' avec le premier chiffre indique le fichier et le deuxième le flux correspondant. Pour avoir la liste complète, une lecture des entêtes avec ''avplay'' permet de tous les avoir.
  
-''-metadata:s:s:0'' : ''s'' pour ''stream'' et ''s'' pour ''subtitle'' et ''0'' pour le premier sous-titre. Si la vidéo d'origine possède déjà un sous-titre et qu'on souhaite définir la langue uniquement pour le deuxième sous-titre, il faut juste mettre ''-metadata:s:s:1 …''. [[https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/subtitle_options|FFMPEG An Intermediate Guide_subtitle options - Wikibooks, open books for an open world]]{{ prog:ffmpeg:ffmpeg_an_intermediate_guide_subtitle_options_-_wikibooks_open_books_for_an_open_world.mhtml |Archive}}+''-metadata:s:s:0'' : ''s'' pour ''stream'' et ''s'' pour ''subtitle'' et ''0'' pour le premier sous-titre. Si la vidéo d'origine possède déjà un sous-titre et qu'on souhaite définir la langue uniquement pour le deuxième sous-titre, il faut juste mettre ''-metadata:s:s:1 …''. [[https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/subtitle_options|FFMPEG An Intermediate Guide_subtitle options - Wikibooks, open books for an open world]] {{ :prog:ffmpeg:ffmpeg_an_intermediate_guide_subtitle_options_-_wikibooks_open_books_for_an_open_world_2019-11-11_16_38_21_.html |Archive du 26/09/2019 le 11/11/2019}} 
 + 
 +Si on souhaite utiliser le container ''mkv'' et que le format de sous-titre n'est pas compatible (''Subtitle codec 94213 is not supported.''), il faut ajouter ''-c:s srt'' après ''-c copy''. [[https://newspaint.wordpress.com/2018/06/24/subtitle-codec-94213-is-not-supported/|Subtitle Codec 94213 is Not Supported in FFmpeg]] {{ :prog:ffmpeg:subtitle_codec_94213_is_not_supported_in_ffmpeg_newspaint_2022-01-09_08_27_13_.html |Archive du 26/04/2018 le 09/01/2022}}
  
 Vérification que ''ffmpeg'' a bien compris la langue (entre parenthèse) : Vérification que ''ffmpeg'' a bien compris la langue (entre parenthèse) :
Ligne 25: Ligne 30:
 ''ffmpeg'' choisit de modifier le ''map'' ''ffmpeg'' choisit de modifier le ''map''
  
-Et que ''vlc'' aussi : {{:prog:ffmpeg:vlc-sous-titre.png?482|}}+Et que ''vlc'' aussi : {{:prog:ffmpeg:vlc-sous-titre.png|}}
  
 Liste des langues reconnues : [[https://raw.githubusercontent.com/datasets/language-codes/master/data/language-codes-full.csv|language-codes-full.csv]], {{ prog:ffmpeg:language-codes-full.csv |Archive}}. Base du constat : [[https://github.com/libav/libav/blob/master/libavformat/avlanguage.c|avlanguage.c]], {{ prog:ffmpeg:avlanguage.c |Archive}} Liste des langues reconnues : [[https://raw.githubusercontent.com/datasets/language-codes/master/data/language-codes-full.csv|language-codes-full.csv]], {{ prog:ffmpeg:language-codes-full.csv |Archive}}. Base du constat : [[https://github.com/libav/libav/blob/master/libavformat/avlanguage.c|avlanguage.c]], {{ prog:ffmpeg:avlanguage.c |Archive}}
  
 +===Activation d'un sous-titre par défaut===
 +
 +Utiliser l'option ''-disposition:s:s:0'' avec la même syntaxe que ''-metadata''.
 ====Fichier source mkv==== ====Fichier source mkv====
 Après des tests avec VLC, il n'arrive pas à lire les sous-titres du ''mkv'' d'origine. Il faut donc les extraire avant de faire la fusion. Après des tests avec VLC, il n'arrive pas à lire les sous-titres du ''mkv'' d'origine. Il faut donc les extraire avant de faire la fusion.
Ligne 35: Ligne 43:
 On détaille le ''map'' du fichier source pour ne pas prendre le sous-titre d'origine. On détaille le ''map'' du fichier source pour ne pas prendre le sous-titre d'origine.
 =====Encodage===== =====Encodage=====
-  ffmpeg -i input.mp4 -threads 8 -acodec libfdk_aac -ar 44100 -ab 48000 -profile:a aac_he_v2 -ac 2 -vcodec libx264 -mp4 -r 30 -aspect 1920:1080 -vf scale=1920:1080 -preset veryslow -crf 22 -pix_fmt yuv420p output.mp4+====Paramètres généraux==== 
 + 
 +x265 : 
 + 
 +<code bash> 
 +ffmpeg -i input.mp4 
 +  -threads 8 
 +  -map 0 \ 
 +  -c:a libfdk_aac -ar 44100 -b:a 128k -ac 2 
 +  -c:v libx265 -r 30 -aspect 1920:1080 -vf scale=1920:1080 \ 
 +  -preset veryslow -crf 22 -x265-params aq-mode=3 \ 
 +  -pix_fmt yuv420p10le output.mkv 
 +</code> 
 + 
 +x264 : 
 + 
 +<code bash> 
 +ffmpeg -i input.mp4 
 +  -threads 8 \ 
 +  -map 0 \ 
 +  -c:a libfdk_aac -ar 44100 -b:a 128k -ac 2 \ 
 +  -c:v libx264 -r 30 -aspect 1920:1080 -vf scale=1920:1080 
 +  -preset veryslow -crf 22 -aq-mode 3 \ 
 +  -pix_fmt yuv420p10le output.mkv 
 +</code> 
 +===Ordre des streams===
  
 Choix des paramètres : Choix des paramètres :
-  * ''-ar'' : fréquence de l'audio : ''44100'' ou ''48000''Hz généralement, +  * ''-map 0''
-  * ''-ab'' : débit de l'audio : Si %%<=%% ''48000'', utiliser ''-ab 48000 -acodec libfdk_aac -profile:a aac_he_v2''. Attention, ''aac_he_v2'' ne supporte que la stéréo, pour du mono, utiliser ''aac_he''+Cela indique de reprendre toutes les pistes / streams du premier paramètre ''-i input.mp4''. Si on ne le fait pas, la conversion pourrait oublier certaines données comme ne conserver que le premier sous-titre ou encore oublier les chapitres avec leur titre. 
-  * ''-pix_fmt'' : ''yuv420p'' [[http://www.latelierducable.com/tv-televiseur/yuv-420-ycbcr-422-rgb-444-cest-quoi-le-chroma-subsampling/|YUV 420, YCbCr 422, RGB 444, c’est quoi le chroma subsampling 2?]] {{ prog:ffmpeg:yuv_420_ycbcr_422_rgb_444_c_est_quoi_le_chroma_subsampling_2_-_l_atelier_du_cable.mhtml |Archive du 12/01/2019}}+ 
 +En faisant ''-i input1.mp4 -i input2.mp4 -map 1 -map 0'', cela va fusionner les données du média 1 et du média 2 mais en considérant en premier les données du média 2. 
 + 
 +Il est encore possible de faire ''-map 0:1 -map 0:0'' en supposant que les deux streams sont les deux audios d'une vidéo, cela va inverser leur ordre et donc inverser l'audio par défaut au démarrage de la vidéo. 
 + 
 +===Audio=== 
 + 
 +  * ''-ar'' : fréquence de l'audio : ''44100'' ou ''48000''Hz généralement. Il est possible d'utiliser ''-ar:0'' pour le stream 0. 
 + 
 +  * ''-b:a'' : débit de l'audio. Il est possible d'utiliser ''-b:a:0'' pour le stream 0. 
 +Il est conseillé d'appliquer la formule ''(bitrate for stereo) * (channels / 2)''. Soit ''128k'' pour du stéréo et du ''384k'' pour du 5.1. [[https://trac.ffmpeg.org/wiki/Encode/HighQualityAudio|Guidelines for high quality lossy audio encoding]] {{ :prog:ffmpeg:encode_highqualityaudio_ffmpeg_2020-12-28_02_02_47_.html |Archive du 23/06/2019 le 28/12/2020}} 
 + 
 +Si ''-ab'' %%<=%% ''48000'', ajouter l'option ''-profile:a aac_he_v2''. Attention, ''aac_he_v2'' ne supporte que la stéréo, pour du mono, utiliser ''aac_he''. 
 + 
 +  * ''-c:a libfdk_aac'' : codec audio. Il est possible d'utiliser ''-c:a:0 libfdk_aac'' pour le stream 0. 
 + 
 +Celui-là n'est pas disponible par défaut sur Windows. Utiliser ''aac'' à la place si besoin. 
 + 
 +  * ''-ac 2'' : nombre de canal audio. 2 pour stéréo, 6 pour 5.1. Il est possible d'utiliser ''-ac:0 2'' pour le stream 0. 
 + 
 +Attention, ce paramètre s'applique pour toutes les stream audio. Si une bande est en stéréo et l'autre en 5.1, il faut utiliser ''-ac:0 2 -ac:1 6''
 + 
 +===Vidéo=== 
 +  * ''-c:v libx265'' : codec audio. Il est possible d'utiliser ''-c:v:0 libx265'' pour le stream 0. 
 + 
 +  * ''-r 30'' : nombre d'images par seconde. Il est possible d'utiliser ''-r:0 30'' pour le stream 0. 
 + 
 +  * ''-crf 22'' : très bonne qualité pour des scènes claires (faible risque d'apparition de carrés à l'écran). Compromis entre la taille et la qualité. Il n'est PAS possible d'utiliser ''-crf:0 22'' pour le stream 0. 
 + 
 +Mettre une valeur de 17 ou 18 pour une qualité *presque* identique à l'original ([[https://trac.ffmpeg.org/wiki/Encode/H.264|H.264 Video Encoding Guide]] {{ :prog:ffmpeg:encode_h.264_ffmpeg_2020-09-23_14_42_45_.html |Archive du 09/08/2020 le 23/09/2020}}). 
 + 
 +Quand les scènes sont sombres, il faut utiliser l'option ''-aq-mode 3''. Sinon les scènes sombres auront des mauvais des dégradés de couleur. Sans cette option, un crf < 15 est nécessaire pour ne pas voir les carrés dans les dégradés très sombres. 
 + 
 +Il faut garder le même paramètre entre x264 et x265 pour avoir la même qualité. [[https://mattgadient.com/results-encoding-8-bit-video-at-81012-bit-in-handbrake-x264x265/|Encoding 8-bit video at 8/10/12-bit in Handbrake (x264/x265)]] : comparaison en ligne uniquement de quelques images type en format x264 et x265, [[https://goughlui.com/2016/08/27/video-compression-testing-x264-vs-x265-crf-in-handbrake-0-10-5/|Video Compression Testing: x264 vs x265 CRF in Handbrake 0.10.5]] {{ :prog:ffmpeg:video_compression_testing_x264_vs_x265_crf_in_handbrake_0.10.5_gough_s_tech_zone_2020-08-12_13_51_55_.html |Archive du 27/08/2016 le 12/08/2020}} 
 + 
 +  * ''-pix_fmt'' : ''yuv420p'' pour du 8 bits ou ''yuv420p10le'' pour du 10 bits [[http://www.latelierducable.com/tv-televiseur/yuv-420-ycbcr-422-rgb-444-cest-quoi-le-chroma-subsampling/|YUV 420, YCbCr 422, RGB 444, c’est quoi le chroma subsampling 2?]] {{ :prog:ffmpeg:yuv_420_ycbcr_422_rgb_444_c_est_quoi_le_chroma_subsampling_2_-_l_atelier_du_cable_2019-11-11_16_38_27_.html |Archive le 11/11/2019}}. Il est possible d'utiliser ''-pix_fmt:0 yuv420p'' pour le stream 0. 
 + 
 +Il est préférable d'encoder en 10 bits, même si la source est en 8 bits car l'algorithme de compression est meilleur. [[http://x264.nl/x264/10bit_02-ateme-why_does_10bit_save_bandwidth.pdf|Why does 10-bit save bandwidth (even when content is 8-bit)?]] {{ :prog:ffmpeg:10bit_02-ateme-why_does_10bit_save_bandwidth.pdf |Archive du 2010 le 10/02/2020}} 
 + 
 +===Sous-titres=== 
 + 
 +  * ''-c:s copy'' : copie les sous-titres. Il est possible d'utiliser ''-c:s:0 copy'' pour le stream 0. 
 + 
 +====Taille spécifique==== 
 + 
 +Avant, on utilise un CFR à 22 pour avoir une qualité très bonne même si pas parfaite. 
 + 
 +Il est parfois nécessaire d'avoir une taille précise : 700Mo pour un CD, 25Mo pour Messenger, ... 
 + 
 +La formule est la suivante : 
 + 
 +  (200 MiB * 8192 [converts MiB to kBit]) / 600 seconds = ~2730 kBit/s total bitrate 
 +  2730 - 128 kBit/s (desired audio bitrate) = 2602 kBit/s video bitrate 
 + 
 +Il suffit alors de remplacer le paramètre ''-crf 22'' par ''-b:v 2600k'' et d'activer l'encodage en deux étapes : 
 + 
 +  ffmpeg -i input.mp4 -threads 8 -acodec libfdk_aac -ar 44100 -ab 128k -profile:a aac_he_v2 -ac 2 -vcodec libx264 -f mp4 -r 30 -aspect 1920:1080 -vf scale=1920:1080 -preset veryslow -b:v 2600k -pass 1 -pix_fmt yuv420p output.mp4 
 +  ffmpeg -i input.mp4 -threads 8 -acodec libfdk_aac -ar 44100 -ab 128k -profile:a aac_he_v2 -ac 2 -vcodec libx264 -f mp4 -r 30 -aspect 1920:1080 -vf scale=1920:1080 -preset veryslow -b:v 2600k -pass 2 -pix_fmt yuv420p output.mp4 
 + 
 + 
 +[[https://trac.ffmpeg.org/wiki/Encode/H.264|H.264 Video Encoding Guide]] {{ :prog:ffmpeg:encode_h.264_ffmpeg_2020-09-23_14_42_45_.html |Archive du 09/08/2020 le 23/09/2020}} 
 ====Concaténer==== ====Concaténer====
 Pour les DVD, les pistes sont dans des fichiers découpés avec une taille de 1 Go (1073739776 o). Un ''cat'' suffit pour les concaténer. Pour les DVD, les pistes sont dans des fichiers découpés avec une taille de 1 Go (1073739776 o). Un ''cat'' suffit pour les concaténer.
Ligne 54: Ligne 148:
  
   ffmpeg.exe -i http://example.com/link.m3u8 -c copy output.mp4   ffmpeg.exe -i http://example.com/link.m3u8 -c copy output.mp4
 +
 +
 +=====Effets=====
 +
 +====Rotation====
 +
 +Sans ré-encoder, il est possible de mettre un tag pour indiquer la rotation.
 +
 +<code bash>
 +ffmpeg -i input.mkv -map_metadata 0 -metadata:s:v rotate="90" -codec copy output.mkv
 +</code>
 +
 +Pour que cela fonctionne l'extension du fichier de sortie doit être le même que celui d'entrée.
prog/ffmpeg.1573485876.txt.gz · Dernière modification : 2019/11/11 16:24 de root