# Hai video nhân vật đọc log

*2026-10-11*

> Số 003: Mai và Kuma, hai video giải thích, kể lại log build số một. Số này ghi lại cách làm.

“Máy làm gần hết, câu nào không giống thì mình viết lại.”

Log số 001 kể chuyện dựng trang này. Số này, hai nhân vật đọc lại log làm việc đó dưới dạng năm bài học.

Sản phẩm là hai clip. Mai kể giọng dễ thương. Kuma kể giọng hùng hồn. Bên dưới là cách mình làm.

## Mai, giọng nữ dễ thương

Cô gái vẽ theo nét Mitsuru Adachi. Giọng: Thục Đoan, tốc độ chậm. Thời lượng: 2 phút 22 giây. Nét mặt thay đổi 33 lần.

## Kuma, giọng con gấu hoạt bát

Gấu bông 3D đeo kính. Giọng: Thanh Bình, tốc độ 0,9 lần. Thời lượng: 2 phút 11 giây. Cùng năm bài học, kể ở ngôi thứ nhất.

## Chi tiết nhỏ

Năm khâu. Khâu nào cũng thử sai

### Kịch bản có người duyệt

Claude đọc lại log trong 25 giờ làm việc (mình làm hơi lâu) và 36 lượt nhắn. Claude rút ra năm bài học. Bản đầu nghe hơi sáo rỗng. Nhiều câu giống khẩu hiệu. Mình duyệt bản đầu trên trang **copy-review**. Trang nằm bên trái, từng câu nằm bên phải. Mình sửa 50 câu. Claude so bản sửa với bản gốc và ghi ra 19 quy tắc viết. Ví dụ: không gắn thái độ cho AI. Câu tổng kết phải có lý do.

### Giọng đọc chạy trên máy

Giọng đọc dùng **VieNeu**. VieNeu miễn phí và chạy trên Mac. Claude đo độ lên xuống của từng giọng. Giọng đầu dao động 12,3 nửa cung và nghe điệu. Giọng Thục Đoan dao động 9,8 nửa cung. VieNeu không có nút chỉnh tốc độ. **ffmpeg** làm chậm giọng Kuma còn 0,9 lần. Máy đọc sai tên tiếng Anh nên mình phải thêm một bảng phiên âm cách đọc trong tiếng Việt (ví dụ: em ai ti). Phụ đề giữ chữ nguyên bản (MIT).

### Chatterbox, cho bản tiếng Anh số 001

Số 001 có bản tiếng Anh. **Soniox** hết tiền giữa chừng. Bản miễn phí của **ElevenLabs** không nhân bản giọng. **Chatterbox** có giấy phép MIT và chạy trên GPU của Mac. Chatterbox nhân bản giọng mình từ một mẫu 12 giây. Máy sinh mỗi câu phụ đề một lần. Sau đó máy kéo giãn câu 0,85 đến 1,15 lần cho khớp lúc mình nói. Ổ đĩa không đủ chỗ cho model gốc nên mình dùng bản fp16, nhỏ bằng một nửa. Bản cuối thì mình tự đọc luôn cho tự nhiên. Máy cắt từng câu và đặt vào đúng chỗ.

### Một hình vẽ, mười ba nét mặt

**Codex** vẽ một tấm gốc và 13 tấm nét mặt. AI không vẽ lại y chang, nên tấm nào cũng lệch vài điểm ảnh. Một đoạn code canh từng tấm theo tấm gốc. Code chỉ giữ vùng mặt có thay đổi. Lần đầu, bộ lọc xóa nét mi khi nhắm mắt. Bộ lọc cũng để lại vết như bóng ma. Claude bỏ bộ lọc và sửa chỗ ghép. Đường nối không phát hiện được thì mới duyệt (không tì vết).

### Miệng mở theo từng chữ

Tiếng Việt mỗi chữ là một âm tiết. Miệng phải mở ở từng chữ. **Whisper** cho biết mỗi chữ bắt đầu ở giây nào. Miệng mở trong 62% thời lượng của chữ. Mắt chớp theo một chuỗi cố định. Mọi lần render cho cùng kết quả. Ở câu cảm xúc, nhân vật đổi nét mặt hoặc nhún người. Nhân vật cũng hiện các thanh dấu manga: dấu chấm than, giọt mồ hôi, ngôi sao..

### Ráp lại bằng HTML

Mỗi clip là một trang HTML. **GSAP skill** chạy hoạt hình. **HyperFrames** render trang ra video dọc 1080×1920. Instagram và Facebook dùng khổ này.

### Video nói chuyện, bản tiếng Anh

Video ở góc trang có bản tiếng Anh. Chatterbox học giọng mình từ đoạn nói chuyện 11 giây của chính bản thu. Máy sinh mỗi câu phụ đề một lần và đặt câu vào lúc mình nói. Mà tiếc là khẩu hình không khớp chữ tiếng Anh.

