🎥

YouTube動画編集のために利用する字幕をOpenAIのwhisper apiを使って生成する

2023/03/28に公開

こんにちは、日台カップルYouTuberです。
以前はRailsのバックエンド開発オンリーでしたが、直近半年くらいはSwiftでiOSアプリ開発をしています。個人開発でも最近はSwiftUIを使ってゲームアプリを作っています。今月中にリリース予定なので、そちらの方もまた記事にしたいと考えています。

はじめに

今回はYouTubeの編集の際に利用する字幕の自動生成と動画編集への適用の仕方についてまとめたいと思います。
最近OpenAIのwhisper apiが公開されたことがきっかけで調査をはじめました。

次の一つでも当てはまればに参考になると思います。

* OpenAIのwhiperについて興味がある方
* YouTubeの動画編集でフルテロップを入れている方
* YouTubeの動画編集2言語のフルテロップを入れている方
* Adoobe Premiere Proの字幕ファイルに自由にエフェクトを当てたい方

最初に結論

  • 長い動画の場合whisper apiではなくwhisper CLIを使う
  • 台灣華語はGoogle Translateで翻訳する
  • srtファイルはPremiereProでエフェクトを当てることが可能なxmlファイルに変換して利用する(PremireProがv23.1.0になればその必要は無くなりそう)

多言語対応動画編集の大変なところ

僕は日台カップルのYouTuberで主に日本人と台灣人の視聴者さんを対象に動画を作成しています。そのため毎回の動画編集で、

「動画のカット」
↓
「日本語の字幕を起こす」 👈これの作業時間を減らしたい
↓
「台灣華語に翻訳する」 👈ついでにこれも
↓
「音声に合わせて字幕を当てる」 👈これの作業時間を減らしたい

という作業が発生します。
今まではGoogleスプレッドシートで上記の文字起こしと台灣華語への翻訳を行い、それをPhotoShopに読み込める形でエクスポートし、座布団付きの字幕を作っていました。そこから字幕を音声に合わせて時間調整していくという作業をしていました。

スプシ PhotoShop PremierePro

これがめちゃくちゃ時間がかかるのでどうにかしたいなーと思っていました。編集で利用しているAdobe PremiereProにも字幕の自動生成機能があるのですが、日本語だからなのかとても精度が悪く、自動生成は諦めていました。

whisperについて

whisper apiを少し触ったときの所感

台湾の知人からYouTubeの字幕生成にwhisperがいいよ、という話を聞いたので試しに過去動画の字幕を生成したところ日本語でもかなり高い精度でした。

https://youtu.be/F1ZseOh3d-k

# 出力されたsrtファイルの一部
1
00:00:00,000 --> 00:00:07,640
今日は名古屋の南東方面にある安城市の有名店
2
00:00:07,640 --> 00:00:14,600
北京本店を紹介します 日本の大人気ゲーム猛鉄にそれっぽい店が出てくるほどの人気店です
3
00:00:14,600 --> 00:00:19,440
一番有名なのはこの北京版です
4
00:00:30,360 --> 00:00:31,360
美味しそう
5
00:00:31,360 --> 00:00:33,360
これ一番有名なやつ

.
.
.

精度の高い文字起こしを実現しつつ、時間も同時に出てくるのでうまくいけば「日本語の字幕を起こす」「音声に合わせて字幕を当てる」の編集項目を減らすことができます。翻訳もapiである程度できるので「台灣華語に翻訳する」の負担も減らすことができそうです。

whisper apiの利用料も2023/3/25時点で$0.006 / minute(変換したい音声の時間)で、30分の動画の音声の文字起こしをしても$0.18しかかからないのでとてもリーズナブルです。レスポンスも30分動画の文字起こしが3分程度で返ってきました。

あまり纏まってないですが、レポジトリも作って公開しています。apiとのインターフェースは公式リファレンスを見ながら書きました。ファイル操作とかはChatGPTに聞きながらできるのであまり慣れていない言語でも作りやすくなりましたね。
https://github.com/atamakonkurii/whisper-transcript-python

https://platform.openai.com/docs/api-reference/audio/create

