- BrainTools - https://www.braintools.ru -

OpenAI взимает оплату поминутно, так что сделаем минуты короче

OpenAI взимает оплату поминутно, так что сделаем минуты короче - 1

Хотите ускорить и удешевить транскрибации OpenAI? Просто повысьте скорость аудио.

Я имею в виду буквально. Перед транскрибацией увеличьте скорость аудио в два или в три раза в ffmpeg [1]. Благодаря этому вы потратите меньше токенов и вам придётся меньше ждать, а качество транскрипции почти не снизится.

Вот и всё!

Ниже показан скрипт, сочетающий все мои трюки для выполнения этой задачи. Для его работы необходимо установить yt-dlp [2]ffmpeg [3] и llm [4].

# Извлекаем аудио из видео
yt-dlp -f 'bestaudio[ext=m4a]' --extract-audio --audio-format m4a -o 'video-audio.m4a' "https://www.youtube.com/watch?v=LCEmiRjPEtQ" -k;
 
# Создаём MP3-версию с низким битрейтом и утроенной скоростью
ffmpeg -i "video-audio.m4a" -filter:a "atempo=3.0" -ac 1 -b:a 64k video-audio-3x.mp3;
 
# Отправляем её OpenAI на транскрибацию
curl --request POST 
  --url https://api.openai.com/v1/audio/transcriptions 
  --header "Authorization: Bearer $OPENAI_API_KEY" 
  --header 'Content-Type: multipart/form-data' 
  --form file=@video-audio-3x.mp3 
  --form model=gpt-4o-transcribe > video-transcript.txt;
 
# Получаем краткое изложение
 
cat video-transcript.txt | llm --system "Summarize the main points of this talk."

Я сэкономил вам время, сразу перейдя к делу, но если вы хотите подробностей истории о том, как я случайно обнаружил этот способ, пытаясь создать краткое изложение сорокаминутного доклада Андрея Карпаты, то продолжайте чтение.

Вам стоит продолжить чтение, если вы недоумеваете, почему я просто не воспользовался встроенной автотранскрибацией YouTube. Краткий ответ будет таким: я недотёпа, считавший (ошибочно), что она недоступна. Поэтому мне пришлось идти по более сложному пути.

Я просто хотел краткого изложения

Бывший коллега прислал мне ссылку на доклад [5] Андрея Карпаты о том, как ИИ меняет мир программного обеспечения. Я ничего не знал об Андрее, но слышал, что он работал в Tesla. К тому же этот доклад входил в серию докладов Y Combinator и был длинным, поэтому я подумал: а действительно ли мне нужно его смотреть? Наверняка это ещё один рассказ о том, как «ИИ меняет всё» от привычного докладчика для привычной аудитории.

Мне показалось, что идеально было бы скинуть доклад в LLM, чтобы она создала краткую выжимку из него. Однако я уважал отправившего мне ссылку человека и хотел отдать ему должное: при помощи ИИ создать изложение, слепо довериться и ответить бывшему коллеге, сделав вид, что я посмотрел видео.

Первым делом я решил отправить транскрибированный текст в LLM, чтобы получить выжимку. Раньше я уже использовал скрипт [6] для скачивания автоматически сгенерированных транскрипций с YouTube:

yt-dlp --all-subs --skip-download 
  --sub-format ttml/vtt/best 
  [url]

Однако по какой-то причине субтитры не скачивались. Снова и снова возникала ошибка [7]!

Позже, покумекав и перечитав документацию [8], я понял, что моя версия утилиты (2025.04.03) устарела.

Обновившись до версии 2025.06.09, я решил проблему, но почему-то не попробовал сделать это до того, как углубиться в совершенно ином направлении. Что ж, по крайней мере, мои открытия позволили написать небольшую статью.

Если вам больше интересно создание кратких изложений транскрипций и не так важны тонкости автотранскрибации и токенов, то можете на этом закончить.

Мой процесс транскрибации

У меня уже был старый самодельный скрипт, который извлекает аудио из любого URL видео, передаёт его локально в whisper [9] и сохраняет транскрипцию в текстовый файл.

Скрипт работал, но в то время я сидел в кофейне без доступа к розетке, поэтому не мог воспользоваться локальным инференсом на своём M3 MacBook Air. Я подумал, что можно попробовать перекинуть эту задачу OpenAI API [10]. Наверно, это будет быстрее?

Тестируем инструменты транскрибации OpenAI

Для выполнения этой задачи при помощи whisper-1 потребовалось бы довольно много времени, но она бы выдала нужный результат. Если бы я просто выбрал знакомую мне модель, то на этом всё могло бы закончиться.

Однако из любопытства я первым делом воспользовался более новой моделью gpt-4o-transcribe. Она предназначена для обработки мультимодальных входных данных, обещая при этом более быстрые результаты.

У меня сразу же возникла ещё одна проблема: максимальная длина аудио ограничена 25 минутами, а доклад длился почти 40 минут.

Попробуем что-нибудь очевидное

Сначала я подумал, что можно как-то вырезать из аудио ненужное время, но не было очевидно, какие 14 минут из доклада не так важны. Вырезав начало и конец, я бы сэкономил максимум минуту.

