У меня есть 2 аудиофайла:
- правильный.wav (длительность 3:07)
- некорректный.wav (длительность 3:10)
Они почти одинаковые, но сгенерированы с разными звуковыми шрифтами.
Проблема: второй файл запаздывает на несколько секунд.
Как я могу синхронизировать второй файл с первым? Может быть, есть какая-нибудь программа bash, которая могла бы определить появление первых громких звуков в первом звуке и сравнить правильный.wav с неправильным.wav, укоротить конец неправильного.wav файла.
Я знаю, что могу сделать это вручную, но мне нужно автоматическое решение для многих файлов.
Вот приблизительные решения, которые я нашел:
1) для обнаружения синхронизации звука использовать этот скрипт Python - https://github.com/jeorgen/align-videos-by-sound, но это не идеально, не на 100%.
2) использовать sox для вырезания/обрезки/сравнения/определения длительности звука (извлечение кода):
length1ok=$(sox correct.wav -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p')
length2ok=$(sox incorrect.wav -n stat 2>&1 | sed -n 's#^Length (seconds):[^0-9]*\([0-9.]*\)$#\1#p')
if [[ $length1ok == $length2ok ]]; then
echo "Everything OK: $length1ok = $length2ok"
else
echo "Fatal error: Not the same final files"
fi
diff=$(echo "$length2 - $length1" | bc -l)
echo "difference = $diff"
echo "webm $length1 not greater than fluid2 $length2"
sox correct.wav incorrect.wav pad 0 $diff
Комментарий к ответу UltrasoundJelly: Вот какой результат я получаю для вашего кода:
Вот какой результат мне нужен: