Penyegerakan bibir

Apa yang awak cakap?

Piksel + Pergerakan + Bunyi = Hidup

Menjadikannya lebih realistik

Ada beberapa watak yang akan bercakap, dan buat masa ini anda hanya nampak belon teks. Sebenarnya saya sudah boleh menggunakan audio, tetapi ia belum nampak cantik. Apabila seseorang bercakap, mulutnya mesti bergerak, jadi saya mengkaji bagaimana ia dilakukan dalam kartun.

Ringkasnya, dengan sekurang-kurangnya 6 hingga 9 imej mulut yang berbeza, anda boleh membuatnya nampak seperti benar-benar bercakap. Ada pelbagai program yang menukar audio kepada imej mana yang perlu dipaparkan.

Input audio > program > output [ABBFGG].

Kemudian dalam permainan, bingkai kepala yang berbeza dipaparkan untuk setiap huruf.

    -- 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

Ada beberapa program yang boleh melakukannya, tetapi saya memilih program percuma 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")