J'essaie de concaténer 15 fichiers audio wav, enregistrés en 24 bits, 96 kHz, PCM linéaire. J'ai fait des expériences avec ffmpeg, shntool, et sox, avec des résultats différents.
Les fichiers ont été créés par un enregistreur Zoom H2n, qui a divisé les ~15 heures d'enregistrement continu en plusieurs fichiers (en temps réel) pour s'adapter aux spécifications de la carte mémoire SD.
Les 14 premiers fichiers font chacun 2 147 385 344 octets (1:02:08.04 dans le temps) et le dernier fichier fait 1 838 248 046 octets (53:11.35 dans le temps). Les fichiers originaux ont un débit binaire de 4 608 kb/s (en utilisant ffmpeg -i).
Utilisation de ffmpeg
Créez un fichier texte avec les noms de fichiers :
printf "file '%s'\n" ./*.WAV > mylist.txt
Concaténer les fichiers :
ffmpeg -f concat -i mylist.txt -c copy output-ffmpeg.wav
Cela génère un fichier de 31 901 151 444 octets, mais qui n'indique que 53:08 dans le temps. ffmpeg -i indique un débit binaire de 80 049 kb/s, bien plus élevé que les 4 608 kb/s d'origine.
Utilisation de shntool
Joignez les dossiers :
shntool join -r none 01.wav 02.wav [etc]
Cela génère un fichier de 31 901 151 386 octets -- différent de la concaténation de ffmpeg -- mais qui indique également une durée de 53:08.16. Encore une fois, ffmpeg -i rapporte un débit binaire de 80 049 kb/s, bien plus élevé que les 4 608 kb/s d'origine.
Utilisation de Sox
Concaténer les fichiers :
sox 01.wav 02.wav [etc] output-sox.wav
Cela génère un fichier de 31 901 151 422 octets -- différent de celui de ffmpeg et de shntool -- mais qui indique 01:02:08.26. ffmpeg -i indique un débit binaire de 68 452 kb/s, bien plus élevé que les 4 608 kb/s d'origine mais différent des conversions de ffmpeg ou de shntool.
Questions
1) Comment puis-je faire en sorte que le fichier reflète l'heure réelle ? Introduire cet enregistrement de 31 Go / ~15 heures dans un logiciel audio qui pense qu'il ne dure que ~53 minutes risque d'être problématique.
2) Pourquoi les trois concaténations diffèrent-elles en termes de taille de fichier ? Existe-t-il un drapeau ou un paramètre que je devrais utiliser pour, par exemple, compléter la longueur pour une raison quelconque ? Les différences de taille de fichier sont-elles un indice de la raison pour laquelle les fichiers pensent qu'ils ne font que 53:08 ou 01:02:08 ?
Quand j'ai vu pour la première fois le 53:08, j'ai pensé, Ah, c'est l'écriture de la durée du fichier final dans l'en-tête -- mais la durée du fichier final est en fait 53:11. Quand j'ai vu la première fois le 01:02:08.26, j'ai pensé, Ah, c'est l'écriture de la durée du PREMIER fichier, mais malheureusement, non (proche, mais pas exact).
Il semble que mon meilleur indice soit le débit binaire incorrect ( ?) des fichiers concaténés. Je suis surpris qu'une copie de flux ou une concaténation de fichiers change cela. Peut-être s'agit-il simplement d'une erreur de métadonnées ?