## Một điều cuối

Kuma đọc chữ build không đúng, nên mình dùng chữ 'biu' mà cũng không được nó đọc thành [BUI]. Vậy là phiên âm đổi thành biêu. Phải render lại 2 clip.

## Lời trong video

Chào, mình là Trí. Số này thì hơi khác. Mình sẽ nói về sản phẩm, không phải trang web, mà là hai video ngắn. Đầu tiên là video về Mai, một cô gái mình làm theo style của Mitsuru Adachi. Kuma là con gấu bông 3D. Hai bạn này sẽ đọc lại log build số 1, rồi rút ra những bài học nhanh trong hơn 2 phút. Mình sẽ kể cách mình làm ra clip đó.
Đầu tiên là phần kịch bản. Claude đọc hết khoảng 25 giờ hoạt động của log, sau đó đọc qua 36 lượt tin nhắn, rồi gom ra 5 bài học. Bản đầu, giọng cô này nghe hơi điệu, nhiều câu dạng như khẩu hiệu. Mình mở một trang trên browser để review chữ nghĩa. Bên trái là trang, bên phải là từng câu, mình sửa liên tục 50 câu đó luôn. Sau đó mình bảo Claude so bản của mình với bản gốc của nó, rồi rút ra những quy tắc. Một câu không được gắn thái độ cho AI, và các câu tổng kết đều phải có lý do. Sau lần viết kịch bản này, Claude dùng luôn những quy tắc đó cho các video tiếp theo.
Thứ hai là giọng đọc. Mình dùng mô hình VieNeu. VieNeu là bộ đọc tiếng Việt miễn phí, chạy local trên Mac. Vì giọng đầu tiên nghe hơi điệu, nên Claude đo độ lên xuống của từng giọng. Giọng cũ dao động hơn 12 nửa cung. Giọng tên Thục Đoan chưa tới 10, nên mình chọn Thục Đoan. Vì VieNeu không có nút chỉnh tốc độ, nên giọng Kuma được làm chậm lại, còn khoảng 9 phần 10, bằng ffmpeg. Tên tiếng Anh thì máy thường đọc sai, nên có một bảng phiên âm riêng. Không chỉ tên tiếng Anh, mà còn những từ riêng nữa. Còn phụ đề thì vẫn giữ chữ gốc.
Bên cạnh đó, mình thử thêm Chatterbox. Mình dùng nó để làm text to speech tiếng Anh. Khi làm bản tiếng Anh cho số đầu tiên, Soniox của mình bị hết tiền. Còn bản miễn phí của ElevenLabs thì không có nhân bản giọng. Nên mình dùng Chatterbox, mã nguồn mở, giấy phép MIT, chạy được local trên Mac. Nhân bản giọng chỉ từ 12 giây thu âm, rồi nó đọc từng câu khớp lúc mình nói. Ổ đĩa không đủ chỗ cho model gốc, nên mình phải dùng bản chỉ bằng một nửa. Bản nhân bản chạy được, nhưng cuối cùng bản tiếng Anh vẫn dùng giọng đọc của mình. Sau đó máy cắt từng câu, ghép và đặt đúng chỗ.
Cuối cùng là cách tạo ra nhân vật. Mình dùng Codex vẽ một tấm hình gốc, sau đó vẽ 13 lần, mỗi lần một nét mặt khác. Vì AI không bao giờ vẽ lại y chang, nên tấm nào cũng có những chỗ lệch nhỏ, mà lệch rất nhiều chỗ. Claude phải viết code để canh từng tấm hình cho khớp với tấm gốc, rồi chỉ cắt phần trong ô mặt có thay đổi. Lúc đầu cắt thì mất hết nét lúc nhắm mắt, rồi có những chỗ như bóng ma trong ảnh. Sau đó cố gắng sửa cho không thấy đường nối chỗ ghép.
Tiếp theo là khẩu hình của nhân vật. Tiếng Việt mỗi chữ là một âm tiết, nên miệng phải mở liên tục. Mình dùng Whisper nghe lại file giọng để biết miệng nhép như thế nào, ở giây nào. Sau đó thêm animation mắt chớp vài giây một lần, theo một chuỗi cố định, để lúc nào render thì cũng giống nhau. Tới những câu cảm xúc, nhân vật đổi nét mặt, nhún người, hoặc có dấu hiệu manga như dấu chấm than, đổ mồ hôi, vân vân. Cuối cùng mọi thứ ghép lại bằng một trang HTML chạy GSAP, và dùng HyperFrames để render ra video dọc, dạng thường thấy trên Instagram hay Facebook.
Phần mình làm kỹ nhất là duyệt từng chữ. Máy viết hết, nhưng sau đó mình duyệt lại. Câu nào nghe không giống cách mình nói hằng ngày thì mình chỉnh lại. Vậy thôi, hẹn mọi người số sau.
