Конвертировать с FFmpeg
FFmpeg имеет встроенный аудио фильтр для изменения темпа без изменения высоты тона.
Нам нужно закодировать файл в какой-нибудь формат, который воспроизводит ваш телефон. Это зависит от телефона, конечно. Многие современные смартфоны, такие как AAC audio:
ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libfaac -q:a 100 final.m4a
Здесь вы можете изменить качество с помощью опции -q:a
где значение в процентах и выше означает лучшее.
Или звук MP3 с (средним) качеством 4, где меньше значит лучше (0, что дает около 245 кбит / с):
ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libmp3lame -q:a 4 final.mp3
Если ваш телефон не поддерживает ничего из этого, нам придется копать дальше. О, и здесь я использую ffmpeg
синоним avconv
. Они не совсем одинаковые, но для вышеупомянутых случаев вы можете использовать любой инструмент. Если ваша версия FFmpeg или avconv не содержит FAAC или LAME, получите статическую сборку Linux со страницы загрузки FFmpeg .
Если вам не нравятся фильтры FFmpeg, вот другой подход:
Извлечь сырое аудио
Прежде всего, вам необходимо извлечь необработанный аудиопоток в несжатом формате, например, 16-битный звук PCM Stereo в контейнере WAV.
ffmpeg -i weird.wma temp.wav
Теперь мы можем использовать файл temp.wav
для сокращения аудио. У нас есть несколько вариантов для этого:
Вариант 1: SoX
SoX предлагает несколько различных фильтров, которые позволяют изменять скорость, высоту звука или темп. Простое изменение скорости увеличит высоту тона, чтобы компенсировать длину, так что это может звучать неестественно.
Фильтр tempo
использует продвинутый алгоритм для сокращения файлов, но сохраняет высоту тона, разделяя его на меньшие временные окна и затем "объединяя" их, тем самым ускоряя темп. Например:
sox temp.wav output.wav -tempo 1.7
Это может звучать немного странно. Если это так, прибегните к варианту 2.
Вариант 2: Экстремальный звук Пола
Эта программа обещает предложить лучшее качество, чем SoX, и есть версия командной строки, написанная на Python, доступная от GitHub. Команда может выглядеть так: имейте в виду, что по умолчанию файл растягивается, поэтому для его сокращения мы вычисляем обратное значение 1.7, то есть 0.59:
python paulstretch_stereo.py -s 0.59 temp.wav output.wav
Конвертировать необработанный звук в сжатый файл
Теперь у нас есть сокращенный файл WAV, но он все еще не сжат, поэтому нам нужно снова сжать его. Обратитесь к опциям в верхней части этого поста для различных форматов.
ffmpeg -i output.wav -c:a …
Методы non-ffmpeg, описанные выше, потеряют ваши метаданные; Вы можете добавить его снова при преобразовании output.wav в сжатый формат, например так:
ffmpeg -i output.wav -i weird.wma -map 0 -map_metadata 1 -c:a ...