Tengo un archivo de video mp4 con múltiples pistas de audio. Me gustaría quitar el resto de las pistas y mantener solo una. ¿Cómo hago esto?
video-editing
tshepang
fuente
fuente
Respuestas:
Primero ejecute
ffmpeg -i file.mp4
para ver qué secuencias existen en su archivo. Debería ver algo como esto:Luego, ejecute
ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
para copiar la transmisión de video y la segunda transmisión de audionew_file.mp4
.fuente
Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
: para solucionarlo, simplemente cambie el orden de los argumentos de esta manera:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
tener corrientes idénticas para audio, vídeo, sino también los subtítulos:ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.Problema relacionado: la eliminación de todas las pistas de audio de un archivo mp4 se puede hacer así:
fuente
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
Pero agregué esas banderas y sigue siendo el mismo ...?Identificar números de transmisión:
Use
-map _file_:_stream_
para seleccionar qué flujos procesar y generarver: https://ffmpeg.org/ffmpeg.html#Advanced-options
fuente
Podrías probar
avidemux
qué maneja solo un archivo de audio internamente (y por lo tanto te obliga a seleccionar una pista específica). Nunca lo he probado con .mp4 pero funciona con otros formatos.fuente
Solía Avidemux (GUI) varias veces, y ffmpeg (consola).
En Avidemux, elige "Audio" -> "Seleccionar pistas" en el menú principal; luego guarde su video como un archivo nuevo.
Curiosamente, en algunos casos, Avidemux produjo una salida "mejor" que ffmpeg.
por si acaso, Avidemux y ffmpeg están en el repositorio estándar de Fedora Linux. (Estoy seguro de que también son estándar en otros sabores de Linux).
fuente
-vn
o-an
eliminará todas las pistas de video o audio. El suministro-vn -acodec copy
eliminará el video;-an -vcodec copy
eliminará todo el audio.-vcodec copy
especifica que ffmpeg debe hacer una copia directa de la pista de video existente (y no hacer ningún procesamiento / codificación de la misma). Si no lo especifica, seguirá funcionando, pero ffmpeg puede volver a codificar la pista de video existente y la operación utilizará más CPU y puede llevar mucho más tiempo.fuente
Usando avidemux en la línea de comandos.
(En la GUI de Avidemux, como se describe en https://unix.stackexchange.com/a/85834/4319 arriba, simplemente selecciona / deselecciona las pistas de audio y guarda el archivo. (Todo se copia en el nuevo AVI).)
Observé qué tipo de proyectos se guardan como proyectos SpiderMonkey o TinyPy para mis acciones, y resultó que el proyecto SpiderMonkey (JavaScript) carece de las acciones de selección de pistas de audio que necesitaba, pero el proyecto TinyPy (Python) sí tenía ellos.
Eliminé todo lo que no estaba relacionado (una docena de líneas innecesarias), y esto es lo que obtuve en mi
some_series.py
:Deja la pista 1, pero deja la pista 0.
Luego ejecuté una conversión por lotes de muchos archivos con un comando como este:
Copia todo, pero elimina todo menos la pista de audio necesaria.
Aprendí la forma de ejecutar avidemux desde la línea de comandos de https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , aunque no mencionan los scripts de Python, solo los de JS ( que no funcionó para mí)
fuente
Si no le importa que el programa sea GUI, con el editor de video de Blender puede hacer eso y mucho más.
fuente
El
ffmpeg
programa ha sido reemplazado poravconv
.avconv
tiene un uso muy similar affmpeg
, por lo tanto, todos los comandos en esta publicación pueden ser algo como:Siga este enlace para instalar
avconv
si está en Ubuntu.fuente
FFMPEG podría ser una solución útil para usted.
fuente