Intenta comprender el código correctamente previamente a usarlo a tu trabajo si tquieres aportar algo puedes comentarlo.
Solución:
El método más eficiente es usar el mapeo negativo en el -map
opción para excluir flujos específicos (“pistas”) mientras se mantienen todos los demás flujos.
Quitar una secuencia/pista de audio específica
ffmpeg -i input -map 0 -map -0:a:2 -c copy output
-map 0
selecciona todos los flujos de la entrada.-map -0:a:2
luego anula la selección de la transmisión de audio 3. El índice de transmisión comienza a contar desde 0, por lo que la transmisión de audio 10 sería0:a:9
.
Eliminar todas las secuencias/pistas de audio
ffmpeg -i input -map 0 -map -0:a -c copy output
-map 0
selecciona todos los flujos de la entrada.-map -0:a
luego anula la selección de todos los flujos de audio de la entrada.
Quitar secuencias/pistas de audio específicas
Mantenga todo excepto las transmisiones de audio n.° 4 (en el desplazamiento 3) y n.° 7 (en el desplazamiento 6):
ffmpeg -i input -map 0 -map -0:a:3 -map -0:a:6 -c copy output
Eliminar todos los subtítulos y datos
ffmpeg -i input -map 0 -map -0:s -map -0:d -c copy output
Solo incluye video y audio
Este ejemplo no necesita usar ningún mapeo negativo.
ffmpeg -i input -map 0:v -map 0:a -c copy output
Eliminación de otros tipos de secuencias/pistas
Si desea eliminar otros tipos de transmisión, puede usar el especificador de transmisión apropiado.
v
– vídeo, como-map -0:v
a
– audio, como-map -0:a
(como se muestra arriba)s
– subtítulos, como-map -0:s
d
– datos, como-map -0:d
t
– archivos adjuntos, tales como-map -0:t
Extraer o eliminar un canal de audio específico
Usando una entrada estéreo y un filtro de división de canales. Ejemplo para obtener solo el canal correcto y generar un archivo de audio mono:
ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
-
channel_layout
es el diseño del canal del flujo de entrada. El valor predeterminado esstereo
. -
channels
enumera los canales que se extraerán como flujos de salida separados. El valor predeterminado esall
que extrae cada canal de entrada como un flujo individual separado. -
Ver
ffmpeg -layouts
para obtener una lista de diseños de canales aceptados (porchannel_layout
opción) y los nombres de los canales (porchannels
opción). -
Consulte FFmpeg Wiki: canales de audio para obtener más ejemplos.
Más información
-map
documentación de opciones- Wiki de FFmpeg: Mapa
Estás buscando -map
.
He cambiado a usar avconv
pero debería ser más o menos lo mismo.
Digamos que tiene un archivo llamado “input.vob” con una pista de video y dos de audio; y quieres tener “output.vob” con el video y el último audio.
Tu harías:
avconv -i input.vob -map 0:0 -c:v copy -map 0:2 -c:a copy output.vob
Debes notar que:
- yo no copie
-map 0:1
- no necesitaba hacer
-an
, porque hay pistas de audio. Sin embargo, si no hay ninguna pista de audio, es posible que deba usar un attribute. - A veces, las secuencias no están numeradas de la manera que he descrito, por ejemplo, el audio puede aparecer antes que el video.
- Si hay flujos de subtítulos allí, también debe descubrir cómo lidiar con ellos.
No puede trabajar en archivos “in situ”, debe guardarlos en un archivo diferente.
PD Es posible que quieras hacer esas preguntas en video.stackexchange.com la próxima vez.
Comentarios y calificaciones del post
Nos puedes patrocinar nuestro estudio fijando un comentario y dejando una puntuación te damos las gracias.