
Чому я створив власний безлімітний транскриптор аудіо та відео
https://ift.tt/cKrt7na
Ми всі це знаємо. У вас є масивний звуковий файл — двохгодинне інтерв’ю, довга лекція чи записана зустріч — і вам просто потрібно перетворити його на текст.
Ви швидко шукаєте «free audio to text transcriber» і знаходите десятки онлайн-інструментів. Але є підступ. Після завантаження файлу вам видають платний доступ: «Розмір файлу перевищує ліміт» або «Оновіть до Pro, щоб транскрибувати понад 60 хвилин».
Нещодавно я зіштовхнувся з точно такою проблемою. Мені потрібен надійний транскриптор для відео та аудіо, який не зламає під час роботи з масивним багатогодинним файлом. Після того як майже на всіх онлайн-сервісах я дістався своїх лімітів, я зрозумів: найкраще рішення — не платити за підписку, яку я рідко використовую, а зробити це самостійно.
Ось як я побудував свій безлімітний, повністю безкоштовний та приватний транскриптор за допомогою Python, Whisper від OpenAI та Streamlit, прискорений за рахунок CUDA від NVIDIA.
Техстек
Я хотів зробити інструмент простим у використанні, локальним (щоб дані залишалися приватними) та здатним обробляти як аудіо, так і відео файли без збоїв. Ось основні інструменти з мого requirements.txt, що роблять це можливим:
- Python: основа проекту.
- Streamlit (v1.55): неймовірна бібліотека, яка перетворює скрипти Python на інтерактивні веб-додатки за кілька хвилин. HTML/CSS не потрібні.
- OpenAI Whisper: надзвичайно потужна та точна система розпізнавання мови з відкритим кодом, що запускається локально.
- PyTorch & NVIDIA CUDA (cu12): щоб зробити транскрипцію блискавично швидкою, я додав
torchразом із такими залежностями NVIDIA, якnvidia-cudnn-cu12таnvidia-cublas-cu12. Це дозволяє Whisper використовувати прискорення на GPU, скорочуючи час транскрипції з годин до хвилин. - MoviePy (v2.2): для безперебійної обробки відео шляхом вилучення аудіодоріжок перед передачею до Whisper.
- python-docx & fpdf2: дозволяють експортувати фінальні транскрипції у зручні для обміну документи Word та PDF.
Як це працює
Магія застосунку полягає в його простоті. Ось цикл життя завдання транскрипції у застосунку:
1. Обробка завантажень
Використовуючи file_uploader Streamlit, я побудував швидкий інтерфейс, що приймає різні формати. Streamlit робить це надзвичайно легко з ледь помітною кількістю коду:
st.title("🎙️ Audio & Video Transcriber")
st.write("Upload a file to convert speech to text.")
uploaded_file = st.file_uploader(
"Choose a file",
type=["mp3", "wav", "m4a", "mp4", "mov", "avi"]
)
2. Вилучення аудіо з відео
Whisper транскрибує аудіо. Але частіше контент, який хочемо транскрибувати, захований у відеоформаті (наприклад, записано Zoom-зустріч). Щоб вирішити це, я інтегрував MoviePy. Якщо користувач завантажує відеофайл, застосунок перехоплює його, у фоновому режимі витягує аудіодоріжку і передає саме це до моделі штучного інтелекту:
# Якщо це відео, витягуємо аудіо за допомогою синтаксису MoviePy 2.0
if suffix.lower() in [".mp4", ".mov", ".avi"]:
st.text("Processing video... extracting audio.")
video = VideoFileClip(input_path)
audio_path = input_path.replace(suffix, ".mp3")
# Доступ до аудіо та запис його у тимчасовий файл
video.audio.write_audiofile(audio_path, logger=None)
processing_path = audio_path
video.close() # Важливо звільнити ресурси системи
3. Швидка розпізнавання за допомогою GPU
Левову частку роботи виконує Whisper. Я обрав використати модель base, яка забезпечує чудовий баланс між швидкістю та точністю.
Оскільки Whisper запускається локально на моєму комп’ютері з використанням PyTorch та моєї NVIDIA- GPU через CUDA, обмежень за часом немає. Я можу подати йому 3-годинний подкаст, і він методично транскрибує весь текст без запиту credit card.
Щоб зробити застосунок швидким та уникнути повторного завантаження великих ваг ІІ на кожну дію, я використав декоратор Streamlit @st.cache_resource:
# Ініціалізуйте модель Whisper, кешуючи її, щоб уникнути повторного завантаження
@st.cache_resource
def load_model():
# Використовуйте "base" для балансу швидкості та точності
return whisper.load_model("base")
model = load_model()
def transcribe_file(file_path):
st.info("Transcribing... This may take a few minutes.")
result = model.transcribe(file_path)
return result['text']
4. Експорт результатів
Блок тексту на веб-сторінці — добре, але краще мати завантажуваний файл. Я використав python-docx для генерації документів Word з nicely відформатованим текстом. Після завершення транскрипції застосунок надає зручні кнопки завантаження прямо у інтерфейсі:
def save_as_docx(text, filename):
doc = Document()
doc.add_heading('Transcription', 0)
doc.add_paragraph(text)
doc.save(filename)
return filename
# У пізнішому UI Streamlit...
docx_file = "transcription.docx"
save_as_docx(transcript, docx_file)
with open(docx_file, "rb") as f:
col1.download_button("Download as DOCX", f, file_name="transcription.docx")
Результат
За менш ніж 100 ліній коду Python я створив повноцінний локальний веб-додаток, який вирішує дуже реальну, дуже дратівливу проблему.
Без лімітів за розміром файлу. Без прихованих платних стін. Повна приватність. Висока швидкість на GPU.
Створення своїх інструментів для вирішення особистих вузьких місць — одна з найвищих винагород від знання програмування. Якщо ви опинілися з системними обмеженнями «безкоштовного» онлайн-пЗ-Software, зробіть крок назад і запитайте себе: «Чи не можу я просто побудувати це сам?»
Цілком ймовірно, з сучасними бібліотеками та вільним днем ви цілком можете це зробити.
Код можна знайти тут: https://github.com/reyesvicente/audio-to-text
HI-FI News
через DEV Community https://dev.to
16 березня 2026 року, 04:51 AM
March 16, 2026 at 04:51AM

Залишити відповідь