Lippensynchronisation

Was sagst du?

Pixel + Bewegung + Sound = Leben

Realistischer machen

Es gibt einige Figuren, die sprechen werden, und im Moment siehst du nur eine Sprechblase. Ich konnte zwar schon Audio verwenden, aber es sah noch nicht schön aus. Wenn jemand spricht, muss sich der Mund bewegen, deshalb habe ich recherchiert, wie man das bei Zeichentrickfilmen macht.

Lange Rede, kurzer Sinn: Mit mindestens 6 bis 9 verschiedenen Bildern des Mundes kann man es so aussehen lassen, als würde er wirklich sprechen. Dafür gibt es verschiedene Programme, die Audio in das Bild umwandeln, das gezeigt werden muss.

Audio-Input > Programm > [ABBFGG] Output.

Danach wird im Spiel für jeden Buchstaben ein anderer Frame des Kopfes angezeigt.

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

Es gibt verschiedene Programme, die das können, aber ich habe mich für das kostenlose Programm https://github.com/DanielSWolf/rhubarb-lip-sync entschieden.

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