Инструмент для ускорения / конвертации аудио файла

7126
User1

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

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

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

avconv -i weird.wma normal.ogg

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

6
Ваш плеер не может воспроизводить файлы `wma`, но он может воспроизводить` ogg`? Scott Chamberlain 11 лет назад 0

1 ответ на вопрос

9
slhck

Конвертировать с 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 ... 
Мне нравится первый вариант, но не потеряю ли я метаданные в файле при преобразовании в WAV? Разве у ffmpeg нет эквивалентного ключа -tempo? User1 11 лет назад 0
Вы бы потеряли все метаданные, да. Я обновил свой ответ с помощью встроенного подхода FFmpeg, который теоретически должен сохранять ваши метаданные. slhck 11 лет назад 0

Похожие вопросы