Cách tôi dùng Whisper tạo SRT nháp và chỉnh về chuẩn chuyên nghiệp
← Blog
🎬 Phụ đề & Caption8 phút đọc

Cách tôi dùng Whisper tạo SRT nháp và chỉnh về chuẩn chuyên nghiệp

💡 Để tạo file SRT nháp đầu tiên từ bất kỳ file audio hoặc video nào bằng Whisper, chạy: whisper audio.mp4 --model turbo --language en --output_format srt --word_timestamps True --max_line_width 42 --max_line_count 2 --output_dir ./captions/. Whisper tạo ra file .srt dùng được trong vòng dưới một phút. Bạn vẫn cần một lần chỉnh sửa trong Subtitle Edit: kiểm tra timecode chồng chéo, vi phạm CPS và lỗi chính tả tên riêng trước khi giao hàng.

Ý chính

  • Dùng --model turbo cho tiếng Anh: nhanh hơn ~8 lần so với large với độ chính xác tương đương. Với nội dung đa ngôn ngữ hoặc ngôn ngữ ít tài nguyên, dùng --model large-v3.
  • Luôn đặt --word_timestamps True --max_line_width 42 --max_line_count 2 để Whisper tách dòng theo ranh giới từ với độ dài hợp lý, thay vì đổ cả đoạn lên một dòng dài.
  • Năm bước kiểm tra sau mỗi lần chạy Whisper: timecode chồng chéo, vi phạm CPS, lỗi tên riêng, dòng ảo trên khoảng lặng và thiếu dấu câu cuối câu.
  • Nội dung tiếng Việt cần xử lý riêng: Whisper hay bỏ sót dấu thanh, vì vậy tôi dùng output của nó chỉ làm khung thời gian và tự gõ lại thoại trong Subtitle Edit.
  • Output của Whisper là bản nháp, không phải file giao hàng. Với broadcast, streaming hoặc tuân thủ ADA/CVAA, vẫn cần một lần review bởi người thật.

Nên dùng model Whisper nào để bắt đầu?

Whisper cung cấp sáu kích thước model. Đây là cách tôi lựa chọn:

ModelTham sốTốc độKhuyến nghị của tôi
tiny39 M~10xChỉ để kiểm tra nhanh tại local
base74 M~7xClip ngắn, âm thanh rõ ràng
small244 M~4xBản nháp creator khi cần tốc độ
medium769 M~2xCân bằng cho hầu hết nội dung
large-v31550 M1x cơ bảnĐộ chính xác tốt nhất; đa ngôn ngữ hoặc phi tiếng Anh
turbo809 M~8xDefault của tôi cho nội dung tiếng Anh

Với ba model nhỏ nhất, Whisper cũng cung cấp các biến thể chỉ dành cho tiếng Anh (tiny.en, base.en, small.en) hoạt động tốt hơn trên audio tiếng Anh thuần. Tôi bỏ qua các biến thể này và dùng turbo hoặc medium cho bất kỳ nội dung nào tôi thực sự giao cho khách hàng.

Model turbo không được huấn luyện cho tác vụ dịch thuật. Nếu cần phiên âm audio phi tiếng Anh và dịch sang tiếng Anh trong một bước, dùng medium hoặc large-v3 với --task translate.

Lệnh tôi dùng để tạo SRT nháp đầu tiên

Đây là lệnh Whisper tiêu chuẩn của tôi cho nội dung creator tiếng Anh:

whisper audio.mp4 \
  --model turbo \
  --language en \
  --output_format srt \
  --word_timestamps True \
  --max_line_width 42 \
  --max_line_count 2 \
  --output_dir ./captions/

Giải thích từng flag:

  • --model turbo: Nhanh hơn ~8 lần so với large với độ chính xác tiếng Anh tương đương. Không phù hợp với tác vụ dịch thuật.
  • --language en: Bỏ qua bước nhận diện ngôn ngữ 30 giây. Luôn chỉ định ngôn ngữ nếu bạn biết trước; không có flag này, Whisper đọc 30 giây đầu và đoán, dễ sai với nội dung mở đầu bằng nhạc hoặc khoảng lặng.
  • --output_format srt: Tạo file .srt chuẩn. Các tùy chọn khác: vtt (WebVTT), txt (văn bản thuần), tsv (tab-separated kèm timestamp), json (đầy đủ dữ liệu bao gồm timing theo từng từ), all (tất cả năm định dạng).
  • --word_timestamps True: Gán timing cho từng từ trong biểu diễn nội bộ. Cần thiết để --max_line_width và --max_line_count hoạt động đúng.
  • --max_line_width 42: Số ký tự tối đa mỗi dòng. Không có flag này, Whisper tạo cue dài trên một dòng. Tôi dùng 42 cho player chuẩn.
  • --max_line_count 2: Số dòng tối đa mỗi sự kiện subtitle. 2 là chuẩn cho hầu hết công việc caption và subtitle.
  • --output_dir ./captions/: Thư mục lưu file output. Mặc định là thư mục hiện tại nếu bỏ qua.

