Rhubarb Lip Sync 2 will be a full rewrite based on my learnings from version 1 (see #95 ). As a first step, I'll create a proof of concept (PoC) to test the new libraries and approaches I'm planning to use. As a use case, I've chosen the Italian fan dub project of Thimbleweed Park. Once my PoC is good enough to give them Italian lip sync that's better than the current results using v1, I'll start work on v2 in earnest.
Here are the steps for the PoC (for details see below):
- First of all, I need an Italian pronunciation dictionary -- that is, a file that contains pronunciation information for several thousands of Italian words. This proved to be the first hurdle: There just isn't any existing (free) Italian pronunciation dictionary with the required size. So I'll roll my own based on data from Wiktionary.
- Once I have a basic pronunciation dictionary, I can use an existing machine learning tool (Phonetisaurus) to guess the pronunciation of any unknown word based on the pronunciation dictionary. This should be pretty painless, and it will allow me to calculate the pronunciation of any Italian sentence based on its dialog file (ignoring things like numbers of abbreviations; but there don't seem to be many of these in Thimbleweed Park).
- Next, I'll need a large Italian speech corpus, that is, a collection of recorded speech with transcripts. There are many freely available speech corpora, but none of them have the required amount (about 1,000 hours) of Italian speech. So I'll have to mix and match.
- Next, I'll train an existing forced alignment tool (Montreal Forced Aligner) on a large corpus of Italian recordings, allowing me to align arbitrary recordings later on.
- The last missing ingredient is a way to turn aligned phonemes into animation. To do this, I'll hack the existing Rhubarb v1 engine to accept pre-aligned phonemes as input, bypassing the normal recognition phase.
- At this point, I'll be able to take an Italian dialog file, calculate its pronunciation, align the pronunciation with the recording, and thus get the exact timing information of which phoneme is said when. I can then plug this information into the hacked Rhubarb 1 engine and hopefully get perfect Italian lip sync. Putting it all together will require some scripting.
Rhubarb Lip Sync 2 will be a full rewrite based on my learnings from version 1 (see #95 ). As a first step, I'll create a proof of concept (PoC) to test the new libraries and approaches I'm planning to use. As a use case, I've chosen the Italian fan dub project of Thimbleweed Park. Once my PoC is good enough to give them Italian lip sync that's better than the current results using v1, I'll start work on v2 in earnest.
Here are the steps for the PoC (for details see below):