whisper apiの問題点(2023/3/25時点)

上であげたような短い動画で試して好感触が得られたので、編集中の30分動画に適用しようとしました。
しかし、長い動画になると(?)同じ文章が何回も生成されるような現象が発生しました。

# 出力されたsrtファイルの一部
32
00:02:00,000 --> 00:02:03,000
店員さんが教えてくれたらいいなと思って、

33
00:02:03,000 --> 00:02:06,000
店員さんが教えてくれたらいいなと思って、

34
00:02:06,000 --> 00:02:09,000
店員さんが教えてくれたらいいなと思って、

.
.
.

この現象はコマンドラインバージョンのwhisperで報告されたissueにもあった現象で、このときはoptionの--compression_ratio_thresholdの値を下げることtemperatureの値を変更することで解決したようです。
https://github.com/openai/whisper/discussions/192

そこでwhisper apiの方でもtemperatureの操作はできるので値を調整してみましたが、結果的に上記の問題は解決されませんでした。--compression_ratio_thresholdの値はwhisper apiでは2023/3/25時点で値の指定ができなさそうでした。(API referenceに載っていないこと、paramsに--compression_ratio_thresholdで値指定を試みたが結果が変わらなかったことから判断しました。)
これはissueのリンク先にも書いてありましたが、繰り返し同じ文字列が生成される問題はある程度temperatureの操作等で緩和できますが、性能の限界がどうしてもあるようです。特にあまり学習されていない言語では起こりやすいとのことで、もしかしたら日本語もそれに該当するかもしれません。

whisper CLIなら繰り返しの文字列生成が起こりにくかった

whisperはapiが出る前からCommand-lineで実行可能なライブラリが公開されていました。
https://github.com/openai/whisper

こちらは自分で用意したリソースを利用するので、apiの利用料はかかりません。modelはいろいろ指定できるのですが、apiバージョンはlarge-v2モデル相当(だった気がする)しか選べませんが、CLIバージョンは{tiny.en,tiny,base.en,base,small.en,small,medium.en,medium,large-v1,large-v2,large}から選べます。
実際に使ってみたところ、感覚的になってしまいますが、apiの方で発生していた繰り返しの文字列生成がおこりにくくなりました。

正直こ辺りはapiが出たばかりなこと、beta版であることを考えると時間が解決してくれる気がします。要件的にもapiである必要性が低いので一旦はCLIの方で個人的には運用しようと思います。

(ただ、apiに比較してCLIはめちゃくちゃ実行時間がかかります。特に長い音声の場合は指数関数的に文字起こし時間が上がるので、必要に応じて音声を分割して入力する方が良さそうです。)

# 入力はこんな感じ
whisper output/mp3/voice.mp3 --model large-v2 --output_dir output/srt/japanese --output_format srt --language ja --initial_prompt "大阪旅行に近鉄の火の鳥に乗って行きます" 

私の環境では30分の音声ファイルの文字起こしで4時間かかりました、、、結構長いですよね、、、
ただ、待ってるだけなので置いておけば勝手にできてます。

出力結果.srt

起こりにくいと言っても最後の方めちゃくちゃ繰り返し起こってます、、、
音声ファイルを分割することや入力パラメータをいじってある程度解消できます。
ただ、これでも字幕生成を60%くらいやってくれているのでだいぶ助かります。

