Я пытаюсь объединить 15 аудио-файлов WAV, записанных в формате 24-бит, 96 кГц, линейный PCM. Я провел эксперименты с ffmpeg, shntool и sox, с разными результатами.
Файлы были созданы рекордером Zoom H2n, который разделил ~ 15 часов непрерывной записи на несколько файлов (в режиме реального времени) для соответствия спецификации карты памяти SD.
Первые 14 файлов имеют размер 2 147 385 344 байта (1:02:08.04 по времени), а последний файл - 1 838 248 046 байт (53:11,35 по времени). Исходные файлы сообщают о скорости передачи данных 4608 кбит / с (используя ffmpeg -i).
Использование ffmpeg
Создайте текстовый файл с именами файлов:
printf "file '%s'\n" ./*.WAV > mylist.txt
Объединить файлы:
ffmpeg -f concat -i mylist.txt -c copy output-ffmpeg.wav
Это создает файл размером 31 901 151 444 байта, но со временем 53:08. ffmpeg -i сообщает о битрейте 80,049 кбит / с, что намного выше, чем первоначальные 4608 кбит / с.
Использование shntool
Присоединяйтесь к файлам:
shntool join -r none 01.wav 02.wav [etc]
Это создает файл, который составляет 31 901 151 386 байт - отличается от сцепления ffmpeg - но также сообщает как 53:08.16 по времени. Опять же, ffmpeg -i сообщает о битрейте 80,049 кбит / с, что намного выше, чем первоначальные 4608 кбит / с.
Используя Sox
Объединить файлы:
sox 01.wav 02.wav [etc] output-sox.wav
Это создает файл, который составляет 31 901 151 422 байта - отличается от ffmpeg и shntool - но сообщает как 01:02:08.26 во времени. ffmpeg -i сообщает о скорости передачи битов 68 452 кбит / с, что намного выше, чем исходные 4608 кбит / с, но отличается от конверсий ffmpeg или shntool.
Вопросы
1) Как я могу сделать так, чтобы файл отражал его фактическое время? Перенос этой записи со скоростью 31 Гб / ~ 15 часов в аудиопрограмму, которая считает, что она длится всего ~ 53 минуты, может быть проблематичной.
2) Почему три объединения отличаются по размеру файла? Есть ли флаг или настройка, которую я должен использовать, например, чтобы дополнить длину по какой-то причине? Являются ли файлы разных размеров ключом к пониманию того, почему файлы думают, что они имеют длину только 53:08 или 01:02:08?
Когда я впервые увидел 53:08, я подумал:«Ах, он записывает длительность окончательного файла в заголовок - но длительность окончательного файла на самом деле составляет 53:11». Когда я впервые увидел 01:02:08.26, я подумал:«Ах, он пишет продолжительность файла FIRST, но, к сожалению, нет (близко, но не точно).
Кажется, моя лучшая подсказка - неправильная (?) битрейт объединенных файлов. Я удивлен, что потоковая копия или конкатенация файлов изменяет это. Возможно, это просто ошибка метаданных?