Имеется 52 файла в форматах Opus-Webm и AAC-MP4. (Звуковые дорожки от The Jungle Show, если интересно.) В каждом файле вначале идёт 7-8 секунд заставка, затем собственно песня, затем ещё секунд 40-42 заставка. Требуется обрезать заставки с минимальной потерей качества. Проблема в том, что время начала и конца песни относительно краёв файла в разных файлах могут отличаться на 1-2 секунды. Но они отделены от заставок, минимум, 1 секундой тишины. Поэтому требуется разрезать файл по тишине, положение которой известно приблизительно, и сохранить звук с минимальным перекодированием. Как это автоматизировать?
Изучать pydub пока не хочется.
Можно проанализировать каждый файл ffmpeg-ом:
ffmpeg -i $InFileName -af silencedetect=n=-50dB:d=0.5 -f null -
и результат подставить в
ffmpeg -ss $StartTime -i $InFileName -acodec copy -t $LengthTime $OutFileName
Но остаётся задача парсить вывод ffmpeg-овского silencedetect. Готовые решения есть?
И сразу вопрос по ffmpeg:
ffmpeg -ss 8.2 -i file1.m4a -acodec copy -t 261 out1.m4a
ffmpeg -ss 8.2 -i file2.webm -acodec copy -t 261 out2.webm
1-я команда копирует кусок длиной 261 секунд начиная с 8.2 секунд от начала файла. 2-я команда копирует кусок длиной 261 секунд начиная с начала файла. Почему так происходит? Слишком далеко от ключевого фрейма? Как сделать, чтобы работало и для opus/webm, но перекодировало только крайние фреймы, прилегающие к точке обрезки?