Comment supprimer une seule piste (pas toutes) du conteneur de fichiers vidéo (.vob ou .mkv) à l'aide de ffmpeg?
Je sais que je peux simplement copier la vidéo (-c:v copy -an
) et une piste audio spécifique du conteneur en deux fichiers séparés, puis les joindre.
Mais existe-t-il un moyen plus simple? Puis-je simplement supprimer une piste audio spécifique du conteneur? Commande ffmpeg?
La méthode la plus efficace consiste à utiliser mappage négatif dans le -map
option pour exclure des flux spécifiques tout en conservant tous les autres flux.
ffmpeg -i input -map 0 -map -0:a:2 -c copy output
-map 0
sélectionne tous les flux de l'entrée.-map -0:a:2
désélectionne ensuite le flux audio 3. L'index du flux commence à compter à partir de 0, le flux audio 10 serait donc 0:a:9
.ffmpeg -i input -map 0 -map -0:a -c copy output
-map 0
sélectionne tous les flux de l'entrée.-map -0:a
désélectionne ensuite tous les flux audio de l'entrée.Si vous souhaitez supprimer d'autres types de flux, vous pouvez utiliser le spécificateur de flux approprié.
v
- vidéo, telle que -map -0:v
a
- audio, tel que -map -0:a
(Comme montré ci-dessus)s
- sous-titres, tels que -map -0:s
d
- données, telles que -map -0:d
Tu recherches -map
.
J'ai changé pour utiliser avconv
, mais cela devrait être à peu près le même.
Disons que vous avez un fichier appelé "input.vob" avec une vidéo et deux pistes audio; et vous voulez avoir "output.vob" avec la vidéo et le dernier audio.
Vous feriez:
avconv -i input.vob -map 0:0 -c:v copy -map 0:2 -c:a copy output.vob
Vous devez noter que:
-map 0:1
-an
, car il existe des pistes audio. Cependant, s'il n'y a aucune piste audio, vous devrez peut-être utiliser un tel attribut.Vous ne pouvez pas travailler sur des fichiers "en place", vous devez enregistrer dans un fichier différent.
P.S. Vous voudrez peut-être poser ces questions sur video.stackexchange.com la prochaine fois.