Convertir une piste vidéo et audio spécifique uniquement avec ffmpeg

26

J'ai un fichier MKV ( vidui.mkv) avec 6 pistes.

Track 1 - video - xvid - 1920x1080
Track 2 - video - xvid - 720x576
Track 3 - audio -  AAC - 1240kbps - English
Track 4 - audio -  AAC - 648kbps - Spanish
Track 5 - audio -  AAC - 648kbps - Commentary 1
Track 6 - audio -  AAC - 648kbps - Commentary 2

Je veux convertir le fichier ci-dessus au format mp4 avec une vidéo h264 et un audio AC3. Je veux également convertir la piste 1 (vidéo) et la piste 5 (audio).

Si j'utilise

ffmpeg.exe -i vidui.mkv -f mp4 -vcodec libx264 -acodec ac3 -crf 20 -sn -n vidui.mp4

il convertit la première piste vidéo et la première piste audio, mais ce que je voudrais, c'est convertir la piste 1 et la piste 5.

hbelouf
la source

Réponses:

43

Vous pouvez utiliser l' -mapoption ( documentation complète ) pour sélectionner des flux d'entrée spécifiques et les mapper à votre sortie.

La mapsyntaxe la plus simple que vous pouvez utiliser est -map i:s, où iest l'ID du fichier d'entrée et l'ID sdu flux, les deux commençant par 0. Dans votre cas, cela signifie que nous sélectionnons la piste 0et 4:

ffmpeg -i vidui.mkv -c:v libx264 -c:a ac3 -crf 20 -map 0:0 -map 0:4 vidui.mp4

Si vous souhaitez choisir spécifiquement des pistes vidéo, audio ou de sous-titres, vous pouvez également utiliser des spécificateurs de flux :

ffmpeg -i vidui.mkv -c:v libx264 -c:a ac3 -crf 20 -map 0:v:0 -map 0:a:1 vidui.mp4

Voici 0:v:0le premier flux vidéo et 0:a:1le deuxième flux audio.

slhck
la source
Existe-t-il un moyen de le faire de manière dynamique? Supposons que je veuille le faire uniquement sur les pistes audio de la langue X, et que ffmpeg le prenne?
Freedo
@Freedo Oui, veuillez consulter la documentation. Par exemple-map 0:m:language:eng
slhck