up:: YMM
目パチ口パク実ボイス動画
通常、目パチ口パクは手動でやると非常に手間がかかります。
目パチはまだコピペでやることが可能ですが、音声と合わせる口パクはコピペ困難です。
これが必要になりがちな立ち絵アリ・合成音声の動画を作りやすいのがYMM4の特徴です。
その側面がよく知られているため、「合成音声以外の出力済みwavなどで口パクさせる方法」はあまり知られていません。
本ドキュメントではこれを解説します。
使用するもの
- YMM4
- Audacity
- Spreadsheet(GAS)
キャラクター設定
1920x1080、24fps、48000kHzでプロジェクトを新規作成。
キャラクター設定を開きます。
ファイル→キャラクター編集や、タイムライン下のセリフ入力欄の横のアイコンなどから開けます。どこからでも同じ画面が出ます。
ボイス
下にある新規作成でキャラクターを追加し、ボイス設定を行います。
名前は台本のキャラ名と揃えます。
グループはキャラクターの管理機能なので、好きな名前でいいです。
アイテムの色はタイムライン上のアイテムの色です。
動画ではテキストの色に合わせています。
レイヤーは何でもいいですが、挿入するキャラ数x2くらいの値にしておくと後で助かります。
声質はなしにしてください。
立ち絵
立ち絵設定を行います。
種類はPSDファイル、ファイルに使用するPSDファイルを指定します。
確認のために口パク感度を2000%程度にします。
口パクのなめらかさは1でいいです。
次にファイル横の鉛筆アイコンをクリック。
目パチ口パク設定
目パチ口パク設定を行います。まずは目。
開いている目を選択し、パーツ設定の下から追加をクリック。
アニメーションに使うコマを追加し完了。
パーツ設定に出てきたコマを、開↑↓閉になるように並べ替えます。
口も同様ですが、詳細設定で口パクを選択することを忘れないように。
[! 余談]
この立ち絵設定のPSDは、本来キャラごとに別々のPSDを分けて設定します。
全部まとめたまま扱うと選択や背景分の手間がかかりますが、今回のケースでは「画面構成をクライアント側が決めたとおりのままにできる」「分割が手間」という点を鑑みてこうしています。
字幕
字幕を設定します。
タイムラインに戻り、タイムライン下のプルダウンを設定中のキャラクターに変更。
「ここにセリフを入力」とある場所に適当にテキストを入力し追加をクリック、ボイスアイテムを一つ追加します。この時点ではデフォルトの字幕が出ます。
追加したボイスアイテムを選択し、字幕の設定を「個別に設定する」にして、本番と同じように字幕を装飾します。
完成したら、ボイスアイテム設定の一番下にあるデフォルトに設定をクリックし、字幕設定をキャラクターに反映を選択します。
これで同じキャラクターのボイスは設定した字幕を使用するようになります。追加したボイスアイテムは消して構いません。
複製
ボイス・立ち絵・目パチ口パク・字幕を同様に全員分行います。
キャラクター設定には複製ボタンがあるので活用しましょう。
(プルダウンで複製を選んだあと、改めてクリックしないと複製されません)
PSDから背景を切り出していない場合は、背景用のキャラクターも追加します。
動画
立ち絵表示
設定が終わったら、動画を作ります。
字幕設定時と同じくプルダウンでキャラ選択、立ち絵アイテムを出します。
追加した立ち絵アイテムを選択し、拡大率を調整して揃え、必要な立ち絵だけに絞ります。
(スライダーバー上でctrl+ホイールで1刻みで数値を変更できます。ctrl+shift+ホイールで10刻みになります)
また、口や目は目パチ口パク設定で設定した物にしておきます。設定した物には緑色のチェックマークがついています。
終わったらデフォルト設定にしておきます。
字幕の時と同じくクリックします。
同じく全員分行います。背景がある場合は一番若いレイヤーに配置します。
ここでつい数値が多い方のレイヤーのキャラを出しっぱなしにし、それ以下のレイヤーのキャラが表情を変えても反映されなくなるということがあります。気を付けます。
目パチ口パクテスト
目パチ口パクのテストを行います。
音声ファイルを独立した音声アイテムではなく、キャラクターのボイスアイテムとして入れます。
エクスプローラーからボイスファイルを右クリックし、ファイルのパスをコピー。
プルダウンがパスをコピーしたボイスファイルのキャラと同じであることを確認し、「ここにセリフを入力」とある場所にパスをペーストします。前後の「”」は消してください。
消し終えたらEnterを押すか、追加ボタンをクリックでアイテムを追加します。
入力があっていれば、発音にファイルパスが入力された特殊なボイスアイテムがシークバーの場所に追加されます。
再生してみて口が動けば成功です。
[! 口が動かない場合]
- 立ち絵アイテムの設定でチェックマークがついた口を選んでいるのを確認
- 口パク感度を十分に上げていることを確認(かなり上げないと動きません)
- 目パチ口パク設定で開↑↓閉の順で並べている、まばたきから口パクに変更していることを確認
- 音の大きい部分まで再生ヘッドを持っていき、動くか確認する
[! 余談]
- 発音にファイルパスさえあれば特殊なボイスアイテムになります。
後から設定しても構いません。- ここでテストしないと、Audacityの操作ミスまで疑うことになるのでここでやっています。
同じく全員分のボイスアイテムを追加し、全員が口パクしていることを確認します。
確認なのでここで追加したボイスアイテムは消去します。
字幕表示(Premiereでやりたい場合は飛ばします)
字幕を表示します。
台本の内容だけが書かれたcsvが必要なので、台本シートから切り出します。
台本内容をドラッグで選択し、適当に新規作成したSpreadsheetなどに貼り付けます。ちゃんとA列B列に分かれたら成功です。
[! Tips]
プルダウンの関係上、Invalidエラーが出ることがありますが、文字列が入力されていれば問題ありません。
編集を終えたら、ファイル→ダウンロードでcsvを選択して保存します。
YMM4上でツール→台本編集を選択し、先ほどのcsvを読み込ませ、タイムラインに追加します。
[! 注意]
台本読み込み時、A列にYMM4上でのキャラクター設定と対応しないキャラがいるとキャラクター指定画面になります。
A列を編集してダウンロードしなおすか、キャラクター設定を修正してください。
以下のようにボイスアイテムが並びます。
見た目はボイスアイテムですが、キャラクター設定でボイスの声質をなしにしているため、音はありません。字幕として扱えます。
(キャラクター設定でレイヤーを遠い数値に合わせたのは、ここで0にすると既に0にあるアイテムを避けるように字幕アイテムがずれて配置され、色々面倒になるからです)
ボイス分割
字幕が出来たら、目パチ口パクテストで作ったボイスアイテムを手動で切って合わせていくのが正道ですが、非常に面倒です。
Premiereだと無音区間で切るシステムがありますが、YMM4にはありません。
動画だけエクスポートしてPremiereで音編集しようにも、Premiereでは当然口パクしてくれません。
なので事前に音声ファイルを無音区間で切り、台本機能で一気に読み込みます。
Audacityを開いて音声ファイルを読み込みます。
解析→サウンドから自動ラベル付けを選択しラベルを付けます。
ラベルとは音声ファイルに付ける区間タグのようなものです。srtなど字幕ファイルをイメージすると分かりやすいと思います。
最適な設定はファイルごとに変わるので、以下は一例です。
しきい値は-40dB。これ以上の音をラベルとして扱います。
最短継続時間は0.5秒。ラベルが途切れ途切れになるときに上げます。短いセリフを上手く読めないときに下げます。
最短ラベル間隔は1秒。次のセリフまでラベルが巻き込んでしまうときに上げます。セリフの転換点で上手く切ってくれない時に下げます。
ラベル配置形式は有音部の継続範囲に配置。
最長無音部は両方0.1秒。しきい値で拾いきれない音を拾うために付けています。上げれば上げるほどAudacityへの手戻りは減りますが、動画編集時の微調整負担が増えます。
ラベルがついたら、台本を見ながら聞いて変な区間で音が切られていないか確認します。(「声優様ごとのセリフ」シートが使いやすいです)
[! Tips]
- 上の数直線の歯車をクリック→連続スクロールをONにしておくと便利です。
- 変な区間でループしてしまった場合は、歯車→ループを解除で解除します。
たいていはあるラベルの開始~隣のラベルの終了時間を区間とすれば上手くいくので、コピペで修正します。
終了時間が合っている方のラベルの名前を右クリック、ラベルを編集を選択しラベルエディターを開きます。
終了時刻をクリックして選択、Ctrl + Cでコピーします。
(黒い枠線で囲まれただけの時のみコピーできます。ダブルクリックすると実際に時刻を編集する画面になり、そこではコピーできません)
開始時間が合っている方のラベルを同じく編集、開始時刻をクリックしてCtrl + Vで貼り付けます。貼り付けられるのは同じく黒い枠線で囲まれた時のみです。
ここで現在のバージョン(3.6.1)ではOKをクリックしても編集が反映されないので、貼り付けた時刻をダブルクリックして編集画面を開き、0.001秒だけ足して編集を反映させます。
(時刻が変わりさえすれば反映されるので、減らしても1秒足しても構いません。増えても影響がない程度の数値として+0.001秒にしています)
(日本語入力のままだと数値が入力できません)
OKをクリックし、ラベルエディターを閉じます。正しい区間を示したラベルが出来たら成功です。
終了時刻が合っている方のラベルは必要無いので、右クリック→ラベルを消去で消します。
同様に繰り返し、全てのラベルが正しいことを確認したら、ファイル→オーディオをエクスポートでエクスポートします。
ファイル名は使われないので適当でいいです。
フォルダーはどこでもいいですが、後でこのパスを使用するのでメモしておきます。
形式とオーディオオプションは以下のようにすれば問題なく無圧縮編集になるはずです。気になる場合はMediaInfoなどでファイルを調べて数値を合わせてください。
形式はWAV。
チャンネルはステレオ。
サンプリング周波数は48000 Hz。
エンコーディングはSigned 16-bit PCM。
エクスポート範囲は複数ファイルにし、ファイル分割基準をラベルに。
ファイルの命名はファイル名プレフィクスに続けて番号を付加。
プレフィクスには台本上でのキャラクター名を入れます。(Spreadsheetのコードの都合上の命名です)
出来たらエクスポートします。
一瞬で終わります。
同じように他の声ファイルも分割します。
万一、手戻りが発生したときの為にAudacityのプロジェクトは保存しておいてください。
また、出力ファイルパスは全て同じ場所にします。
音声台本
(そのうち本台本にスクリプトが合体すると思うので、それまでは以下の手順でお願いします)
台本から音声台本を自動生成するため、SpreadsheetにGASを付けます。
先ほどの字幕台本を生成したSpreadsheetを使いまわします。字幕台本があるシートを「元台本」にリネームし、「音声台本」シートを新規で追加します。
シートから拡張機能→Apps Scriptを開き、Spreadsheetと連携されたApps Scriptを作ります。
Code.gsに以下のコードを貼り付けます。
function onOpen() {
SpreadsheetApp.getUi()
.createMenu("GAS実行")
.addItem("音声台本に変換", "convertToFilePaths")
.addToUi()
}
function convertToFilePaths() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = spreadsheet.getSheetByName("元台本");
var scriptNames = sheet1.getRange("A1:A" + sheet1.getLastRow()).getValues();
var flattenScriptNames = scriptNames.map(v => v[0])
var uniqueScriptNames = Array.from(new Set(flattenScriptNames));
var namesData = {}
for (var v of uniqueScriptNames) {
namesData[v] = 1
}
var voiceFilePathBase = "D:\\Test\\YMMproj\\test\\k"
var voiceFileSheet = []
for (var v of flattenScriptNames) {
if (v in namesData) {
voiceFileSheet.push([v, voiceFilePathBase + "\\" + v + '-' + String(namesData[v]).padStart(2, "0") + '.wav']);
namesData[v] += 1;
} else {
Error("Unknown Name in namesData");
}
}
var sheet2 = spreadsheet.getSheetByName("音声台本");
const range = sheet2.getRange(1, 1, voiceFileSheet.length, voiceFileSheet[0].length);
range.setValues(voiceFileSheet);
}
voiceFilePathBaseは先ほどオーディオをエクスポートしたファイルのフォルダパスと合わせます。
パスの\(バックスラッシュ)は例と同じように二つ重ねるようにします。
編集を終えたら保存し、Spreadsheetに戻って再読み込みを行います。
すると上のツールバーにGAS実行という欄が出来ています。クリックし、音声台本に変換を実行。
(シートの変更を伴うため警告が出ることがありますが、詳細をクリックして続行を選びます。警告ウィンドウが閉じたら、再度変換を実行します)
これで音声台本が出来ます。ファイル→ダウンロードでcsvとしてダウンロードします。
ボイス表示
YMM4で音声台本を読み込みます。
上手くいけば、台本通りに音声ファイルを読み込み、ボイスアイテムとしてタイムラインに並べてくれます。
これで全てのファイルが読み込めました。あとはYMM上で編集します。
微調整
字幕
声付きボイスアイテムの字幕を消します。
左端のアイテムを選び、右クリック→選択中のアイテムの右のアイテムを選択 で同じレイヤーのアイテムを選択し、左端のアイテムをCtrl+クリックで追加選択します。これで同じレイヤーの全てのアイテムを選択できます。
字幕の設定を非表示にすれば消せます。
字幕アイテムの長さを声つきボイスアイテムと合わせます。
また字幕を見ていき、横にはみ出ていたら適当にShift+Enterで改行を入れていきます。
声
聞いて心地よくなるように、声のタイミングをカットで調整します。
音量も調整します。
聞いて問題ないなら大抵問題ありませんが、ピークメーターで0dbを超えると音割れするのでそれだけ注意します。
https://x.com/kentax/status/1799371697486987755
ズーム
画面の複製アイテムを追加し、XYと拡大率を調整してズームします。
画面の複製はそれよりも番号が若いレイヤーにかかります。なので字幕アイテムより下に置くといいです。
目安ですが、顔の肌色の長さが動画の上端~テキストの上端までの1/2くらいになるようにするといい感じです。
表情
立ち絵・ボイス・表情アイテムから表情を変更できます。
ボイスの切り替えで表情が変わることが多く、またボイス終了後はズームにより顔が映らないため、ボイスアイテムで変更するのが良さげです。
ボイスアイテムの立ち絵→表情を変更 で調整できます。
他のキャラが喋っている時でも表情を変更したい場合は、立ち絵アイテムを切るか表情アイテムで調整します。
[! Tips]
レイヤー番号が一番多いアイテムの表情が優先されます。
もっと細かく口パクしてほしい場合は、口パクの滑らかさを落とします。
たいていは1で問題ありません。
感度は口の変化の反応感度です。
この値を小さくすると、口を開き始めるまでのレベルが高まります。
(変化の最小音量とは反比例関係になります)
滑らかさは口の変化の最小時間です。
滑らかさを下げると短くなります。例えば僅かな無音区間でも口を閉じるようになります。
その他編集を行い、できたら出力へ。
出力
完成したら、ファイル→プロジェクトを保存で先にプロジェクトファイルを保存しておきます。
ごくまれにメモリ不足などで動画出力中にYMM4が落ちることがあります。
ファイル→動画出力 で動画を出力します。
FFmpegを使用するほうが基本的に高画質です。
映像ビットレートは8000にします。これは1080p・24fpsの推奨値です。
音声ビットレートは320kbpsにします。ステレオの推奨値です。
https://support.google.com/youtube/answer/1722171#zippy=%2Cビットレート
映像コマンドに-c:v h264_nvenc
を追加すると、多少画質を犠牲にしてエンコードを高速化します。
ただしグラフィックボードが対応している場合のみです。
https://forums.developer.nvidia.com/t/video-encode-and-decode-gpu-support-matrix/64780
再生環境がある場合は-c:v hevc_nvenc
のほうが綺麗になります。
音割れ対策と音量の最大化にチェックを入れます。
音のバランスを保ったまま、音が小さすぎるor大きすぎるという問題に対処できます。
ここまで設定出来たら出力します。
完成後は倍速でもいいのでざっくりチェックして、良ければ提出です。お疲れ様でした。