Case study: Tự viết app lồng tiếng tiếng Việt hai giọng đối đáp cho video
App Python biến kịch bản văn bản thành lời thoại hai giọng nam nữ tiếng Việt: định dạng kịch bản, SSML, từ điển phát âm cho từ viết tắt và từ tiếng Anh, chế độ thử giọng. Kèm code mẫu.

Video có hai người hỏi đáp thường dễ nghe hơn một giọng đọc đều đều: tin tức dạng “bạn hỏi, mình trả lời”, review dạng hai người tranh luận, podcast ngắn. Thu âm hai người thật cho mỗi video thì tốn công. Case study này trình bày một app desktop tự viết bằng Python để lồng tiếng tiếng Việt hai giọng đối đáp từ một kịch bản văn bản, kèm từ điển phát âm và chế độ thử giọng.
Tóm tắt case study
| Đầu ra | Một file âm thanh đối đáp hai giọng, dùng làm lời thoại cho video |
| Công cụ | Python, PySide6 (giao diện), dịch vụ chuyển văn bản thành giọng nói có giọng tiếng Việt (ví dụ trong bài: Azure AI Speech), phần mềm dựng video |
| Đầu vào | Kịch bản dạng văn bản, mỗi dòng ghi rõ ai nói |
| Hợp với | Kênh tin tức, review, giải thích kiến thức cần ra video đều đặn |
| Không hợp với | Nội dung cần cảm xúc mạnh, diễn xuất, hoặc giọng thương hiệu riêng |
Tóm tắt nhanh
Phần khó của lồng tiếng AI tiếng Việt không nằm ở chất lượng giọng mà ở những chỗ nhỏ: đọc sai tên riêng, từ viết tắt, từ tiếng Anh; ngắt nghỉ không tự nhiên khi chuyển người nói. Một app nhỏ giải quyết đúng những chỗ đó bằng ba thứ: định dạng kịch bản cố định, từ điển phát âm dùng chung, và chế độ nghe thử nhiều phiên bản trước khi xuất.
Bước 1: Viết kịch bản theo định dạng cố định
App chỉ cần hiểu một quy ước đơn giản: mỗi dòng bắt đầu bằng tên người nói. Dòng trống là một khoảng nghỉ dài hơn.
A: Tuần này YouTube vừa đổi chính sách kiếm tiền. Bạn nghe chưa?
B: Nghe rồi. Nhưng nhiều người hiểu nhầm là YouTube cấm video AI.
A: Vậy thực ra là sao?
B: Không cấm AI. Họ chỉ không trả tiền cho nội dung làm hàng loạt, na ná nhau.
AI viết kịch bản (Claude, ChatGPT…) có thể được yêu cầu trả về đúng định dạng này, nên từ ý tưởng đến file lồng tiếng chỉ cần dán qua lại.
Bước 2: Chọn giọng và dựng SSML
Azure AI Speech hiện có hai giọng tiếng Việt: vi-VN-HoaiMyNeural (nữ) và vi-VN-NamMinhNeural (nam). Một nữ, một nam là vừa đủ cho đối đáp, và khác giới giúp người nghe phân biệt người nói ngay lập tức.
App chuyển kịch bản thành SSML, ngôn ngữ đánh dấu cho giọng đọc. Một tài liệu SSML có thể chứa nhiều khối <voice>, mỗi khối một người nói:
<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="vi-VN">
<voice name="vi-VN-HoaiMyNeural">
<prosody rate="+5%">Tuần này YouTube vừa đổi chính sách kiếm tiền. Bạn nghe chưa?</prosody>
<break time="350ms"/>
</voice>
<voice name="vi-VN-NamMinhNeural">
Nghe rồi. Nhưng nhiều người hiểu nhầm là YouTube cấm video <sub alias="ây ai">AI</sub>.
<break time="350ms"/>
</voice>
</speak>
<break>tạo khoảng nghỉ giữa hai lượt nói. Không có nó, hai giọng nối vào nhau rất gấp.<prosody rate>chỉnh tốc độ từng giọng. Giọng hỏi nhanh hơn một chút, giọng trả lời chậm hơn, nghe tự nhiên hơn.<sub alias>bảo giọng đọc đọc một từ theo cách khác. Đây là nền của từ điển phát âm ở bước sau.
Bước 3: Từ điển phát âm dùng chung
Giọng AI tiếng Việt thường đọc sai từ viết tắt và từ tiếng Anh. Thay vì sửa tay trong từng kịch bản, app giữ một file từ điển và tự áp dụng trước khi tạo SSML:
{
"AI": "ây ai",
"YouTube": "diu tiu",
"TikTok": "tích tóc",
"Shopee": "sô pi",
"CTR": "xi ti a",
"Seedance": "xít đan"
}
Từ điển chỉ cần làm một lần. Mỗi khi nghe thấy một từ đọc sai, thêm một dòng, và mọi video sau đều đọc đúng.
Bước 4: Gọi API và xuất file
Đoạn code tối thiểu với thư viện azure-cognitiveservices-speech:
import azure.cognitiveservices.speech as speechsdk
def ssml_to_wav(ssml: str, out_path: str, key: str, region: str) -> None:
cfg = speechsdk.SpeechConfig(subscription=key, region=region)
audio = speechsdk.audio.AudioOutputConfig(filename=out_path)
synth = speechsdk.SpeechSynthesizer(speech_config=cfg, audio_config=audio)
result = synth.speak_ssml_async(ssml).get()
if result.reason != speechsdk.ResultReason.SynthesizingAudioCompleted:
raise RuntimeError(f"Không tạo được giọng: {result.reason}")
Như với mọi app gọi API, phần gọi giọng nên chạy trong luồng nền để giao diện không bị đứng khi kịch bản dài.
Bước 5: Thử giọng trước khi xuất
Cùng một câu, tốc độ và khoảng nghỉ khác nhau cho cảm giác rất khác. App có chế độ thử giọng: chọn một đoạn kịch bản, tạo vài phiên bản (chậm hơn, nhanh hơn, nghỉ dài hơn), nghe liền nhau và chọn bản ưng ý. Thông số của bản được chọn được lưu làm mặc định cho kênh. Làm vậy, các video của cùng một kênh giữ được nhịp đọc giống nhau.
Lưu ý khi đăng video
- Gắn nhãn khi cần. YouTube yêu cầu công bố khi nội dung trông hoặc nghe như thật nhưng được tạo hoặc chỉnh sửa bằng AI. Giọng đọc AI cho video tin tức, giải thích thường không bị coi là giả mạo, nhưng nếu giọng nghe như một người thật cụ thể thì cần gắn nhãn.
- Không nhái giọng người thật khi chưa được đồng ý, kể cả khi công cụ cho phép.
- Kết hợp với dấu ấn riêng. Một kênh chỉ có giọng AI đọc theo một khuôn dễ bị xếp vào nội dung làm hàng loạt. Giọng AI nên là công cụ, còn nội dung và góc nhìn phải là của bạn.
Chi phí tham khảo
Theo trang bảng giá Azure AI Speech (kiểm tra ngày 8/11/2026), gói miễn phí có 0,5 triệu ký tự giọng neural mỗi tháng. Với kịch bản video ngắn, mức này thường đủ để thử nghiệm và chạy một kênh nhỏ. Vượt mức thì tính phí theo số ký tự.
Điểm cộng
- Từ kịch bản văn bản ra file lồng tiếng hai giọng trong vài phút.
- Từ điển phát âm làm một lần, dùng cho mọi video.
- Chế độ thử giọng giúp giữ nhịp đọc đồng nhất giữa các video.
- Gói miễn phí đủ để thử trước khi quyết định trả tiền.
Điểm trừ
- Chỉ có hai giọng tiếng Việt trên Azure, khó làm nội dung nhiều hơn hai người nói.
- Giọng AI vẫn thiếu cảm xúc ở những đoạn cần nhấn mạnh, đùa, hay ngập ngừng.
- Từ điển phát âm phải tự bổ sung dần, lúc đầu sẽ có nhiều từ đọc sai.
- Cần tự tạo tài khoản Azure, khoá API và cài Python.
Kết luận
Nếu bạn làm video giải thích hoặc tin tức đều đặn, lồng tiếng hai giọng đối đáp là cách rẻ để video bớt đơn điệu. Giá trị thật của một app tự viết không nằm ở việc gọi API, mà ở định dạng kịch bản cố định, từ điển phát âm và chế độ thử giọng: những thứ biến lồng tiếng AI từ “nghe được” thành “nghe quen tai”.
Nguồn: Azure AI Speech: bảng giá; Danh sách giọng tiếng Việt của Azure.


