pythonを使って動画の文字起こしをしてみよう
これまではSNSなどの自動化についてnoteにまとめてきましたが、今回はpythonを使って動画の文字起こしをしてみよう、という内容です。
基本的にコピペでできるはずですが、環境などによってはエラーになるかもしれないので、その場合にはtwitterのDMから連絡をもらえるとアドバイスできます🙌
ちなみに僕は文字起こしを使って収益5桁に突破しました
ブログで解説しているので、noteでは詳細に解説はしません
ご興味ある方はブログの方もご覧ください
早速コードの紹介
import os
import glob
import shutil
import subprocess
import speech_recognition as sr
# 音声ファイルの分割
import wave
import math
import struct
from scipy import fromstring, int16
from wordcloud import WordCloud
# mp4から音声ファイルへの変換
def mp4_to_wav(mp4f):
wavf = mp4f.replace('.mp4', '.wav')
subprocess.run(['ffmpeg', '-i', mp4f, wavf],
encoding='utf-8', stdout=subprocess.PIPE)
return wavf
# 音声ファイルの分割(デフォルト30秒)
def cut_wav(wavf,time=30):
# timeの単位は[sec]
# ファイルを読み出し
wr = wave.open(wavf, 'r')
# waveファイルが持つ性質を取得
ch = wr.getnchannels()
width = wr.getsampwidth()
fr = wr.getframerate()
fn = wr.getnframes()
total_time = 1.0 * fn / fr
integer = math.floor(total_time) # 小数点以下切り捨て
t = int(time) # 秒数[sec]
frames = int(ch * fr * t)
num_cut = int(integer//t)
# waveの実データを取得し、数値化
data = wr.readframes(wr.getnframes())
wr.close()
X = fromstring(data, dtype=int16)
# wavファイルを削除
#os.remove(wavf)
outf_list = []
for i in range(num_cut):
# 出力データを生成
output_dir = 'output/cut_wav/'
os.makedirs(output_dir,exist_ok=True)
outf = output_dir + str(i).zfill(3) + '.wav'
start_cut = i*frames
end_cut = i*frames + frames
Y = X[start_cut:end_cut]
outd = struct.pack("h" * len(Y), *Y)
# 書き出し
ww = wave.open(outf, 'w')
ww.setnchannels(ch)
ww.setsampwidth(width)
ww.setframerate(fr)
ww.writeframes(outd)
ww.close()
# リストに追加
outf_list.append(outf)
return outf_list
# 複数ファイルの音声のテキスト変換
def cut_wavs_str(outf_list):
output_text = ''
# 複数処理
print('音声のテキスト変換')
for fwav in outf_list:
print(fwav)
r = sr.Recognizer()
# 音声->テキスト
with sr.AudioFile(fwav) as source:
audio = r.record(source)
try:
text = r.recognize_google(audio, language='ja-JP')
print(text)
except sr.RequestError:
text = "error wav No." + str(fwav) + "API unavailable"
print(text)
except sr.UnknownValueError:
text = "error wav No." + str(fwav) + "Unable to recognize speech"
# 各ファイルの出力結果の結合
output_text = output_text + text + '\n'
# wavファイルを削除
#os.remove(fwav)
return output_text
# mp4からwavへの変換から音声のテキスト変換まで
def mp4_to_text(mp4f):
# 出力ディレクトリ
# *****には出力先のディレクトリパスをコピペ
shutil.rmtree('*****')
os.makedirs('*****', exist_ok=True)
# 音声ファイルへの変換
wav_file = mp4_to_wav(mp4f)
# 音声ファイルの分割(デフォルト30秒)
cut_wavs = cut_wav(wav_file)
# 複数ファイルの音声のテキスト変換
out_text = cut_wavs_str(cut_wavs)
# テキストファイルへの入力
mp4f_name = os.path.basename(mp4f)
txt_file = 'output/' + mp4f_name.replace('.mp4', '.txt')
print('テキスト出力')
print(txt_file)
f = open(txt_file, 'w')
f.write(out_text)
f.close()
text_file=open(txt_file )
bindata=text_file.read()
txt=bindata
wordcloud = WordCloud(background_color="white",
font_path='/System/Library/Fonts/ヒラギノ明朝 ProN.ttc',
width=800,height=600).generate(txt)
# 形態素解析も同時に実行し,画像を保存
wordcloud.to_file("./wordcloud_sample.png")
# 変換の実行
# 文字起こしを行う動画ファイル名
mp4_to_text('test.mp4')
文字起こしや形態素解析などをうまく組み合わせれば、収益化を図ることも可能です🙆♂️
長い動画を一定の時間で区切って文字起こしをしているため、一部抜けが出てきてしまいますが、そこはマニュアルで対応します
色々チャレンジしてみてください🙌
その他の人気note
上のnoteではtwitterの懸賞に自動で応募できるようにプログラムを書いています🙋♂️
実際に当選した方もいますので、ぜひチャレンジしてみてください🙆♂️
こちらのnoteではtwitterを使って楽天アフィリエイトを自動化しています
こちらも購入したから、収益化できたと報告があったので、実践する価値ありです🙆♂️
この記事が気に入ったらサポートをしてみませんか?