2022年7月22日追記
このエントリで言及しているDaVinci Resolveの字幕エクスポート時の問題はバージョン18.0で解消していることを確認しました。以下はすべてバージョン17以前の内容です。
2022年7月26日 さらに追記
コメントで、バージョン18でも引き続きズレが生じているという情報を頂きました。条件によって発生したりしなかったりするのかもしれません。引き続きいろいろ試してみて何かわかったら情報を更新していきます。
Youtube に動画を公開するにあたり、主に海外の視聴者のために字幕を入れたい。Youtube ではある言語の字幕を入れておくと、その字幕を元にして他の言語へ自動翻訳した字幕を使用することができる。精度については少々アレな部分もあるのだが、もともとの字幕を自動生成するよりはだいぶマシなものが生成される。
そこでYoutube 動画に字幕を入れたい、というニーズが発生するわけだが、Youtube 上でこれを手動入力するのは恐ろしく面倒で、何度か発狂しそうになった。これはちょっと無理だ、と思い、愛用しているDaVinci Resolve で字幕を入れてみることにした。
DaVinci Resolve にはエディットモードで字幕トラックというトラックを作成し、そこに字幕を入力することができる。これは映像や音声の波形を見ながら直感的に操作できるので非常に便利だ。もちろんYoutube Studio よりもレスポンスも良い。軽快に入力し、完成した字幕をエクスポートする。
簡単だ。あとはこれをYoutube へアップロードすればよい。
が。アップして再生を確認すると、字幕が明らかに遅れる。DaVinci 上ではジャストタイミングになっているのだが。はて。
エクスポートしたsrt データ自体がおかしい
DaVinci からエクスポートし、Youtube へアップロードしたsrt ファイルを確認してみると、明らかにタイムコードがズレている。
なぜ?
Youtube 上でズレるのは当然で、アップロードしたsrt ファイルに書かれているタイムコード自体が約4秒遅くなっているのである。4秒というとちょっと許容できない。
ググってみると同種のトラブルに見舞われている人はいるようだが、これと言った解決策はなさそうだった。完成した字幕トラックのクリップを全部ズレる分だけあらかじめ前倒ししておいてエクスポートする、というどうもスマートでない方法が解決策として提案されていた。
srt ファイルのタイムコードを書き換える
字幕データのsrt ファイルというのはとどのつまりテキストデータだから、これを解析してタイムコードの部分を全部4秒マイナスしてやれば解決するのではないか、と考え、それを実行するプログラムをPython で書いてみた。
とりあえず自分用なのでざっくり秒単位での移動を行うのみ。秒より小さい単位は無視している。またエラー処理もないので間違った引数を渡すと例外を投げる。
[追記] その後やはり小数点以下にも対応させ、-3.8秒、といった指示ができるようにしました。
突貫ヤッツケスクリプトではあるものの、これでとりあえず用は足りた。めでたく、4秒前倒しされてズレは気にならなくなった。
しっかしなんでDaVinci はエクスポートした字幕のタイムコードが移動しちゃうんでしょうか。いろいろ考えてみたけれどそういう仕様である必要性がわからなかった。
2023.4.23 追記
この記事を読んでくださった方から、このスクリプトを使って字幕を修正する具体的な方法について問い合わせをいただいたので、やり方を解説した記事を書きました。
スクリプト自体はここに紹介したものですが、これを使って実際にどうやって字幕を修正するのかを説明しました。スクリプト自体は完全に個人ユースの設計であれこれザルなのであくまで使用は自己責任でお願いしますが、自由に使用していただいて構いません。
コメント
18で試してみましたがやはりズレは生じています。
23.976が駄目かと24にしても駄目でした。
なんと。ダメなケースもあるんですね。情報ありがとうございます!
ちなみに私はフレームレート59.94で作業しており、17では4秒ズレていましたが18では直っていました。
fps によっても差があるのかもしれません。
引き続き確認してみます。
返信ありがとうございます。
17で作っていたものを18で編集していて駄目で、もしやと思い
18から新規で作り始めたものも残念ながらズレていました。
59.94や60ではやっていませんでしたので、ズレが解消されたかどうか、一度試してみたいと思います。