--word_timestamps True thực sự thêm gì?

Không có --word_timestamps True, Whisper viết một sự kiện subtitle cho mỗi đoạn audio: khoảng một câu hoặc một hơi thở. Các sự kiện đó thường dài 80 đến 100 ký tự trên một dòng, vượt xa chuẩn 42 ký tự.

Với --word_timestamps True, Whisper gán timing cho từng từ riêng lẻ. Các flag --max_line_width và --max_line_count dùng những timestamp đó để chia đoạn dài thành các sự kiện ngắn hơn, có timing chính xác theo ranh giới từ.

Ngoài ra còn có --highlight_words True, thêm chữ nghiêng vào từ đang được nói trong output SRT. Đây là điểm khởi đầu cho caption kiểu karaoke theo từng từ trên nội dung social:

whisper audio.mp4 \
  --model turbo \
  --language en \
  --output_format srt \
  --word_timestamps True \
  --highlight_words True \
  --max_line_width 42 \
  --max_line_count 2 \
  --output_dir ./captions/

Output của highlight_words cần chỉnh sửa thêm, nhưng tiết kiệm thời gian so với tự thêm timing theo từng từ trong caption editor.

Whisper hay sai ở đâu, và tôi phát hiện ra sao?

Whisper giỏi phiên âm nhưng không phải không có lỗi. Đây là năm loại tôi kiểm tra mỗi lần:

Loại lỗiNguyên nhânCách phát hiện
Tên riêng và tên sản phẩmThuật ngữ chuyên ngành nằm ngoài phân phối huấn luyệnCtrl+F tìm tên trong brief; dùng --initial_prompt với các thuật ngữ dự kiến
Văn bản ảo trên khoảng lặngModel tạo ra text hợp lý trong khoảng lặng hoặc có nhạc nềnNghe qua output; thêm --hallucination_silence_threshold 2.0
Thiếu dấu câu cuối câuDấu câu không nhất quán qua ranh giới đoạnFix common errors trong Subtitle Edit (Tools > Fix common errors)
Vi phạm CPSSự kiện thời lượng ngắn từ tách theo từng từTools > List errors (Ctrl+F8) trong Subtitle Edit
Dấu thanh tiếng Việt bị thiếu hoặc saiTiếng Việt là ngôn ngữ ít tài nguyên với hệ thống thanh điệu phức tạpChỉ dùng timing; tự gõ lại thoại trong Subtitle Edit

Với nội dung có nhiều khoảng dừng dài hoặc nhạc nền, tôi thêm --hallucination_silence_threshold 2.0. Flag này yêu cầu Whisper bỏ qua khoảng gần như lặng hơn 2 giây thay vì tạo văn bản để lấp đầy:

whisper audio.mp4 \
  --model turbo \
  --language en \
  --output_format srt \
  --word_timestamps True \
  --max_line_width 42 \
  --max_line_count 2 \
  --hallucination_silence_threshold 2.0 \
  --output_dir ./captions/

Quy trình chỉnh sửa của tôi trong Subtitle Edit

Sau khi Whisper tạo xong file .srt, tôi mở trong Subtitle Edit và thực hiện cùng năm bước mỗi lần:

  1. Fix common errors (Tools > Fix common errors): Tôi bật "overlapping lines" (thêm khoảng cách 1 frame giữa các cue liền kề), "remove empty lines" và "fix double spaces". Bắt hầu hết sự cố timing của Whisper trong dưới 10 giây.
  2. Kiểm tra CPS (Tools > List errors, Ctrl+F8): Subtitle Edit đánh dấu sự kiện nào vượt ngưỡng CPS tôi đặt. Tôi dùng 20 CPS cho hầu hết nội dung creator, 17 cho chương trình thiếu nhi.
  3. Rà soát tên: Ctrl+F tìm tên và thuật ngữ thương hiệu từ brief của dự án. Whisper phiên âm tên riêng theo âm thanh, tạo ra lỗi tinh tế mà kiểm tra chính tả bỏ qua.
  4. Rà soát khoảng lặng: Phát lại ở tốc độ 1.5x và nghe xem có dòng nào bắt đầu trong khoảng lặng không. Gần như toàn bộ là các dòng ảo cần xóa.
  5. Rà soát dấu câu: Whisper đôi khi kết thúc cue giữa câu mà không có dấu câu. Tôi đọc qua text view và thêm dấu chấm, dấu phẩy còn thiếu.

Với nội dung phỏng vấn tiếng Anh rõ ràng, cleanup này mất khoảng một phút cho mỗi mười phút audio gốc. Với giọng nặng hoặc thuật ngữ kỹ thuật, tính từ ba đến bốn phút. Với tiếng Việt, về cơ bản tôi caption lại từ đầu và chỉ dùng output của Whisper làm tham chiếu timing.

