Конвертировать с 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 ...