[00:01.000 --> 00:03.000] 朝6時の44分
[00:03.000 --> 00:06.000] 今日は近鉄に乗って
[00:06.000 --> 00:09.000] 名古屋から大阪に行きます
[00:09.000 --> 00:12.000] 明徹名古屋駅に着いて
[00:12.000 --> 00:15.000] 隣に近鉄の乗り場があるんで
[00:15.000 --> 00:16.000] 行きます
[00:17.000 --> 00:20.000] 近鉄線
[00:20.000 --> 00:21.000] 上あがる
[00:21.000 --> 00:22.000] ここ書いてある
[00:22.000 --> 00:23.000] 上あがって
[00:24.000 --> 00:27.000] 近鉄の名古屋は一番端っこ
[00:27.000 --> 00:28.000] そうそう
[00:28.000 --> 00:29.000] 終点なんだ
[00:29.000 --> 00:30.000] なるほど
[00:30.000 --> 00:33.000] 私たちは今度は大阪ナンバーって
[00:33.000 --> 00:34.000] 一番端っこに
[00:34.000 --> 00:35.000] 本当だ
[00:35.000 --> 00:36.000] ここだ
[00:36.000 --> 00:37.000] あそこに
[00:37.000 --> 00:40.000] 値段はこういう感じで書くらしい
[00:40.000 --> 00:43.000] 黒いのほうは大人
[00:43.000 --> 00:45.000] 赤いのほうは子供の値段
[00:45.000 --> 00:47.000] だからこの空間は
[00:47.000 --> 00:52.000] 大阪ナンバー、日本橋は全部2400円くらい
[00:53.000 --> 00:56.000] 車椅子ウォーカー
[01:06.000 --> 01:07.000] 1枚
[01:08.000 --> 01:10.000] これ急に英語になってるね
[01:18.000 --> 01:19.000] ちっちゃ
[01:19.000 --> 01:20.000] 本当だね
[01:21.000 --> 01:22.000] 5番線
[01:32.000 --> 01:34.000] ICカードもできる
[01:34.000 --> 01:36.000] 乗車券なら普通ICカードで
[01:36.000 --> 01:37.000] Bといける
[01:39.000 --> 01:40.000] これさ
[01:40.000 --> 01:42.000] 何番だっけ
[01:50.000 --> 01:51.000] 待って
[01:51.000 --> 01:52.000] すごい
[01:53.000 --> 01:55.000] デパートのあれみたい
[01:58.000 --> 01:59.000] 待って
[01:59.000 --> 02:00.000] 何これ
[02:00.000 --> 02:02.000] このスペースやば
[02:08.000 --> 02:09.000] こっち?
[02:10.000 --> 02:11.000] すごい
[02:16.000 --> 02:17.000] これ何?
[02:17.000 --> 02:19.000] 今数直なんだけどさ
[02:19.000 --> 02:21.000] このやるの
[02:22.000 --> 02:23.000] 足
[02:23.000 --> 02:24.000] 見て
[02:25.000 --> 02:26.000] 本当だ
[02:32.000 --> 02:33.000] 気持ちいい
[02:36.000 --> 02:37.000] やばいね
[02:37.000 --> 02:38.000] 何これ
[02:39.000 --> 02:40.000] 見て
[02:40.000 --> 02:41.000] キーホルダー持ってる
[02:41.000 --> 02:42.000] すご
[02:42.000 --> 02:43.000] 火の鳥の
[02:43.000 --> 02:45.000] コラボ商品だ
[02:45.000 --> 02:46.000] コーヒーもある
[02:46.000 --> 02:47.000] コーヒー飲もう
[02:47.000 --> 02:48.000] いっぱい飲もう
[03:02.000 --> 03:03.000] できました
[03:04.000 --> 03:06.000] 赤いランプが消えた
[03:12.000 --> 03:13.000] コーヒー?
[03:13.000 --> 03:14.000] なるほど
[03:16.000 --> 03:18.000] ペットボトルじゃない
[03:46.000 --> 03:48.000] ダメだね
[04:17.000 --> 04:18.000] 帰宅
[04:22.000 --> 04:23.000] 来た
[04:25.000 --> 04:26.000] 何番だ
[04:31.000 --> 04:32.000] もうない
[04:35.000 --> 04:36.000] 行こう
[04:36.000 --> 04:38.000] 何番ウォーク
[04:40.000 --> 04:41.000] 今ね
[04:41.000 --> 04:43.000] ここの何番駅に
[04:44.000 --> 04:45.000] 現在地
[04:46.000 --> 04:47.000] ちょっと
[04:48.000 --> 04:49.000] 目的地が
[04:49.000 --> 04:50.000] この何番ウォークのところ
[04:50.000 --> 04:52.000] ここら辺にあるたこ焼き屋さん
[04:52.000 --> 04:53.000] なるほど
[04:54.000 --> 04:55.000] 今9時18分
[04:55.000 --> 04:56.000] はい
[04:56.000 --> 04:57.000] 2時間後
[04:57.000 --> 04:59.000] あんまり開いてない
[04:59.000 --> 05:00.000] うんね
[05:03.000 --> 05:04.000] こちらバーク
[05:05.000 --> 05:06.000] うわぁ
[05:06.000 --> 05:07.000] こちら
[05:10.000 --> 05:11.000] 出ました
[05:11.000 --> 05:12.000] あ、中だ
[05:13.000 --> 05:14.000] はい
[05:14.000 --> 05:15.000] 行こう
[05:17.000 --> 05:18.000] 大阪っぽい
[05:22.000 --> 05:23.000] 8個でいいよね
[05:23.000 --> 05:24.000] 8個でいいよ
[05:24.000 --> 05:25.000] 8個でいいんじゃない
[05:25.000 --> 05:27.000] たこ焼き8個ください
[05:27.000 --> 05:28.000] ソース醤油塩
[05:28.000 --> 05:29.000] ピリ辛ございます
[05:29.000 --> 05:30.000] あ、これ
[05:30.000 --> 05:31.000] どうしよう
[05:31.000 --> 05:32.000] ソース
[05:32.000 --> 05:33.000] ソースでお願いします
[05:33.000 --> 05:34.000] ソースで
[05:34.000 --> 05:36.000] マヨネーズ青のり鰹をお付けいたします
[05:36.000 --> 05:37.000] はい、お願いします
[05:38.000 --> 05:39.000] お、すごい
[05:39.000 --> 05:40.000] すごい
[05:40.000 --> 05:41.000] すごい
[05:47.000 --> 05:48.000] うわぁ、すごい
[05:49.000 --> 05:50.000] すごい
[05:50.000 --> 05:51.000] ありがとうございます
[05:54.000 --> 05:56.000] ここ食べる場所あるらしい
[06:08.000 --> 06:09.000] あっちいよね
[06:09.000 --> 06:10.000] 私遊びに行くわ
[06:16.000 --> 06:17.000] よし
[06:17.000 --> 06:19.000] ごちそうさまでした
[06:21.000 --> 06:22.000] 美味しかった
[06:25.000 --> 06:27.000] たこ焼きのすぐ近くここね
[06:27.000 --> 06:29.000] 4階の劇場で
[06:29.000 --> 06:30.000] うん
[06:30.000 --> 06:31.000] チケットは何円?
[06:32.000 --> 06:35.000] 4800円
[06:35.000 --> 06:36.000] そうなの
[06:37.000 --> 06:39.000] ちょっと高いね
[06:39.000 --> 06:40.000] そう
[06:40.000 --> 06:41.000] 1円くらいしかないから
[06:41.000 --> 06:42.000] ね
[06:43.000 --> 06:45.000] 吉本エンタメショップ
[06:45.000 --> 06:47.000] 吉本っていうのはさ
[06:47.000 --> 06:49.000] お笑い芸人の事務所だよ
[06:49.000 --> 06:50.000] そう
[06:50.000 --> 06:51.000] 日本一番でかいよね
[06:51.000 --> 06:52.000] 日本一番
[06:52.000 --> 06:53.000] そう
[06:55.000 --> 06:56.000] あれね
[06:57.000 --> 06:59.000] たこ焼きさん近く
[07:00.000 --> 07:02.000] で、右から車
[07:02.000 --> 07:03.000] 市場
[07:03.000 --> 07:05.000] 市場と言ったら朝市なのかな
[07:05.000 --> 07:06.000] 行ってみよう
[07:07.000 --> 07:08.000] あれか
[07:09.000 --> 07:11.000] 黒門市場
[07:12.000 --> 07:13.000] いいね
[07:13.000 --> 07:14.000] よし、楽
[07:15.000 --> 07:16.000] 分かんない分かんない
[07:16.000 --> 07:17.000] うわ、混んでる混んでる
[07:18.000 --> 07:19.000] すごい
[07:20.000 --> 07:22.000] ここ観光客多い
[07:22.000 --> 07:23.000] だからさ
[07:23.000 --> 07:26.000] コスパ良いかコスパ良くないか分かんない
[07:26.000 --> 07:28.000] 多分僕も
[07:28.000 --> 07:29.000] そうなの
[07:30.000 --> 07:32.000] この手でさ
[07:32.000 --> 07:33.000] 操る人の
[07:33.000 --> 07:35.000] 手作りどこかな
[07:35.000 --> 07:36.000] ん?
[07:36.000 --> 07:38.000] ああいう店?
[07:38.000 --> 07:39.000] 喋らないと
[07:39.000 --> 07:40.000] 珍しいね
[07:43.000 --> 07:44.000] カツ
[07:45.000 --> 07:46.000] 本当だ
[07:47.000 --> 07:48.000] 美味しそう
[07:48.000 --> 07:49.000] 海を一本一本
[07:52.000 --> 07:54.000] うわ、ここめちゃくちゃ賑やかじゃん
[07:54.000 --> 07:55.000] うわ、いいね
[07:57.000 --> 07:58.000] お点数?
[08:00.000 --> 08:02.000] 黒門市場はさ
[08:02.000 --> 08:03.000] 200周年の
[08:04.000 --> 08:05.000] 本当だ
[08:05.000 --> 08:06.000] すごい
[08:09.000 --> 08:10.000] 豆腐屋さん
[08:11.000 --> 08:12.000] 温かい
[08:12.000 --> 08:13.000] 飲もう
[08:14.000 --> 08:16.000] なかなかないよね
[08:16.000 --> 08:17.000] 豆乳で
[08:17.000 --> 08:19.000] 作りたて温かい
[08:19.000 --> 08:20.000] 豆腐の匂い
[08:20.000 --> 08:21.000] そうなの
[08:22.000 --> 08:23.000] 豆腐か豆乳どっち?
[08:25.000 --> 08:26.000] めちゃめちゃ豆腐の味
[08:26.000 --> 08:27.000] そうなの
[08:33.000 --> 08:34.000] 美味しい
[08:34.000 --> 08:36.000] 飲むの豆腐の匂い
[08:36.000 --> 08:37.000] そう
[08:37.000 --> 08:38.000] すごい美味しい
[08:38.000 --> 08:39.000] これ250円だけだよ
[08:39.000 --> 08:41.000] めちゃくちゃお得
[08:43.000 --> 08:44.000] 一日券
[08:47.000 --> 08:48.000] 一日
[08:49.000 --> 08:51.000] エンジョイエコカート
[08:51.000 --> 08:52.000] 何で20円入れたの?
[08:52.000 --> 08:53.000] 分かんない
[08:53.000 --> 08:54.000] 分かんないもん
[08:55.000 --> 08:56.000] 出た
[08:57.000 --> 08:58.000] 2枚
[08:59.000 --> 09:00.000] 今は
[09:00.000 --> 09:01.000] えーと
[09:01.000 --> 09:02.000] 日本橋
[09:02.000 --> 09:03.000] で
[09:03.000 --> 09:04.000] 私たちの
[09:04.000 --> 09:05.000] 今日のホテルは
[09:06.000 --> 09:07.000] 北浜
[09:07.000 --> 09:08.000] これで使う
[09:08.000 --> 09:09.000] 一日乗車券
[09:09.000 --> 09:10.000] 600円
[09:11.000 --> 09:12.000] 2番目
[09:13.000 --> 09:14.000] 他の方行くね
[09:14.000 --> 09:15.000] すごい
[09:15.000 --> 09:17.000] ドミンだよ
[09:17.000 --> 09:19.000] ドミンって何?
[09:19.000 --> 09:20.000] 後で
[09:22.000 --> 09:24.000] 後で施設を紹介する
[09:24.000 --> 09:25.000] 温泉
[09:25.000 --> 09:26.000] すごい温泉
[09:31.000 --> 09:32.000] 温泉
[09:34.000 --> 09:35.000] 都会にある
[09:36.000 --> 09:37.000] の旅館
[09:37.000 --> 09:38.000] すごいね
[09:38.000 --> 09:39.000] 温泉もちゃんとある
[09:39.000 --> 09:40.000] うん
[09:40.000 --> 09:41.000] ね
[09:41.000 --> 09:42.000] すごい
[09:43.000 --> 09:45.000] 京阪電車乗るね
[09:45.000 --> 09:47.000] 北浜駅
[09:49.000 --> 09:50.000] 今から
[09:50.000 --> 09:52.000] 大阪でめっちゃ有名なイタカヤに
[09:52.000 --> 09:54.000] これ地下鉄じゃない
[09:54.000 --> 09:56.000] あるイタカヤで
[09:56.000 --> 09:58.000] ネットフリックスで紹介されました
[09:58.000 --> 10:00.000] そうなの?
[10:00.000 --> 10:02.000] 美味しい?
[10:02.000 --> 10:03.000] なんか
[10:03.000 --> 10:04.000] 炎で
[10:04.000 --> 10:06.000] 手を
[10:06.000 --> 10:08.000] 炎で焼いてるらしいよ
[10:09.000 --> 10:11.000] 手を炎で焼いてるわ
[10:11.000 --> 10:13.000] 手を炎で焼いてる
[10:15.000 --> 10:17.000] 京橋
[10:19.000 --> 10:20.000] はい
[10:22.000 --> 10:24.000] 京橋
[10:24.000 --> 10:26.000] 京阪電車
[10:27.000 --> 10:29.000] 何時オープン?
[10:29.000 --> 10:31.000] 12時オープンで
[10:31.000 --> 10:33.000] みんな外に並ぶ?
[10:33.000 --> 10:35.000] 11時半
[10:35.000 --> 10:37.000] 観光の制限がなくなったら
[10:37.000 --> 10:38.000] もうやばい
[10:38.000 --> 10:40.000] だから今のほとんど
[10:40.000 --> 10:42.000] 行くの日本人が多いらしい
[10:42.000 --> 10:44.000] でももう観光制限
[10:44.000 --> 10:46.000] やばいよ
[10:48.000 --> 10:50.000] この道まっすぐ
[10:50.000 --> 10:51.000] なるほど
[10:51.000 --> 10:52.000] レッツ行く
[10:52.000 --> 10:53.000] はっ
[10:53.000 --> 10:54.000] なんか亀裂なってる
[10:54.000 --> 10:55.000] やばいやばいやばい
[10:56.000 --> 10:57.000] さっき行った
[11:05.000 --> 11:07.000] 長く行かないといけないんじゃないよね
[11:07.000 --> 11:08.000] 見てきてくれる?
[11:08.000 --> 11:09.000] いいよ
[11:09.000 --> 11:10.000] 見てきて
[11:10.000 --> 11:11.000] 私分かんないもん
[11:18.000 --> 11:20.000] 素晴らしい
[11:21.000 --> 11:22.000] 今ね
[11:23.000 --> 11:24.000] 11時半
[11:24.000 --> 11:25.000] 30分前に来て
[11:25.000 --> 11:26.000] そうそう
[11:26.000 --> 11:28.000] ここに並んでれば
[11:28.000 --> 11:30.000] 12時オープンの時に通してくれる
[11:30.000 --> 11:31.000] そうそう
[11:31.000 --> 11:33.000] なんかここに並べば大丈夫
[11:33.000 --> 11:34.000] あそこでなんか
[11:34.000 --> 11:36.000] 書くとかも大丈夫
[11:50.000 --> 11:51.000] やばい
[11:52.000 --> 11:53.000] あと2丁分
[11:56.000 --> 11:57.000] 入ってる入ってる
[11:57.000 --> 11:58.000] 今何時かな
[12:05.000 --> 12:06.000] はい
[12:06.000 --> 12:07.000] はい
[12:10.000 --> 12:12.000] リンビール1本で
[12:12.000 --> 12:13.000] リンビールはーい
[12:13.000 --> 12:15.000] お食事どうしましょう
[12:16.000 --> 12:17.000] コーニックの
[12:17.000 --> 12:18.000] コーニックのアブリン
[12:18.000 --> 12:19.000] 1枚
[12:19.000 --> 12:20.000] 1枚
[12:20.000 --> 12:21.000] はい
[12:22.000 --> 12:23.000] ウロンちゃん
[12:23.000 --> 12:24.000] こっから探さないといけない
[12:24.000 --> 12:25.000] えマジで
[12:26.000 --> 12:27.000] リンビール
[12:28.000 --> 12:29.000] これですよ
[12:30.000 --> 12:31.000] 250円じゃない
[12:33.000 --> 12:34.000] これしよ
[12:35.000 --> 12:36.000] でお箸も
[12:36.000 --> 12:37.000] これ
[12:37.000 --> 12:38.000] これ
[12:38.000 --> 12:39.000] これ
[12:39.000 --> 12:40.000] これ
[12:40.000 --> 12:41.000] これ
[12:41.000 --> 12:42.000] これ
[12:42.000 --> 12:43.000] これ
[12:43.000 --> 12:44.000] これ
[12:44.000 --> 12:45.000] お箸
[12:45.000 --> 12:46.000] 日本のトロは
[12:46.000 --> 12:47.000] 財布が
[12:47.000 --> 12:48.000] おもしろ
[13:04.000 --> 13:05.000] 乾杯しようぜ
[13:05.000 --> 13:06.000] 乾杯しよう
[13:08.000 --> 13:10.000] わおトロうまそう
[13:10.000 --> 13:11.000] 乾杯
[13:15.000 --> 13:16.000] 大阪旅
[13:20.000 --> 13:21.000] いいよ
[13:22.000 --> 13:23.000] これ見るうまい
[13:24.000 --> 13:25.000] うわうまそう
[13:25.000 --> 13:26.000] 色が
[13:27.000 --> 13:28.000] やばい
[13:35.000 --> 13:36.000] 一口
[13:36.000 --> 13:37.000] 持てない
[13:37.000 --> 13:38.000] 持てない
[13:38.000 --> 13:39.000] 届けた
[13:40.000 --> 13:41.000] 噛むか必要じゃない
[13:44.000 --> 13:45.000] 溢れるほど
[13:50.000 --> 13:51.000] 綺麗
[13:55.000 --> 13:56.000] おだし斜めにしないと
[14:02.000 --> 14:03.000] 泡が
[14:03.000 --> 14:04.000] 泡が
[14:04.000 --> 14:05.000] 美味しそう
[14:05.000 --> 14:06.000] 冷たいね
[14:06.000 --> 14:07.000] 乾杯
[14:15.000 --> 14:15.000] しらっしら
[14:15.000 --> 14:16.000]  sakura
[14:16.000 --> 14:40.000] shy
[14:40.000 --> 14:43.000] ドロッパー
[14:44.000 --> 14:46.000] オープンガールカーズカーミン
[14:46.000 --> 14:48.000] チェフォ
[14:48.000 --> 14:49.000] アヨケイ
[15:13.000 --> 15:33.000] オープンガールカーズ
[15:34.000 --> 15:36.000] ネックタイムフリー
[15:36.000 --> 15:37.000] ドロッパー
[15:37.000 --> 15:40.000] ガールカーズカーミン
[15:40.000 --> 15:42.000] ヤバい
[15:42.000 --> 15:43.000] 銃弾
[15:43.000 --> 15:44.000] 銃弾
[15:44.000 --> 15:45.000] 銃弾
[15:45.000 --> 15:46.000] 銃弾
[15:46.000 --> 16:14.000] 銃弾
[16:14.000 --> 16:20.000] 銃弾
[16:20.000 --> 16:39.000] 銃弾
[16:39.000 --> 16:49.000] ネックタイム
[16:49.000 --> 16:53.000] バー
[16:53.000 --> 17:07.000] ネックタイム
[17:07.000 --> 17:17.000] ネックタイム
[17:17.000 --> 17:27.000] ネックタイム
[17:27.000 --> 17:47.000] ネックタイム
[17:47.000 --> 17:59.000] ネックタイム
[17:59.000 --> 18:19.000] アペノハルバス
[18:19.000 --> 18:39.000] アペノハルバス
[18:39.000 --> 18:59.000] アペノハルバス
[18:59.000 --> 19:19.000] アペノハルバス
[19:19.000 --> 19:29.000] アペノハルバス
[19:29.000 --> 19:49.000] アペノハルバス
[19:49.000 --> 19:59.000] アペノハルバス
[19:59.000 --> 20:09.000] アペノハルバス
[20:09.000 --> 20:29.000] アペノハルバス
[20:29.000 --> 20:49.000] アペノハルバス
[20:49.000 --> 20:59.000] アペノハルバス
[20:59.000 --> 21:09.000] アペノハルバス
[21:09.000 --> 21:29.000] アペノハルバス
[21:29.000 --> 21:49.000] アペノハルバス
[21:49.000 --> 22:09.000] アペノハルバス
[22:09.000 --> 22:29.000] アペノハルバス
[22:29.000 --> 22:49.000] アペノハルバス
[22:49.000 --> 23:09.000] アペノハルバス
[23:09.000 --> 23:29.000] アペノハルバス
[23:29.000 --> 23:49.000] アペノハルバス
[23:49.000 --> 24:09.000] アペノハルバス
[24:09.000 --> 24:29.000] アペノハルバス
[24:29.000 --> 24:49.000] アペノハルバス
[24:49.000 --> 25:09.000] アペノハルバス
[25:09.000 --> 25:29.000] アペノハルバス
[25:29.000 --> 25:39.000] アペノハルバス
[25:39.000 --> 25:49.000] アペノハルバス
[25:49.000 --> 25:59.000] アペノハルバス
[25:59.000 --> 26:09.000] アペノハルバス
[26:09.000 --> 26:19.000] アペノハルバス
[26:19.000 --> 26:29.000] アペノハルバス
[26:29.000 --> 26:49.000] アペノハルバス
[26:59.000 --> 27:19.000] アペノハルバス
[27:19.000 --> 27:29.000] アペノハルバス
[27:29.000 --> 27:39.000] アペノハルバス
[27:39.000 --> 27:49.000] アペノハルバス
[27:49.000 --> 27:59.000] アペノハルバス
[27:59.000 --> 28:19.000] アペノハルバス

