Yêu cầu trước khi bắt đầu
- Đã xong Bước 2: Cài Claude AI
- Python 3.10 trở lên và khoảng 2-3 GB trống cho model (lần đầu tự tải)
- File ghi âm hoặc video cần bóc (mp3, m4a, mp4...)
Các bước
Cài công cụ bóc tiếng
Claude AI chạy giúp: python -m pip install faster-whisper. Công cụ này chạy hoàn toàn trên máy bạn, không gửi file đi đâu (chỉ lần đầu tự tải model về từ mạng).
Bóc tiếng ra chữ có mốc thời gian
Đoạn mã mẫu dưới đây bóc 1 file ghi âm hoặc video ra 2 file: .srt (phụ đề) và .txt (chữ kèm mốc). Mặc định chạy trên CPU, model medium:
# boc-tieng.py — bóc tiếng ra .srt và .txt có mốc thời gian, chạy hoàn toàn trên máy
# Dùng: python boc-tieng.py <file> [model] [ngôn-ngữ] ví dụ: python boc-tieng.py buoi-hoc.mp4 medium vi
import sys
from pathlib import Path
from faster_whisper import WhisperModel
def moc(giay):
ms = int(round(giay * 1000)); h, ms = divmod(ms, 3_600_000); m, ms = divmod(ms, 60_000); s, ms = divmod(ms, 1000)
return f"{h:02d}:{m:02d}:{s:02d},{ms:03d}"
f = Path(sys.argv[1]); model = sys.argv[2] if len(sys.argv) > 2 else "medium"; ngu = sys.argv[3] if len(sys.argv) > 3 else "vi"
wm = WhisperModel(model, device="cpu", compute_type="int8")
doan, info = wm.transcribe(str(f), language=ngu, vad_filter=True, beam_size=5,
condition_on_previous_text=False) # tắt để chữ không bị gom thành câu dài, lệch mốc
doan = list(doan)
with f.with_suffix(f".{ngu}.srt").open("w", encoding="utf-8") as a, f.with_suffix(f".{ngu}.txt").open("w", encoding="utf-8") as b:
for i, d in enumerate(doan, 1):
a.write(f"{i}\n{moc(d.start)} --> {moc(d.end)}\n{d.text.strip()}\n\n")
b.write(f"[{moc(d.start)}] {d.text.strip()}\n")
print("XONG:", len(doan), "đoạn /", round(info.duration), "giây")Không gọi ffmpeg từ Python. faster-whisper tự giải mã mp4, m4a, mp3 bằng PyAV — cứ đưa đường dẫn file vào (xem bẫy 1).
Chọn model và ngôn ngữ
Thử medium trước; thấy nhiều lỗi mới đổi sang large-v3 (nét hơn nhưng phải tải khoảng 3 GB — hỏi bạn trước khi tải). Ngôn ngữ đặt bằng mã: vi, en, zh, ja, ko...
Rà lỗi nghe nhầm — bước này không được bỏ
Máy nghe nhầm những chỗ đồng âm, tên riêng, tên thương hiệu, thuật ngữ, con số, từ tiếng Anh xen giữa câu. Claude AI đọc trọn file chữ, sửa chỗ chắc chắn, và ghi rõ chỗ không chắc thay vì đoán rồi trình bày như nguyên văn. Cuối file luôn có khối liệt kê "đã sửa" và "còn nghi ngờ", để bạn biết đâu là chữ máy, đâu là chữ đã chỉnh.
Cài faster-whisper nếu máy chưa có. Bóc tiếng file [đường dẫn file] (ngôn ngữ [vi]) ra 2 file .srt và .txt có mốc thời gian, dùng model medium chạy CPU. Sau đó đọc lại toàn bộ chữ, rà lỗi nghe nhầm (tên riêng, thuật ngữ, con số, từ tiếng Anh xen giữa), sửa chỗ chắc chắn, ghi rõ chỗ không chắc, và cuối file liệt kê chỗ đã sửa. Cuối cùng tóm tắt thành biên bản gọn. Không gọi ffmpeg từ Python. Nếu báo thiếu bộ nhớ thì bảo tôi đóng bớt phần mềm, đừng tự tắt phần mềm của tôi. Hỏi tôi trước khi tải model lớn hơn 1 GB. Ngôn ngữ: tiếng Việt.
⚠ Bẫy đã gặp + cách gỡ
1. FileNotFoundError [WinError 2] khi Python gọi ffmpeg
ffmpeg có trong PATH của PowerShell nhưng không có trong PATH mà Python nhìn thấy.
Cách gỡ: đừng gọi ffmpeg từ Python. faster-whisper tự giải mã bằng PyAV.
2. mkl_malloc: failed to allocate memory ngay lúc nạp model
Đây là hết bộ nhớ ảo (commit), không phải lỗi code. Xảy ra khi Chrome, CapCut và các phần mềm nặng chạy cùng lúc; ép ít nhân CPU hơn hay dùng model nhỏ hơn cũng không cứu được.
Cách gỡ: đóng bớt phần mềm hoặc khởi động lại máy; không để AI tự tắt phần mềm của bạn. Trong lúc chờ vẫn tải file về trước được vì tải không tốn bộ nhớ.
3. Chữ ra thành câu dài lê thê, mốc thời gian lệch
Whisper mặc định nhớ ngữ cảnh giữa các đoạn nên gom và rải đều chữ.
Cách gỡ: đặt condition_on_previous_text=False (đã có trong đoạn mã mẫu).
4. Chữ nghe có vẻ trôi chảy nhưng sai ở tên riêng và con số
Máy chọn từ đồng âm hợp mạch nhất, không phải từ đúng nhất.
Cách gỡ: bước 4 (rà lỗi) là bắt buộc, kèm khối "đã sửa / còn nghi ngờ" ở cuối file. Không tin nguyên bản máy cho tên người, tên thương hiệu, số tiền.
5. Chạy trên GPU báo thành công nhưng không ra chữ
Theo hướng dẫn TÔM Voice của Hoàng Minh Hóa: thiếu thư viện GPU (cuBLAS, cuDNN) làm Whisper thất bại âm thầm. Chỉ liên quan khi bạn chuyển sang GPU; đoạn mã mẫu dùng CPU nên tránh được.
Cách gỡ: nếu cần GPU, cài đủ thư viện CUDA tương ứng rồi thử với 1 file ngắn trước.
Bước tiếp theo
Đã xong phần cài nền (8 bước). Sang phần hồ sơ và sản phẩm: bắt đầu từ chiến lược — hiểu đúng khách hàng trước khi làm bất cứ nội dung hay quảng cáo nào.
Sang bước 9: Chiến lược & Nghiên cứu →