Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Xử lý âm thanh với Pydub và Google Speech Recognition API trong Python

Hướng dẫn này demo quy trình: chia file âm thanh dài thành các đoạn nhỏ (chunks) → nhận diện giọng nói (Speech-to-Text) bằng Google Speech Recognition → lưu kết quả vào file text.

Cài đặt thư viện

pip install pydub
pip install audioread
pip install SpeechRecognition

Lưu ý: Cần cài FFmpeg hệ thống cho pydub (đọc/ghi nhiều định dạng). Trên Windows: tải ffmpeg.exe thêm vào PATH.

Mã nguồn hoàn chỉnh

import pydub
import speech_recognition as sr

# Load file âm thanh (WAV)
audio = pydub.AudioSegment.from_wav('audio.wav')
audio_length = len(audio)  # milliseconds
print(f'Audio Length: {audio_length} ms')

# Cấu hình chia chunk
chunk_length_ms = 60000  # 60 giây
overlap_ms = 8000        # 8 giây overlap để không cắt từ giữa câu

chunk_counter = 1
audio_text = open('audio_text.txt', 'w+', encoding='utf-8')

start = 0
end = 0
flag = 0

for i in range(0, 2 * audio_length, chunk_length_ms):
    if i == 0:
        start = 0
        end = chunk_length_ms
    else:
        start = end - overlap_ms
        end = start + chunk_length_ms

    if end >= audio_length:
        end = audio_length
        flag = 1

    chunk = audio[start:end]
    chunk_name = f'chunk_{chunk_counter}.wav'
    chunk.export(chunk_name, format='wav')
    print(f'{chunk_name} start: {start} end: {end}')

    # Nhận diện giọng nói
    recognizer = sr.Recognizer()
    with sr.AudioFile(chunk_name) as source:
        chunk_audio = recognizer.record(source)

    try:
        content = recognizer.recognize_google(chunk_audio, language='vi-VN')  # hoặc 'en-US'
        audio_text.write(content + '\n')
    except sr.UnknownValueError:
        print('Không nhận diện được âm thanh')
    except sr.RequestError as e:
        print(f'Lỗi kết nối Google API: {e}')

    chunk_counter += 1
    if flag == 1:
        audio_text.close()
        break

Kết quả mẫu

Audio Length: 480052
chunk_1.wav start: 0 end: 60000
chunk_2.wav start: 52000 end: 112000
...
chunk_10.wav start: 468000 end: 480052

File audio_text.txt chứa văn bản nhận diện được.

Lưu ý quan trọng

  • Google Speech Recognition API miễn phí có giới hạn request/ngày và yêu cầu internet.
  • Overlap (đè lên) giúp không bị mất từ ở ranh giới chunk.
  • Đối với file lớn, cân nhắc dùng Google Cloud Speech-to-Text (có free tier) hoặc mô hình offline như Vosk, Whisper.
  • Chuyển đổi sample rate về 16kHz mono cho tối ưu nhận diện.

Kết luận

Kết hợp Pydub (xử lý âm thanh) và SpeechRecognition (STT) cho pipeline âm thanh -> văn bản tự động. Phù hợp cho podcast, meeting recording, lecture.