翻訳apiについて

DeepLGoogle Translategpt-3.5-turboを試そうとしてみました。
結論はGoogle Translateにしました。
https://github.com/atamakonkurii/whisper-transcript-python/tree/main/src/translate

要件は日本語から台灣華語への翻訳だったのですが、DeepL繁体語に対応しておらず台灣華語への翻訳ができないことがわかりました。一番翻訳精度が高そうなイメージがあったので残念です。
gpt-3.5-turboは値段が手頃でいいなと思ったのですが、promptに対してのレスポンスの形式がうまく制御できず、扱いづらかったので諦めました。(1行で返ってきて欲しいのに、数行で返ってくるときがあるとかとか)
たぶんプロンプト力が足りないだけなので、気が向いたらまた試してみようと思います。
Google Translateは無難です。

srtファイルをAdobe PremiereProで利用できるようにするための変換

以下の動画で見つけたことそのままなんですが、srtファイルをPremiereProで読み込める形のxmlファイルに変換することでエッセンシャルグラフィックスで字幕を扱えるようにすることができます。
https://www.youtube.com/watch?v=HFDka6V2kXI

変換は以下のサイトでできます。(2023/3/25時点)
https://srt2xml.com/

と思ったらPremiere Pro β版(23.1.0)でsrtから変換ができるようになるみたいですね。(これも上のサイトに書いてあった。)

実際に運用してみたつらみ

短い動画ではかなりの精度での文字起こし、字幕位置が生成されました。
しかし、長い動画の場合だと字幕位置のずれがところどころで目立ち、結局位置調整が必要でした。
この辺りはおそらく時間の問題でOpenAIさんが解決してくれると思うので、期待ですね。
ただ、元の運用よりは確実に楽になりました。

まとめ

今回は動画編集の字幕を入れる際、OpenAIのwhisper apiが便利そうという話を中心にしました。今までYouTubeの動画編集はパワーで乗り切ってきましたが、OpenAIによってもたらされたテクノロジーの進化をうまく使って行ければと思いました。
whisper apiはまだβ版なので今後のさらなる進化に期待ですね。

GitHubで編集を提案

Discussion