Estoy tratando de concatenar 15 archivos de audio wav, grabados como PCM lineal de 24 bits, 96 kHz. He realizado experimentos con ffmpeg, shntool y sox, con diferentes resultados.
Los archivos fueron creados por una grabadora Zoom H2n, que dividió las ~ 15 horas de grabación continua en varios archivos (en tiempo real) para acomodar las especificaciones de la tarjeta de memoria SD.
Los primeros 14 archivos tienen 2,147,385,344 bytes (1: 02: 08.04 en tiempo) y el último archivo tiene 1,838,248,046 bytes (53: 11.35 en tiempo). Los archivos originales informan una tasa de bits de 4,608 kb / s (usando ffmpeg -i).
Usando ffmpeg
Cree un archivo de texto con los nombres de archivo:
printf "file '%s'\n" ./*.WAV > mylist.txt
Concatenar los archivos:
ffmpeg -f concat -i mylist.txt -c copy output-ffmpeg.wav
Esto genera un archivo que tiene 31,901,151,444 bytes, pero reporta solo 53:08 en el tiempo. ffmpeg -i informa una tasa de bits de 80,049 kb / s, mucho más alta que la original de 4,608 kb / s.
Usando shntool
Únete a los archivos:
shntool join -r none 01.wav 02.wav [etc]
Esto genera un archivo de 31,901,151,386 bytes, diferente de la concatenación de ffmpeg, pero también se informa como 53: 08.16 a tiempo. Nuevamente, ffmpeg -i informa una tasa de bits de 80,049 kb / s, mucho más alta que la original de 4,608 kb / s.
Usando Sox
Concatenar los archivos:
sox 01.wav 02.wav [etc] output-sox.wav
Esto genera un archivo que tiene 31,901,151,422 bytes, diferente de ffmpeg y shntool, pero se informa como 01: 02: 08.26 a tiempo. ffmpeg -i informa una tasa de bits de 68,452 kb / s, mucho más alta que la original de 4,608 kb / s pero diferente a las conversiones de ffmpeg o shntool.
Preguntas
1) ¿Cómo puedo hacer que el archivo refleje que es tiempo real? Llevar esta grabación de 31 Gb / ~ 15 horas al software de audio que cree que solo tiene una duración de ~ 53 minutos probablemente sea problemático.
2) ¿Por qué las tres concatenaciones difieren en el tamaño del archivo? ¿Hay una bandera o configuración que debería usar para, por ejemplo, rellenar la longitud por alguna razón? ¿Los diferentes tamaños de archivo son una pista de por qué los archivos piensan que solo tienen 53:08 o 01:02:08 de largo?
Cuando vi por primera vez el 53:08 pensé: Ah, está escribiendo la duración del archivo final en el encabezado, pero la duración del archivo final es en realidad 53:11. Cuando vi por primera vez el 01: 02: 08.26 pensé, Ah, está escribiendo la duración del PRIMER archivo, pero lamentablemente, no (cerca, pero no exacto).
Parece que mi mejor pista es la tasa de bits incorrecta (?) De los archivos concatenados. Me sorprende que una copia de flujo o concatenación de archivos cambie esto. ¿Quizás es solo un error de metadatos?