Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
prog:ffmpeg [2021/06/13 12:04] – [Paramètres généraux] : ne pas utiliser aacv2 qui ne convient que pour de petites tailles root | prog:ffmpeg [2023/05/14 20:41] (Version actuelle) – [Rotation] : bien utiliser la même extension root |
---|
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}} |
| |
| |
''-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) : |
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. |
=====Encodage===== | =====Encodage===== |
====Paramètres généraux==== | ====Paramètres généraux==== |
| |
| x265 : |
| |
<code bash> | <code bash> |
ffmpeg -i input.mp4 \ | ffmpeg -i input.mp4 \ |
-c:a libfdk_aac -ar 44100 -b:a 128k -ac 2 \ | -c:a libfdk_aac -ar 44100 -b:a 128k -ac 2 \ |
-c:v libx265 -r 30 -aspect 1920:1080 -vf scale=1920:1080 \ | -c:v libx265 -r 30 -aspect 1920:1080 -vf scale=1920:1080 \ |
-preset veryslow -crf 22 -pix_fmt yuv420p output.mkv | -preset veryslow -crf 22 -x265-params aq-mode=3 \ |
| -pix_fmt yuv420p10le output.mkv |
</code> | </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=== | ===Ordre des streams=== |
| |
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}}). | 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 ne faut pas oublier qu'il faut augmenter la qualité pour les scènes sombres avec des dégradés de couleur (en gros, toutes les scènes sombres). Un crf < 15 est nécessaire pour ne pas voir les carrés dans les dégradés très sombres. | 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}} | 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}} |
| |
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. |