DaVinci Resolve で出力した字幕ファイルのタイムコードがズレる問題

DaVinci Resolve

 Youtube に動画を公開するにあたり、主に海外の視聴者のために字幕を入れたい。Youtube ではある言語の字幕を入れておくと、その字幕を元にして他の言語へ自動翻訳した字幕を使用することができる。精度については少々アレな部分もあるのだが、もともとの字幕を自動生成するよりはだいぶマシなものが生成される。

 そこでYoutube 動画に字幕を入れたい、というニーズが発生するわけだが、Youtube 上でこれを手動入力するのは恐ろしく面倒で、何度か発狂しそうになった。これはちょっと無理だ、と思い、愛用しているDaVinci Resolve で字幕を入れてみることにした。

 DaVinci Resolve にはエディットモードで字幕トラックというトラックを作成し、そこに字幕を入力することができる。これは映像や音声の波形を見ながら直感的に操作できるので非常に便利だ。もちろんYoutube Studio よりもレスポンスも良い。軽快に入力し、完成した字幕をエクスポートする。

字幕のトラックを右クリックし、Export Subitile でsrtファイルとして字幕をエクスポートできる

 簡単だ。あとはこれをYoutube へアップロードすればよい。

 が。アップして再生を確認すると、字幕が明らかに遅れる。DaVinci 上ではジャストタイミングになっているのだが。はて。

エクスポートしたsrt データ自体がおかしい

 DaVinci からエクスポートし、Youtube へアップロードしたsrt ファイルを確認してみると、明らかにタイムコードがズレている。

DaVinci の編集画面上で見るタイムコードと、エクスポートされたsrt ファイルの内容が明らかにズレている

 なぜ?

 Youtube 上でズレるのは当然で、アップロードしたsrt ファイルに書かれているタイムコード自体が約4秒遅くなっているのである。4秒というとちょっと許容できない。

 ググってみると同種のトラブルに見舞われている人はいるようだが、これと言った解決策はなさそうだった。完成した字幕トラックのクリップを全部ズレる分だけあらかじめ前倒ししておいてエクスポートする、というどうもスマートでない方法が解決策として提案されていた。

srt ファイルのタイムコードを書き換える

 字幕データのsrt ファイルというのはとどのつまりテキストデータだから、これを解析してタイムコードの部分を全部4秒マイナスしてやれば解決するのではないか、と考え、それを実行するプログラムをPython で書いてみた。

自分用なのでエラー処理などは省略してあるのと、秒より小さい部分は無視してきっかり4秒移動させている。

 とりあえず自分用なのでざっくり秒単位での移動を行うのみ。秒より小さい単位は無視している。またエラー処理もないので間違った引数を渡すと例外を投げる。

 突貫ヤッツケスクリプトではあるものの、これでとりあえず用は足りた。めでたく、4秒前倒しされてズレは気にならなくなった。

 しっかしなんでDaVinci はエクスポートした字幕のタイムコードが移動しちゃうんでしょうか。いろいろ考えてみたけれどそういう仕様である必要性がわからなかった。

コメント

タイトルとURLをコピーしました