Khi nào nên thuê captioner chuyên nghiệp hơn?

Whisper cộng với cleanup trong Subtitle Edit là workflow hợp lệ cho nội dung creator: một video YouTube, một podcast, một reel social với một người nói rõ ràng. Với broadcast, nền tảng streaming và tuân thủ khả năng tiếp cận, tiêu chuẩn cao hơn.

Điểm tôi khuyến nghị thuê captioner chuyên nghiệp:

  • Bản giao hàng broadcast và streaming yêu cầu SCC hoặc SMPTE-TT: Whisper không tạo được các định dạng này trực tiếp, và việc chuyển đổi đòi hỏi một lần QC mà con người nên thực hiện.
  • Nội dung theo ADA, CVAA hoặc Section 508: Quy tắc chất lượng caption FCC yêu cầu caption chính xác, đồng bộ, đầy đủ và đặt đúng vị trí. Output của Whisper sau cleanup không đủ độ chính xác để tuân thủ pháp lý mà không có review bởi người.
  • Nhiều người nói với tiếng chồng chéo hoặc giọng nặng: Độ chính xác ASR giảm đáng kể ở đây; caption thủ công thường nhanh hơn sửa output ASR kém.
  • Nội dung tiếng Việt hoặc ngôn ngữ có nhiều dấu thanh: Tôi cung cấp dịch vụ subtitle tiếng Việt với người dịch thật, không phải ASR. Xem dịch vụ subtitle tiếng Việt của tôi nếu bạn cần subtitle chính xác.

Nếu bạn cần file SRT tiếng Anh sạch cho YouTube hoặc soft-subtitle track cho social, Whisper cộng với cleanup là điểm khởi đầu tốt. Nếu cần tuân thủ broadcast hoặc độ chính xác pháp lý, hãy bắt đầu với captioner chuyên nghiệp.

Câu hỏi thường gặp

Whisper có phiên âm được tiếng Việt chính xác không?

Trong thực tế của tôi, model large-v3 có thể nắm được ý chính của tiếng Việt, nhưng hay bỏ sót dấu thanh và tạo ra các từ gần đúng về âm thanh nhưng sai nghĩa. Tiếng Việt nhạy cảm với thanh điệu: một dấu thanh sai thay đổi hoàn toàn ý nghĩa của từ. Với nội dung tiếng Việt cần độ chính xác, tôi chỉ dùng Whisper cho timing ban đầu và tự gõ lại thoại trong Subtitle Edit.

--max_line_width và --max_words_per_line khác nhau thế nào?

--max_line_width giới hạn số ký tự mỗi dòng (tôi dùng 42 cho hầu hết nội dung). --max_words_per_line giới hạn số từ mỗi dòng thay thế. Tôi thích giới hạn ký tự hơn vì các ngôn ngữ khác nhau có độ dài từ rất khác nhau. Giới hạn 10 từ phù hợp với tiếng Anh nhưng có thể quá dài hoặc quá ngắn với ngôn ngữ khác.

Có nên đặt --condition_on_previous_text thành False không?

Mặc định là True: Whisper đưa đoạn trước làm ngữ cảnh cho cửa sổ tiếp theo, giúp thuật ngữ nhất quán và dấu câu chuẩn hơn. Nhược điểm là lỗi ảo trong một đoạn có thể lan sang đoạn tiếp theo. Tôi để mặc định True cho clip dưới 10 phút. Với bản ghi dài có nhiều khoảng lặng, đôi khi tôi đặt thành False để reset ngữ cảnh tại mỗi cửa sổ.

--initial_prompt dùng để làm gì và khi nào nên dùng?

--initial_prompt khởi tạo trước decoder với văn bản ngữ cảnh. Tôi dùng nó khi nội dung có tên hoặc thương hiệu mà Whisper liên tục viết sai: ví dụ --initial_prompt "Transcript of a DaVinci Resolve Fairlight tutorial." Model sau đó thường viết đúng các thuật ngữ đó trong suốt quá trình. Giữ prompt dưới 200 từ.

Tại sao cùng một dòng subtitle lại xuất hiện hai lần?

Đây là lỗi đã biết trong Whisper gốc (không phải các biến thể Faster Whisper hoặc WhisperX): các segment liên tiếp có thể chồng chéo khi cửa sổ attention dịch chuyển, tạo ra sự kiện trùng lặp. Chạy Fix common errors trong Subtitle Edit bắt được lỗi này trong danh mục "same text". Đặt --condition_on_previous_text False cũng giảm sự lặp lại, với đánh đổi về độ chính xác như đã nêu.

Nguồn

Written by Dao Huy (Lucas), Vietnamese translator & localization specialist (EN · ZH · FR → Vietnamese). See translation services →

Báo giáWhatsApp