web-dev-qa-db-fra.com

Inclusion de sous-titres lors de la conversion de MTS en MKV

Je souhaite convertir mes vidéos .MTS de ma Sony HD Cam en .MKV. J'utilise ffmpeg et cela fonctionne très bien. Mais j'ai des problèmes avec les sous-titres (dans ce cas, les sous-titres sont la date et l'heure) car ils se perdent une fois que j'ai converti le MTS en mkv.

J'utilise cette commande:

ffmpeg -i 00235.MTS -scodec copy -acodec copy -vcodec copy -f matroska OUTPUT.mkv

Voici la sortie:

ffmpeg version 0.8.6-4:0.8.6-0ubuntu0.12.04.1, Copyright (c) 2000-2013 the Libav developers
  built on Apr  2 2013 17:02:36 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.
Input #0, mpegts, from '00235.MTS':
  Duration: 00:00:22.07, start: 1.000011, bitrate: 26285 kb/s
  Program 1 
    Stream #0.0[0x1011]: Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 50 fps, 50 tbr, 90k tbn, 100 tbc
    Stream #0.1[0x1100]: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
    Stream #0.2[0x1200]: Data: [144][0][0][0] / 0x0090
Output #0, matroska, to 'OUTPUT.mkv':
  Metadata:
    encoder         : Lavf53.21.1
    Stream #0.0: Video: H264 / 0x34363248, yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], q=2-31, 1k tbn, 50 tbc
    Stream #0.1: Audio: ac3, 48000 Hz, 5.1, 448 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press ctrl-c to stop encoding
frame= 1104 fps=  0 q=-1.0 Lsize=   67284kB time=22.08 bitrate=24963.2kbits/s    
video:66061kB audio:1208kB global headers:0kB muxing overhead 0.023045%

On dirait Stream #0.2[0x1200] est le sous-titre mais à la fin ce n'est pas mis dans le MKV.

J'espère que quelqu'un pourra m'aider.

2
mci

Vous pouvez copie de flux avec -codec copy. Cela évite l'étape de décodage et d'encodage pour le flux spécifié, donc il ne fait que le démultiplexage et le multiplexage, ce qui est utile si vous souhaitez modifier le format du conteneur de sortie ou manipuler ou ajouter des métadonnées au niveau du conteneur. L'exécution d'une copie de flux est plus rapide que le ré-encodage et n'entraînera aucune perte de qualité.

Notez que le comportement par défaut ne choisit qu'un seul type de flux par entrée, incluant donc -map 0 inclura tous les flux pour la première entrée. Si vous n'avez qu'un seul type de flux pour l'entrée, comme dans la question ci-dessus, alors -map 0 est superflu, mais cela ne fait pas de mal de le quitter. Voir la documentation sur sélection de flux et -map option pour plus d'informations.

Exemple:

$ ffmpeg -i input.MTS -codec copy -map 0 output.mkv

Exemple utilisant une boucle bash for si vous souhaitez encoder toutes les vidéos dans un répertoire:

$ mkdir outputdir
$ for f in *.MTS; do ffmpeg -i "$f" -codec copy -map 0 outputdir/"${f%.MTS}.mkv"; done
1
llogan