制作日記: テキスト起こしの続き/字幕化

昨日、GCPのSpeech APIを使用して、動画の音声をテキストに起こしましたが、csvから字幕用のsrt形式に変換することで動画と一緒に再生することが出来ましたのでメモを残しておきます。

f:id:cignoir:20171202013904p:plain:w300

フォーマット変換

  • 昨日吐き出した変換前 csv ※srtへの変換スクリプトは長いので最後に載せておきます。
00:22:33,00:23:44,Hello
00:24:10,00:24:15,Fuck
  • 変換後 srt
1
00:22:33,000 --> 00:23:44,000
Hello

2
00:24:10,000 --> 00:24:15,000
Fuck

字幕対応のプレイヤーで再生

VLC Media Playerの例

f:id:cignoir:20171202014418p:plain:w300

メニューから変換後のsrtファイルを読み込むだけです。 設定画面から字幕位置やフォントの変更なども出来ます。

f:id:cignoir:20171202014544p:plain:w300

srt変換 rubyスクリプト

require 'csv'

dir_path = 'D:\result\\'

def wrap(s, width = 80)
  s.gsub(/(.{1,#{width}})(\s+|\Z)/, "\\1\n")
end

csv_files = Dir.entries(dir_path).select{ |filename| filename.end_with?('.csv') }
csv_files.each do |file|
  blocks = []

  csv = CSV.read(dir_path + file, headers: false)
  csv.each_with_index do |row, index|
    start_time = row[0]
    end_time = row[1]
    body = row[2].strip

    block = <<"EOS"
#{index + 1}
#{start_time},000 --> #{end_time},000
#{wrap(body, 120)}
EOS
    blocks << block
  end

  srt = blocks.join
  File.binwrite(dir_path + file.split('.').first.gsub('audio_', '') + '.srt', srt)
end

約35時間分の動画の非同期音声認識にかかった料金

f:id:cignoir:20171202024811p:plain:w300

4327円

登録時のおまけのクレジットで余裕で支払うことができます。