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 [2020/09/23 14:49] – [Encodage] : ajout d'une méthode pour avoir une taille spécifique rootprog:ffmpeg [2023/05/14 20:41] (Version actuelle) – [Rotation] : bien utiliser la même extension root
Ligne 6: Ligne 6:
   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_2019-11-11_16_38_06_.html |Archive du 10/11/2019 le 11/11/2019}} [[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==== 
 + 
 +===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}} 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}}
  
Ligne 14: Ligne 17:
  
 ''-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}} ''-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 29: Ligne 34:
 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 36: Ligne 44:
 =====Encodage===== =====Encodage=====
 ====Paramètres généraux==== ====Paramètres généraux====
-  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 -crf 22 -pix_fmt yuv420p output.mp4+ 
 +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 420YCbCr 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}} + 
-  * ''-crf 22'' : qualité. Bon compromis entre la taille et la qualité. 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}}) 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}}+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 audio2 pour stéréo, 6 pour 5.1. Il est possible d'utiliser ''-ac:0 2'' pour le stream 0. 
 + 
 +Attentionce 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:-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 secondeIl 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}} 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==== ====Taille spécifique====
Ligne 78: 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.1600865362.txt.gz · Dernière modification : 2020/09/23 14:49 de root