Tengo un archivo mp4 con estas secuencias ( avconv -i file.mp4
o ffmpeg -i file.mp4
):
Stream #0.0(eng): Audio: aac, 48000 Hz, stereo, fltp, 125 kb/s (default)
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, fltp, 384 kb/s
Stream #0.2(eng): Video: h264 (Main), yuv420p, 1280x568, 4027 kb/s, PAR 1:1 DAR 160:71, 23.98 fps, 2997 tbn, 50 tbc (default)
Stream #0.3(eng): Subtitle: c608 / 0x38303663, 0 kb/s
Stream #0.4(und): Subtitle: text / 0x74786574
Stream #0.5: Video: mjpeg, yuvj420p, 667x1000 [PAR 72:72 DAR 667:1000], 90k tbn
Estoy tratando de eliminar la primera transmisión de audio del archivo de esta manera:
avconv -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4
# OR #
ffmpeg -i file.mp4 -map 0 -map -0:0 -codec copy file-out.mp4
El problema es que me sale este error:
Could not write header for output file #0 (incorrect codec parameters ?): Operation not permitted
Entonces, verifiqué si algo andaba mal con el archivo mp4 en sí:
avprobe file.mp4
# OR #
ffprobe file.mp4
Y la salida dice:
Unsupported codec with id 0 for input stream 3
Unsupported codec with id 94213 for input stream 4
No tengo idea de lo que eso significa. (Aparentemente, algo anda mal con los subtítulos, pero obtuve el video de iTunes).
¿Qué ocurre?
¿Puedo simplemente obligar a avconv/ffmpeg a hacer lo que le pedí (es decir, quitar el flujo de audio y copiar el resto tal como está)? ¿Si es así, cómo?
¿Existe una mejor alternativa para remuxing, que sea la línea de comandos y se desarrolle activamente?
Aparentemente, me perdí los otros errores/advertencias en la salida de la consola antes del mensaje de error final, como sugirió @aergistal:
[mp4 @ 0x2645420] Codec for stream 0 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 1 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 2 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 3 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] Codec for stream 4 does not use global headers but container format requires global headers
[mp4 @ 0x2645420] track 2: could not find tag, codec not currently supported in container
Aparentemente, el cuarto flujo es un flujo de subtítulos CEA-608 , que durante los días de la transmisión de señales de televisión analógica eran datos de subtítulos integrados en los datos de video. Aparentemente, FFmpeg puede extraerlo pero no puede mezclarlo en un nuevo contenedor.
En cuanto a eliminar solo el audio, MP4Box puede ser de ayuda.
ffmpeg
actualmente no admite hacer lo que le pedí, y si el ticket está parcheado, es posible que lo haga en el futuro. No hay forma de obligar a ffmpeg a que lo haga, ¿verdad?
gian
llogan