AI i automatyzacjeTechnicznaTekst techniczny

Jak zrobić transkrypcję filmu do tekstu za pomocą FFmpeg i faster-whisper

MorenaTechOsoby techniczne i małe firmy pracujące z nagraniamiPraktycznyok. 10 minut
Publikacja:

Masz nagranie spotkania, rozmowy, webinaru albo filmu szkoleniowego i chcesz zamienić je na tekst. Można odpalić nagranie, zatrzymywać co kilka sekund i przepisywać ręcznie. Rozsądniej jest zrobić to automatycznie.

Notatka przed czytaniem

To jest tekst techniczny. Przyda się, jeśli interesuje Cię architektura, integracje albo zaplecze rozwiązań AI. Wersje poradnikowe znajdziesz w sekcji „Dla małej firmy”.
W tym poradniku film zamieniamy na audio przez FFmpeg, audio przepuszczamy przez lokalny model Whisper, a wynik zapisujemy do pliku tekstowego ze znacznikami czasu. Przykład jest przygotowany dla Windows i PowerShella, ale sam schemat działa podobnie na macOS i Linuxie.

Po co robić transkrypcję?

Transkrypcja przydaje się wszędzie tam, gdzie nagranie zawiera wiedzę, decyzje albo ustalenia. W małej firmie bardzo często dotyczy to spotkań z klientami, szkoleń, webinarów, konsultacji i nagrań roboczych.

Można jej użyć do:

  • przygotowania notatki po spotkaniu
  • spisania rozmowy z klientem
  • opracowania materiału z webinaru
  • stworzenia szkicu artykułu z nagrania
  • wyszukania konkretnych fragmentów rozmowy
  • przygotowania listy zadań po spotkaniu
  • archiwizacji wiedzy w firmie

Najważniejsze jest to, że transkrypcja nie musi być końcem procesu. Może być początkiem automatyzacji: z nagrania powstaje tekst, z tekstu streszczenie, ze streszczenia lista zadań, a z listy zadań konkretny proces w firmie.

Czego potrzebujesz?

Do przykładu użyjemy trzech rzeczy:

  • FFmpeg, czyli narzędzia do pracy z audio i wideo
  • Pythona
  • biblioteki faster-whisper, która pozwala uruchomić model Whisper lokalnie

Zakładamy, że masz plik film.mp4 w folderze roboczym. W tym samym folderze utworzymy środowisko Pythona, plik audio i skrypt transkrypcji.

Źródła techniczne

Wpis opiera się na dokumentacji Microsoft Learn dla winget install, oficjalnej dokumentacji FFmpeg oraz README projektu faster-whisper.

Krok 1. Instalacja narzędzi

Na Windowsie FFmpeg można zainstalować przez Windows Package Manager, czyli winget. Microsoft opisuje komendę winget install, opcję --id oraz -e / --exact, która wymusza dokładne dopasowanie pakietu.

winget install --id Gyan.FFmpeg -e
python -m venv .venv
.venv\Scripts\activate
pip install faster-whisper

Co tu się dzieje?

  • winget install --id Gyan.FFmpeg -e instaluje FFmpeg z konkretnym identyfikatorem pakietu
  • python -m venv .venv tworzy lokalne środowisko Pythona
  • .venv\Scripts\activate aktywuje środowisko w PowerShellu
  • pip install faster-whisper instaluje bibliotekę do transkrypcji

Krok 2. Zamiana filmu na audio

Do transkrypcji nie potrzebujemy obrazu. Model ma rozpoznawać mowę, więc najpierw przygotowujemy prosty plik audio.

ffmpeg -i "film.mp4" -vn -ac 1 -ar 16000 -c:a pcm_s16le "audio.wav"

Ta komenda bierze plik film.mp4 i tworzy z niego plik audio.wav. FFmpeg używa opcji wejściowych i wyjściowych zależnie od ich miejsca w komendzie, więc kolejność ma znaczenie.

FragmentZnaczenie
ffmpeguruchamia program FFmpeg
-i "film.mp4"wskazuje plik wejściowy
-vnpomija obraz i zostawia audio
-ac 1ustawia jeden kanał audio, czyli mono
-ar 16000ustawia częstotliwość próbkowania na 16 kHz
-c:a pcm_s16lezapisuje audio jako 16-bit PCM WAV
"audio.wav"określa nazwę pliku wynikowego