На секунду я задумался о том, чтобы вырезать один-два куска из середины, но делать я так не стал. Хотя, возможно, этого бы всё равно было достаточно для создания релевантного изложения?

А потом меня осенило: почему бы просто не ускорить аудио перед отправкой? Люди постоянно слушают подкасты в полтора-два раза быстрее.

Я накидал небольшой скрипт [1]:

ffmpeg -i video-audio.m4a -filter:a "atempo=2.0" -ac 1 -b:a 64k video-audio-2x.mp3

Ура! Теперь можно было отправить OpenAI файл длиной примерно 20 минут.

Я загрузил его… и всё сработало великолепно! Узрите краткое изложение [11], благодаря которому я с достаточной долей уверенности смог ответить коллеге, что посмотрел видео.

Но здесь было и нечто… интересное. Возможно, я наткнулся какой-то очевидный, простой хак? Может быть, им пользуются уже все, зарабатывающие на транскрибации аудио, а я случайно наткнулся на их секрет?

Нужно было копать глубже.

Почему это работает: наш мозг забывает, и ИИ тоже

Здесь я могу провести интересную параллель с оптимизацией изображений. Традиционно существуют форматы файлов сжатия с потерями и без них. Понятие «сжатие с потерями» говорит само за себя — чем сильнее мы ужимаем байты, тем хуже будет качество. Нас это устраивает, потому что человеческий мозг [12] редко замечает артефакты и несовершенства.

Но даже в форматах файлов «без потерь» есть трюки, позволяющие полагаться на ограничения человеческого восприятия [13]. Один из главных примеров — снижение количества уникальных цветов палитры в PNG или GIF. Вы удивитесь, насколько часто палитра из 64 цветов (или меньше) оказывается вполне достаточной и воспринимается, как существенно более богатая.

Я провожу параллель между этим и способностью мозга понимать текст с опечатками, пропущенными словами и другими ошибками, например, перестановленными буквами [14]. Наш мозг любит заполнять пробелы, а если смотреть на мир через увеличительное стекло, можно заметить немало таких пробелов.

Ускорив аудио, я не буду время от времени улавливать самые тихие звуки и короткие слова, но, кажется, это не повредит моей способности понимания услышанного, пусть мне и придётся слушать сосредоточеннее. Похоже, модели транскрибации аудио тоже неплохо с этим справляются.

Но насколько далеко можно зайти? И действительно ли это экономит деньги?

Оказывается, что да. OpenAI взимает оплату за транскрибацию [15] в зависимости от аудиотокенов, количество которых зависит от длительности входных данных. Чем быстрее аудио, тем меньше в нём секунд, а значит, и меньше токенов.

Вот округлённые значения, полученные на основании анализа сорокаминутного аудиофайла:

Скорость

Длительность(секунды)

Аудиотокены ввода

Стоимость токенов ввода

Стоимость токенов вывода

1x (исходная)

2372

— (слишком длинное аудио)

2x

1186

11856

$0,07

$0,02

3x

791

7904

$0,04

$0,02

Ускорив аудио в три раза, мы сэкономили на входных токенах 33% от стоимости! Однако основная часть затрат на эти модели транскрибации всё равно будет приходиться на токены вывода. Их стоимость составляет $10 за миллион токенов, а на момент написания статьи аудиотокены ввода стоили $6 за миллион.

Также интересно отметить, что токены вывода для ускоренных вдвое и втрое версий оказались абсолютно одинаковыми: 2048. Наверно, это логично [16]? В какой-то степени, токены вывода — отражение способности модели понимать ввод и создавать краткую сводку. Я сделал вывод, что «кратко изложенная» версия (то есть с уменьшенным количеством токенов) того же аудио обеспечивает ту же степень понятности.

Вероятно, это отражает и общее ограничение в 4096 токенов на транскрибацию при работе с моделью gpt-4o-transcription. Подозреваю, что половина окна контекста зарезервирована под токены вывода и это, по сути, отражает наш запрос использовать его полностью. Наверно, при более длинных транскрипциях результаты будут становиться всё менее слабыми.

Но вернёмся к деньгам.

Наш приблизительный расчёт одной транскрибации будет выглядеть примерно так:

6 * (audio_input_tokens / 1_000_000) + 10 * (text_output_tokens / 1_000_000);

Это не совсем соответствует примерной оценке в $0,006 за минуту, указанную на странице тарифов, по крайней мере, для увеличенной вдвое скорости. Эта версия (19-20 минут) стоит примерно $0,09, а ускоренная втрое (13 минут) стоит примерно $0,07, если я правильно всё сложил.

# Цена за удвоенную скорость
6 * (11_856 / 1_000_000) + 10 * (2_048 / 1_000_000) = 0.09

# Цена за утроенную скорость
6 * (7_904 / 1_000_000) + 10 * (2_048 / 1_000_000) = 0.07

Похоже, приблизительная оценка привязана не только к длине аудио, но и к предположениям о том, сколько токенов в минуту будет генерироваться при обычном темпе речи.

