J'ai une vidéo mkv que je veux convertir en mp4, mais j'essaie de la convertir dans tous les sens (Handbrake, WinFF, ffmpeg, mencoder, ...), je perds les sous-titres de la vidéo. Comment puis-je convertir la vidéo en conservant les sous-titres, ou ajouter un sous-titres.srt?
Je voudrais aussi un encodage en 2 passes avec un débit vidéo de 4054 et un débit audio de 160.
Merci.
On m'a demandé le ffmpeg -i:
joe@joe-Leopard-Extreme:/media/Elements/Home Folder/Videos$ ffmpeg -i iron.mkv
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Jun 12 2012 16:52:09 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[matroska,webm @ 0x1a319a0] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'iron.mkv':
Metadata:
title : Iron
Duration: 02:06:01.67, start: 0.000000, bitrate: 1280 kb/s
Chapter #0.0: start 0.000000, end 546.170622
Metadata:
title : Chapter 00
Chapter #0.1: start 546.170622, end 1080.579489
Metadata:
title : Chapter 01
Chapter #0.2: start 1080.579489, end 1609.941667
Metadata:
title : Chapter 02
Chapter #0.3: start 1609.941667, end 2101.849733
Metadata:
title : Chapter 03
Chapter #0.4: start 2101.849733, end 2595.259333
Metadata:
title : Chapter 04
Chapter #0.5: start 2595.259333, end 3158.488667
Metadata:
title : Chapter 05
Chapter #0.6: start 3158.488667, end 3564.644400
Metadata:
title : Chapter 06
Chapter #0.7: start 3564.644400, end 4052.423356
Metadata:
title : Chapter 07
Chapter #0.8: start 4052.423356, end 4304.300000
Metadata:
title : Chapter 08
Chapter #0.9: start 4304.300000, end 4711.206489
Metadata:
title : Chapter 09
Chapter #0.10: start 4711.206489, end 5080.575489
Metadata:
title : Chapter 10
Chapter #0.11: start 5080.575489, end 5700.111067
Metadata:
title : Chapter 11
Chapter #0.12: start 5700.111067, end 6269.346400
Metadata:
title : Chapter 12
Chapter #0.13: start 6269.346400, end 6811.471333
Metadata:
title : Chapter 13
Chapter #0.14: start 6811.471333, end 7561.679000
Metadata:
title : Chapter 14
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, s16, 640 kb/s (default)
Metadata:
title : 3/2+1
Stream #0.2(ita): Audio: ac3, 48000 Hz, 5.1, s16, 640 kb/s
Metadata:
title : 3/2+1
Stream #0.3(eng): Subtitle: pgssub (default)
Stream #0.4(eng): Subtitle: pgssub
Stream #0.5(eng): Subtitle: pgssub
Stream #0.6(eng): Subtitle: pgssub
At least one output file must be specified
joe@joe-Leopard-Extreme:/media/Elements/Home Folder/Videos
Eh bien, j'ai trouvé un moyen de le faire fonctionner, pas idéal, mais ça fonctionne. Je peux ajouter un srt à une vidéo avec mkvmerge. Le seul inconvénient est qu'il rend la vidéo mkv, pas mp4.
MP4 prend en charge les sous-titres au format texte en continu, mais la lecture à cet effet entre lecteurs et appareils n’est pas universelle.
Exemple de base utilisant le comportement par défaut sélection de flux tandis que copie de flux l'audio:
ffmpeg -i input.mkv -c copy -c:s mov_text output.mp4
Exemple de diffusion en flux de tous les flux vidéo et audio , conversion de tous les flux d'entrée de sous-titres basés sur du texte (SRT, ASS, VTT, etc.) en flux format de texte et définissez la langue des deux premiers flux de sous-titres.
ffmpeg -i input.mkv -map 0 -c copy -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=ipk output.mp4
Idem que ci-dessus mais réencodez la vidéo et l'audio dans des formats compatibles avec le conteneur MP4 (vidéo H.264:
ffmpeg -i input.mkv -map 0 -c:v libx264 -c:a aac -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=ipk output.mp4
Comme ci-dessus, mais utilisez l'option -map
pour choisir le premier flux vidéo, le deuxième flux audio et le troisième flux de sous-titres:
ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -map 0:s:2 -c:v libx264 -c:a aac -c:s mov_text -metadata:s:s:0 language=eng output.mp4
Utilisez le filtre de sous-titres pour "graver" les formats de sous-titres textuels (SRT, ASS, VTT, etc.). Notez que cela nécessite un ré-encodage, donc cela sera beaucoup plus lent que l'utilisation de softsubs.
Exemple de base utilisant le comportement par défaut sélection de flux tandis que copie de flux l'audio:
ffmpeg -i input.mkv -filter_complex "subtitles=input.mkv" -c:a copy output.mp4
Exemple d'utilisation du troisième flux vidéo, du cinquième flux de sous-titres et du premier flux audio:
ffmpeg -i input.mkv -filter_complex "[0:v:2]subtitles=input.mkv:si=4[v]" -map "[v]" -map 0:a:0 -c:a copy output.mp4
Exemple pour un fichier d’entrée de sous-titre séparé (your-subtitles-file.srt
):
ffmpeg -i input.mp4 -filter_complex "subtitles=your-subtitles-file.srt" -c:a copy output.mp4
Utilisez le filtre superposition . Cet exemple superpose le quatrième flux de sous-titres sur le deuxième flux vidéo et copie le septième flux audio:
ffmpeg -i input.mkv -filter_complex "[0:v:2][0:s:3]overlay[v]" -map "[v]" -map 0:a:6 -c:a copy output.mp4
vous pouvez utiliser -map 0 pour vous assurer que tous les flux sont copiés. Si ce n'est pas possible avec le format, ffmpeg devrait alors afficher une erreur.
-map 0 indique à ffmpeg/libav d'inclure tous les flux, pas seulement ceux pour lesquels vous avez défini des règles de convecsion.
Normalement, -map est utilisé pour définir le mappage de flux - c’est-à-dire que le flux 1 en entrée doit devenir le flux 0 en sortie. Avec juste -map 0, vous dites à ffmpeg/libav de prendre tous les flux sans les mélanger.
Si vous voulez simplement faire une conversion en MP4, vous pouvez utiliser VLC. VLC acceptera un fichier de sous-titres et le restituera sur la sortie.
Pour les conversions plus complexes, y compris le style des sous-titres, vous pouvez utiliser OpenShot.