Respuestas:
Primero ejecute ffmpeg -i file.mp4
para ver qué secuencias existen en su archivo. Debería ver algo como esto:
Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
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 audio new_file.mp4
.
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í:
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
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:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
Use -map _file_:_stream_
para seleccionar qué flujos procesar y generar
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
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.
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).
-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.
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
:
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.audioClearTracks()
adm.audioAddTrack(1)
Deja la pista 1, pero deja la pista 0.
Luego ejecuté una conversión por lotes de muchos archivos con un comando como este:
for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done
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í)
El ffmpeg
programa ha sido reemplazado por avconv
. avconv
tiene un uso muy similar a ffmpeg
, por lo tanto, todos los comandos en esta publicación pueden ser algo como:
avconv <old ffpmeg command line options>
Siga este enlace para instalar avconv
si está en Ubuntu.
FFMPEG podría ser una solución útil para usted.
$ man ffmpeg