Я должен конвертировать кучу файлов .opus в .wav, используя ffmpeg. При вызове
ffmpeg -i input_file.opus -acodec pcm_s16le -ac 1 -ar 16000 output_file.wav
я получаю
Unsupported huge granule pos -123480
Это не зависит от указанных параметров c ffmpeg. Пример файла .opus можно найти здесь . Файл .opus является частью звукового потока, извлеченного из видео YouTube в формате контейнера .mkv с .opus в качестве аудиопотока с максимально доступным качеством. Соответствующий вызов ffmpeg был
ffmpeg -ss 00:15:00.00 -i input_file.mkv -to 00:15:00.00 -vn -acodec copy output_file.opus
Строка, вызывающая исходное исключение:
if (os->granule > (1LL << 62))
{av_log(avf, AV_LOG_ERROR, "Unsupported huge granule pos %"PRId64 "\n", os->granule);
return AVERROR_INVALIDDATA;
}
Его можно найти в строках 121- 124 из этого файла. granule
определяется как uint_64t здесь .
Итак, я до сих пор считал, что, вероятно, uint, в конце концов, не должен быть отрицательным. Я не уверен, произошла ли ошибка во время извлечения аудио, но остается незамеченной до тех пор, пока не будет предпринята попытка конвертировать указанное аудио, или ошибка присутствует в фактическом преобразовании. Я также не понимаю, что означает «гранула» в этом контексте, но, вероятно, мне не нужно.