6

Я хочу слушать определенные подкасты на своем телефоне, но у меня есть две общие проблемы:

  1. Звук в каком-то странном формате (некоторые не воспроизводятся на моем телефоне).
  2. Звук медленный.

Я хочу использовать что-то вроде sox или avconv для массового преобразования файлов. Поскольку речь идет только о голосе и идет по мобильному телефону, для меня лучше всего подойдут небольшие файлы низкого качества. У меня был хороший успех с использованием avconv:

avconv -i weird.wma normal.ogg

К сожалению, эта команда создает огромный ogg-файл, и я не могу заставить его играть быстрее. В идеале этот конкретный файл должен воспроизводиться со скоростью 170% от первоначальной скорости.

1 ответ1

9

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .