He estado tratando de eliminar transmisiones de audio innecesarias de un archivo MKV (Matroska). La razón por la que quiero hacer esto es para evitar tener que seleccionar manualmente la transmisión deseada en Windows Media Player.
El archivo de entrada proporciona la siguiente información de ffmpeg:
Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000
Como quiero las transmisiones 0, 1 y 3 (sub), mi comando ffmpeg se ve así:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv
que extrañamente da el error:
At least one output file must be specified
Eliminar los subtítulos:
ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv
me da esto:
Number of stream maps must match number of output streams
Parece que realmente no entiendo cómo funciona la opción "mapa". ¿Alguien me ayudaría a resolverlo?
--atracks
opción ya no existe, en su lugar uno debe usar cualquiera--audio-tracks
o--video-tracks
.Intenta
-f
forzar el formato especificado:fuente
Realmente hay dos problemas separados aquí:
En la primera línea de comando, el orden de los parámetros puede ser incorrecto. Creo que el
-newaudio
interruptor debe estar al final, después del nombre del archivo de salida.La segunda línea de comando, "Eliminar los subtítulos", dado que el archivo de entrada tiene subtítulos, debe usar el
-sn
interruptor para eliminarlos. De lo contrario, parece que FFmpeg quiere al menos uno especificado en la-map
lista.fuente
En su primer comando, no especificó que test.mkv era su archivo de salida. Parece que necesita cambiar esa parte para que sea algo así como
... -c copy test.mkv
especificar el códec... -c:s copy test.mkv
.Y no estoy seguro de qué
-newsubtitle
está haciendo esa bandera allí. Pero si tiene un archivo de subtítulos que desea agregar, debería poder hacer otra marca de entrada-i input.srt
. Vea este enlace para eso.En su segundo comando, creo que parece que está tratando de mapear la secuencia de video e intentando copiarla. Por lo tanto, puede intentar eliminar la
-vcodec copy
instrucción y debería funcionar. :)fuente
l
especificador de flujo .