Convierta pistas de video y audio específicas solo con ffmpeg

26

Tengo un archivo MKV ( vidui.mkv) con 6 pistas.

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

Quiero convertir el archivo anterior a un formato mp4 con un video h264 y un audio AC3. También quiero convertir la pista 1 (video) y la pista 5 (audio).

Si yo uso

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

convierte la primera pista de video y la primera pista de audio, pero lo que me gustaría que hiciera es convertir la pista 1 y la pista 5.

hbelouf
fuente

Respuestas:

43

Puede usar la -mapopción ( documentación completa ) para seleccionar flujos de entrada específicos y asignarlos a su salida.

La mapsintaxis más simple que puede usar es -map i:s, donde iestá la ID del archivo de entrada y sla ID de la secuencia, ambas comenzando con 0. En su caso, eso significa que seleccionamos track 0y 4:

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

Si desea elegir específicamente pistas de video, audio o subtítulos, también puede usar especificadores de transmisión :

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

Aquí, 0:v:0es la primera transmisión de video y 0:a:1es la segunda transmisión de audio.

slhck
fuente
¿Hay alguna manera de hacer esto dinámicamente? Digamos que quiero hacer esto solo para las pistas de audio del lenguaje X, y que ffmpeg lo tome.
Freedo
@Freedo Sí, consulte la documentación. Por ejemplo-map 0:m:language:eng
slhck el