Dlaczego mono i 16 kHz? Do rozpoznawania mowy zwykle nie potrzebujemy stereo ani jakości muzycznej. Ważniejsze jest to, żeby głos był czytelny, a plik prosty do przetwarzania.

Opcjonalnie: start od konkretnego momentu filmu

Czasem nagranie ma kilka minut wstępu, ciszy, planszy tytułowej albo ustawiania mikrofonu. Wtedy nie trzeba przetwarzać całego filmu od początku.

Można użyć flagi -ss przed wejściem:

ffmpeg -ss 00:05:39 -i "film.mp4" -vn -ac 1 -ar 16000 -c:a pcm_s16le "audio.wav"

W tym przykładzie FFmpeg zaczyna od momentu 00:05:39. To nie jest obowiązkowy element. Do standardowej transkrypcji całego filmu używamy wersji bez -ss.

Krok 3. Skrypt Pythona do transkrypcji

Utwórz plik transkrybuj.py w tym samym folderze, w którym znajduje się audio.wav.

from pathlib import Path
from faster_whisper import WhisperModel

AUDIO_FILE = Path("audio.wav")
OUTPUT_FILE = Path("transkrypcja.txt")
MODEL_NAME = "large-v3"

if not AUDIO_FILE.exists():
    raise FileNotFoundError(f"Nie znaleziono pliku: {AUDIO_FILE}")

model = WhisperModel(MODEL_NAME, device="auto", compute_type="auto")

segments, info = model.transcribe(
    str(AUDIO_FILE),
    language="pl",
    vad_filter=True,
)

print(f"Język: {info.language}, prawdopodobieństwo: {info.language_probability:.2f}")

with OUTPUT_FILE.open("w", encoding="utf-8") as file:
    for segment in segments:
        text = segment.text.strip()
        if not text:
            continue
        line = f"[{segment.start:.2f} - {segment.end:.2f}] {text}"
        print(line)
        file.write(line + "\n")

print(f"Zapisano: {OUTPUT_FILE}")

Po uruchomieniu skrypt zapisze wynik do pliku transkrypcja.txt. Każda linia będzie miała prosty format:

[12.34 - 18.90] Treść rozpoznanej wypowiedzi.

Dzięki temu nie dostajesz tylko ściany tekstu, ale tekst ze znacznikami czasu. To jest wygodne, gdy trzeba wrócić do konkretnego fragmentu nagrania.

Co oznaczają ustawienia w skrypcie?

Najważniejsza linia tworzy model:

model = WhisperModel(MODEL_NAME, device="auto", compute_type="auto")

MODEL_NAME = "large-v3" oznacza, że używamy dużego modelu Whisper. Jest dokładniejszy, ale może być ciężki dla słabszego komputera. Pierwsze uruchomienie może też potrwać, bo model musi zostać pobrany.

Jeżeli komputer nie daje rady albo transkrypcja trwa zbyt długo, zacznij od mniejszego modelu:

MODEL_NAME = "medium"

albo:

MODEL_NAME = "small"

Mniejsze modele zwykle działają szybciej, ale mogą robić więcej błędów, szczególnie przy gorszym dźwięku, kilku osobach mówiących naraz albo specjalistycznym słownictwie.

device="auto" pozwala bibliotece samodzielnie dobrać sposób uruchomienia modelu. Jeśli dostępna jest zgodna karta graficzna i środowisko jest poprawnie skonfigurowane, transkrypcja może działać szybciej. Jeśli nie, skrypt użyje procesora.

compute_type="auto" pozwala dobrać sposób obliczeń automatycznie. W praktyce wpływa to na wydajność, zużycie pamięci i zgodność ze sprzętem.

Transkrypcja i generator segments

W części transkrypcji mamy:

segments, info = model.transcribe(
    str(AUDIO_FILE),
    language="pl",
    vad_filter=True,
)

language="pl" mówi modelowi, że nagranie jest po polsku. Dzięki temu model nie musi zgadywać języka.