И это любопытно! Интересно, чтобы сказал по этому поводу Джон Мощитта [17]. [Прим. пер.: Джон Мощитта — это актёр, певец и диктор, установивший в 1984 году рекорд,  произнеся 534 слова менее чем за 60 секунд.]

Мы легко можем сравнить эти затраты с whisper-1, потому что в прейскуранте указана точная, а не «приблизительная» цена — $0,006 за минуту. Предполагаю, что имеется в виду минута обрабатываемого аудио, а не минута инференса.

На самом деле, модель gpt-4o-transcription выглядит более выгодной.

Скорость

Длительность (секунды)

Стоимость

1x

2372

$0,24

2x

1186

$0,12

3x

791

$0,08

Позволяет ли это экономить?

В целом, да! Строгие измерения я не проводил, но, похоже, просто ускорив аудио, мы снизили затраты на транскрибацию сорокаминутного аудиофайла на 23% (с $0,09 до $0,07).

Если бы мы сравнили это с неускоренной версией аудио, обрезанной до ограничения в 25 минут, то уверен, что экономия оказалась бы ещё более впечатляющей. Можно прикинуть это на основании таблицы для whisper-1. Можно сказать, что наш способ позволил снизить затраты на 67%!

Точна ли транскрибация?

Этого я не знаю: я не смотрел видео, ха-ха, ведь в этом и был весь смысл задачи. И если это заставляет вас чувствовать себя неуютно, то терпите, таким будет наше будущее.

Я не сравнивал пословно, но после фрагментарных проверок ускоренные вдвое и втрое версии выглядят вполне прилично. Четырёхкратное ускорение оказалось слишком быстрым — транскрипция становилась смехотворно странной. То есть ускорение в два-три раза позволяет соблюсти баланс между эффективностью и качеством. Однако, разумеется, это зависит от того, насколько быстро люди говорят в оригинале.

Почему не ускориться в четыре раза?

Когда я ускорил видео вчетверо, то результаты оказались комичными [18].

Output of a 4x transcription mostly repeating "And how do we talk about that?" over and over again

Однако, я, разумеется, всё равно попробовал [19] создать краткое изложение.

Ну, всё равно не самый худший доклад, который мне доводилось слушать!

Подведём итог

Итак, если вкратце, чтобы сэкономить время и деньги, при необходимости транскрибации аудио можно попробовать удвоить или утроить его скорость. Разумеется, при этом, как всегда, придётся мириться со снижением качества, но экономия выйдет приличной.

Это простой, быстрый и на удивление эффективный способ.

Краткое изложение поста

  • OpenAI взимает оплату за транскрибацию в зависимости от длительности аудио (whisper-1) или от количества токенов (gpt-4o-transcribe).

  • Для экономии времени и денег можно перед загрузкой ускорить аудио при помощи ffmpeg.

  • Это уменьшает количество аудиотокенов (или длительность), снижая цену.

  • Хорошо подходит ускорение в два или три раза.

  • Как насчёт ускорения в четыре раза? Наверно, это перебор, хотя попробовать было забавно.

Если вы найдёте ошибки в моих вычислениях, у вас возникнут вопросы или вы обнаружите более строгое исследование с качественным сравнением разных скоростей, то напишите мне [20]!

Автор: PatientZero

Источник [21]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/16629

URLs in this post:

[1] ffmpeg: https://gist.github.com/georgemandis/4fd62bf5027b7a058f913d5dc32c2040

[2] yt-dlp: https://github.com/yt-dlp/yt-dlp

[3] ffmpeg: https://ffmpeg.org/

[4] llm: https://github.com/simonw/llm

[5] доклад: https://www.youtube.com/watch?v=LCEmiRjPEtQ

[6] скрипт: https://gist.github.com/simonw/9932c6f10e241cfa6b19a4e08b283ca9

[7] ошибка: http://www.braintools.ru/article/4192

[8] документацию: https://github.com/yt-dlp/yt-dlp?tab=readme-ov-file#subtitle-options

[9] whisper: https://github.com/openai/whisper

[10] OpenAI API: https://platform.openai.com/docs/guides/speech-to-text

[11] Узрите краткое изложение: https://gist.github.com/georgemandis/b2a68b345262b94782fa6b08e41fbcf2

[12] мозг: http://www.braintools.ru/parts-of-the-brain

[13] восприятия: http://www.braintools.ru/article/7534

[14] перестановленными буквами: https://en.wikipedia.org/wiki/Transposed_letter_effect

[15] взимает оплату за транскрибацию: https://platform.openai.com/docs/pricing

[16] логично: http://www.braintools.ru/article/7640

[17] Джон Мощитта: https://en.wikipedia.org/wiki/John_Moschitta_Jr.

[18] комичными: https://gist.github.com/georgemandis/1ec4ef084789f92ee06ac6283338a194

[19] попробовал: https://gist.github.com/georgemandis/1ec4ef084789f92ee06ac6283338a194#file-summarization-md

[20] напишите мне: https://george.mand.is/contact

[21] Источник: https://habr.com/ru/articles/922070/?utm_campaign=922070&utm_source=habrahabr&utm_medium=rss

www.BrainTools.ru

Rambler's Top100