1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

配信動画からの切り出しと字幕付与

1
Posted at

Code4Lib JAPANカンファレンス2025での録画動画配信のための作業結果をここでまとめておく。

Code4Lib JAPANカンファレンス2025は、Zoomを使ったフルオンラインでの開催だったが、その際、Zoomの参加上限(100ユーザ)を超える参加者が来た時に備えて、Zoomの連携機能を使ってYoutubeでのライブ配信も同時に実行した。

この2日分のオンラインカンファレンスでYoutubeライブ配信として記録された動画から、後日の録画配信してもよいと許諾を得た発表者分のみを発表者ごとに切り出して、さらに、UDトークで付与した字幕を載せて公開するための手順を紹介する1。

元データのダウンロード

Youtube上にライブコンテンツとして保存してある動画2本(半日分と一日分)をダウンロードしてきて、day1.mp4, day2.mp4 として保存しておく。

次に、当日の字幕校正データをさらに実行委員が人手で再修正をかけたファイルを、そのまま2日分としてCSV形式で day1.csv, day2.csv として書き出す。

こちらの字幕全体データのフォーマットは、UDトークから出力されたファイルとほぼ同一で、以下の項目から構成される。

  • StartTime: 開始時刻
  • EndTime: 終了時刻
  • Content: 字幕内容(再校正したもの)
  • Translation (使用せず)
  • Name (使用せず)
  • Result (使用せず)

image.png

発表者一覧データの作成

次に、字幕データに載っている時刻情報をもとに、各発表者(または発表セッション)の開始時刻と終了時刻(切り出したい範囲)をまとめたExcelファイルを作成し、これをCSV出力したファイル 発表一覧.csv を作成する。

発表者一覧データは以下の項目から構成される。

  • 発表番号: 各発表者・セッションを一意に特定する識別子
  • 動画: 1日目か2日目のいずれのセッションを示す (Day1 or Day2)
  • 開始日時: 字幕データファイルをみて、発表開始時刻 (StartTime) からコピペしてきた時刻
  • 終了日時: 字幕データの発表終了時刻 (EndTime) からコピペしてきた時刻
  • 発表者: プログラムの発表者(LTに関してはそのまま一つファイルとしているので、省略)
  • タイトル: 発表タイトル

※そのほか、録画公開の許諾チェック用の項目も加えていたが、公開作業では使っていないので、ここでは説明を省略する。

image.png

切り出しスクリプトと切り出し字幕データの作成

上記のファイル群として、字幕データ2日分(day1.csv, day2.csv)、発表者一覧.csv をChatGPTに与えて、以下の2つを同時に生成させる:

  1. ffmpegのコマンド処理をコマンドライン実行できるスクリプト ffmpeg_commands.sh として生成させる。
  2. 同時に、字幕情報を切り出したSRTファイル群(Day1_LT1.srt, Day1_Opening_清田陽司.srtなど)を生成させる。

なお、この字幕の切り出しの際には、字幕上の日時時刻と動画上の相対時刻をあわせる必要があるが、これは手元で動画を再生させながらメモしておき、字幕に対応する時刻を人手で与えることとした。

ChatGPTに与えたプロンプトはおおむね以下の通り2:

Google Spreadsheetに、Youtube動画の2本のライブ動画。計8時間分くらいがある。
字幕を付けたうえで、各発表/講演ごとに切り出したい。

字幕データのExcelは、おおよそ以下の形式でまとめられている:

  2025/09/07 16:51:17.493	2025/09/07 16:51:26.643	謝金とか、いろいろ払えたかなというふうに思います。<br>後援もあの広報とかをやってもらったりとかして、

さらに、発表一覧と字幕一覧があり、動画は2日分の2ファイルがある。
それぞれの動画の00:00:00に対応する実時刻は以下の通り:
* day1: 2025/09/06 13:30:50
* day2: 2025/09/07 10:12:04

添付ファイル:
* day1.csv
* day2.csv
* 発表者一覧.csv

上記のプロンプトから返されたファイル一式は以下から構成される。

  • 切り出された字幕データファイル群({動画}_{発表番号}_{発表者名}.srt)
  • 動画切り出し用スクリプト(ffmpeg_commands.bat, ffmpeg_commands.bat)
  • スクリプト生成スクリプト(make_conference_clips.py)

image.png

字幕データはこのままYoutubeなどで使える状態となっているので、手元でそのままYoutubeにアップロードできるようにしておく。

切り出しスクリプトの実行

最後に、字幕切り出し用スクリプトの ffmpeg_commands.sh を手元の環境で実行する。
なお、このスクリプトの内容は https://gist.github.com/masao/23a4b58a8aeca827b2cdaef674ac49db に置いておく。

なお、実行前には動画操作用のコマンド ffmpeg をあらかじめインストールしておく必要がある。
手元のUbuntu環境では以下のコマンドだけでインストールできた。

sudo apt install ffmpeg

切り出しスクリプト実行時には、Youtubeからダウンロードしてきた、元の動画ファイル day1.mp4, day2.mp4 と同じディレクトリに、上記のスクリプト ffmpeg_commands.sh を置いて実行する。

sh ./ffmpeg_commands.sh

なお、上記コマンドの内容は単純に切り出し位置を指定しながら、動画エンコードを行うため、動画実時間の三分の一くらいの時間がかかるので、実行してから少し休憩する。

各発表動画ファイル群は、Day1_LT1.mp4, Day1_Opening_清田陽司.mp4などに切り出された。

Youtube公開

上記の手順で、公開に必要なファイルはそろったので、Youtubeの管理画面から、動画をひとつずつアップロードし、各動画に対応する字幕もタイムコードありとしてアップロードした。

※成果物: https://www.youtube.com/playlist?list=PLB1otnRLhkRA

  1. この記事での手順の方針および実際のスクリプトはChatGPT(GPT-5.6 Sol)を用いて作成し、内容を人手で確認したうえで実行した。 ↩

  2. ChatGPTには、手順の方針から相談し始めて、3ターンほどのやり取りをしたあとに、上記のプロンプトを与えているので、こちらに示したプロンプトだけでないことに注意が必要。。。 ↩

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?