vad_filter=True włącza filtr wykrywania mowy. Narzędzie próbuje pominąć fragmenty bez wypowiedzi, na przykład ciszę albo dłuższe przerwy.

segments to kolejne fragmenty rozpoznanego tekstu. Każdy segment ma między innymi czas początku, czas końca i tekst wypowiedzi.

Ważny detal techniczny

W faster-whisper segments jest generatorem. To znaczy, że właściwa transkrypcja wykonuje się dopiero wtedy, gdy przechodzimy po segmentach w pętli for. Dlatego w tym skrypcie zapis do pliku odbywa się właśnie w pętli.

Jak uruchomić cały proces?

Zakładając, że masz w folderze pliki film.mp4 oraz transkrybuj.py, uruchom po kolei:

ffmpeg -i "film.mp4" -vn -ac 1 -ar 16000 -c:a pcm_s16le "audio.wav"
python transkrybuj.py

Po zakończeniu pracy powinien pojawić się plik:

transkrypcja.txt

Co może pójść nie tak?

Komenda ffmpeg nie działa

Najpierw sprawdź, czy FFmpeg jest zainstalowany:

ffmpeg -version

Jeżeli PowerShell nie rozpoznaje komendy, zamknij i otwórz terminal ponownie. Czasem system musi odświeżyć zmienną PATH po instalacji.

Python nie widzi biblioteki faster_whisper

Sprawdź, czy aktywowane jest środowisko .venv:

.venv\Scripts\activate

Dopiero potem instaluj bibliotekę:

pip install faster-whisper

Transkrypcja trwa bardzo długo

To normalne przy dużych modelach i długich nagraniach. Spróbuj zmienić MODEL_NAME = "large-v3" na "medium" albo "small".

Wynik ma błędy

Automatyczna transkrypcja nie jest idealnym stenogramem. Jakość wyniku zależy od jakości nagrania.

  • hałas w tle
  • echo
  • kilka osób mówiących naraz
  • cichy mikrofon
  • muzyka pod głosem
  • specjalistyczne nazwy
  • nazwiska i nazwy firm

Przy ważnych materiałach transkrypcję warto później przejrzeć ręcznie.

A co z danymi firmowymi?

Jeżeli transkrybujesz spotkania firmowe, rozmowy z klientami albo nagrania zawierające dane osobowe, trzeba uważać na dostęp do plików i miejsce przetwarzania danych.

Lokalne uruchomienie modelu ma tę zaletę, że plik audio nie musi być wysyłany do zewnętrznej usługi. To nie zwalnia jednak z myślenia o bezpieczeństwie. Pliki z nagraniami i transkrypcjami warto trzymać w uporządkowanym miejscu, z dostępem tylko dla osób, które faktycznie powinny je widzieć.

Co można z tym zrobić dalej?

Sam plik transkrypcja.txt jest użyteczny, ale największa wartość zaczyna się krok dalej.

Taki proces można rozbudować, na przykład:

  • automatycznie pobierać nagrania z wybranego folderu
  • robić transkrypcję nowych plików
  • generować krótkie podsumowanie spotkania
  • wyciągać decyzje i zadania
  • zapisywać wynik do Google Drive
  • tworzyć wpis w arkuszu albo CRM
  • wysyłać notatkę e-mailem do zespołu
  • budować bazę wiedzy z nagrań

Wtedy transkrypcja przestaje być jednorazowym skryptem. Staje się elementem procesu.

Podsumowanie

Do podstawowej transkrypcji filmu wystarczą trzy kroki:

  1. wyciągnąć audio z filmu przez FFmpeg
  2. przepuścić audio przez faster-whisper
  3. zapisać wynik do pliku tekstowego

To prosty przykład, ale dobrze pokazuje szerszy schemat automatyzacji: z nagrania robimy tekst, z tekstu wiedzę, a z wiedzy uporządkowany proces.

Chcesz zamienić nagrania w użyteczne notatki i zadania?

MorenaTech pomaga budować praktyczne procesy AI: transkrypcję nagrań, streszczenia spotkań, wyciąganie decyzji, listy zadań i uporządkowaną bazę wiedzy z firmowych materiałów.

Czytaj dalej w sekcji Techniczna