Đồng bộ khẩu hình
Bạn nói gì cơ?

Làm cho chân thực hơn
Có một số nhân vật sẽ nói chuyện, và hiện tại bạn chỉ thấy một bong bóng thoại. Tôi đã có thể dùng âm thanh rồi, nhưng trông vẫn chưa đẹp. Khi ai đó nói, miệng phải cử động, vì vậy tôi đã tìm hiểu cách người ta làm trong phim hoạt hình.
Nói ngắn gọn, chỉ cần ít nhất 6 đến 9 hình miệng khác nhau là bạn đã có thể làm như nhân vật thật sự đang nói. Có nhiều chương trình chuyển âm thanh thành hình nào cần hiển thị.
Âm thanh đầu vào > chương trình > đầu ra [ABBFGG].
Sau đó trong trò chơi, mỗi chữ cái sẽ hiển thị một khung hình đầu khác nhau.
-- convert csv to a lua table
local libSyncTable = {}
for line in csvData:gmatch("[^\r\n]+") do
local a, b = line:match("(%S+)\t(%w)")
local framekey
if b == "A" then
framekey = 1
elseif b == "B" then
framekey = 2
elseif b == "C" then
framekey = 3
elseif b == "D" then
framekey = 4
elseif b == "E" then
framekey = 5
elseif b == "F" then
framekey = 6
-- elseif b == "G" then
-- framekey = 7
-- elseif b == "H" then
-- framekey = 8
-- elseif b == "X" then
-- framekey = 9
end
table.insert(libSyncTable, {a, framekey})
end
Có nhiều chương trình làm được việc này, nhưng tôi đã chọn chương trình miễn phí https://github.com/DanielSWolf/rhubarb-lip-sync.
if not os.path.exists(audioPath_lsc):
print(f"create lcs {audioPath} with text {text}")
with open("../temp/lipsync.txt", 'w') as file:
file.write(text)
command = [
"../src/lib-dev/rhubarb/rhubarb", # Het pad naar het rhubarb-programma
audioPath_ogg, # SOUND_FILE
"--recognizer", "pocketSphinx", # Recognizer instellen
"--exportFormat", "tsv", # Export formaat instellen
"--dialogFile", f"../temp/lipsync.txt", # TEMP_DIR voor dialogFile
"--output", audioPath_lsc, # OUTPUT_FILE
"--datFrameRate", "60", # Data frame rate
"--extendedShapes", "ABCDEF" # Extended shapes
]
result = subprocess.run(command, check=True)
if result.returncode != 0:
print("error")