このブログでは、「天体写真」をテーマに生成AIさんに絵を描かせたり、文章を書かせたりして、どこまで実用になるかを試してきた。今回は、Googleさんが提供するNotebookLMの音声概要が日本語に対応したというので、ポッドキャスト版の天体写真入門ガイドを作ってもらうことにした。
まずは、GeminiのDeep Researchを使って「天体写真を始めるための基礎的な知識や機材について教えてください」と調査を依頼する。そうすると50サイトぐらいを自動的に検索してレポーティングをしてくれる。作成されたレポートをPDFに出力すると全19ページ。文字数は2万2746文字(引用参考文献含む)だった。ほとんど論文とか新書の1章なみなんだが、これにかかる時間は数分程度。お茶でも飲んでいるうちに完成してくれる。
それが次のリンクにあるPDF。自由にダウンロードしてもらっていい。ただ、どこまで実用になるかの実験なので、校正とかしてない。ざっと読んだ感じだと、私のブログよりはるかにいいと思う。出典の注があるから、几帳面な人は確かめてちょうだい。そういうわけなので、共有はせずにご自分で使うにとどめておくのが吉だ。
天体写真入門ガイド_- 天体写真への招待:星空を捉えるための基礎知識と機材
次。2万字のレポートを読むのは、非常に疲れるので、ポイントだけでもかいつまんで教えてほしい。それでもテキストで読むのは疲れるので、音声にしてくれると良い。さらにポッドキャスト的にパーソナリティの掛け合いでダイジェストしてくれればなおよい。ということで、このPDFをNotebookLMに食わせる。そして音声概要をクリックする。以上なのだ。
ただ、音声ファイルだけだとYouTubeにアップするのが憚れたので、せめて音声波形の動きを動画化することにした。そんな高度なことは私にできないので、これも生成AIに作らせる。コーディングの知識や技術は確実に衰えているが、できることの幅は飛躍的に広がっている。それでいいのか。ついでに、サムネはGPT4oとCanvaを使った。もはや何もしていないに等しい…。
ポッドキャストを聞く前に、PDFを手元にダウンロードしておいてほしい(そういう展開なので)。実際に聞いてもらうと、「星景写真(せいけいしゃしん)」「星野写真(せいやしゃしん)」「星雲」を「ほしけいしゃしん」「ほしのしゃしん」「ほしうん」と読んでいたりするけど、改善は時間の問題。なんなら人間のパーソナリティでも、同じ間違いはすると思う。星雲の誤読はさすがにないか。
ついでなので、音声ファイル(mp3)に音声波形をつけてmp4で出力するスクリプトを載せておく。書き出しにかかる時間は、読み込みファイルの長さと同じくらいだと思う(計測してない)。AIに頼りすぎて、もう一体何をやってるか、さっぱりわからん。
あらかじめインストールするライブラリは次のとおり。
pip install numpy
pip install matplotlib
pip install scipy
pip install moviepy
Python 3.12ではmoviepy.editorがインストールできなかったので、下記で回避。
pip uninstall moviepy
pip install moviepy==2.0.0.dev2
スクリプト本体は、こちら。
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from moviepy.editor import VideoClip, AudioFileClip
# 音声ファイルを読み込む
sample_rate, data = wavfile.read("sample.wav")
# モノラル化(ステレオなら左チャンネルのみ)
if data.ndim > 1:
data = data[:, 0]
duration = len(data) / sample_rate # 秒数
time_array = np.linspace(0, duration, num=len(data))
# 動画サイズ(秒あたりフレーム数)
fps = 30
# フレームを描く関数(MoviePy用)
def make_frame(t):
idx = int(t * sample_rate)
win = sample_rate // 2 # 短い区間だけ表示(0.5秒)
start = max(0, idx - win)
end = min(len(data), idx + win)
fig, ax = plt.subplots(figsize=(10, 4))
ax.plot(time_array[start:end], data[start:end])
ax.set_xlim(time_array[start], time_array[end - 1])
ax.set_ylim(-np.max(np.abs(data)), np.max(np.abs(data)))
ax.set_title(f"Time: {t:.2f} s")
ax.set_xlabel("Time [s]")
ax.set_ylabel("Amplitude")
ax.grid()
# 描画結果を画像に変換
fig.canvas.draw()
# RGBAのデータをバッファから取得
buf = fig.canvas.buffer_rgba()
image = np.frombuffer(buf, dtype=np.uint8)
# (高さ, 幅, 4) の形に変形
image = image.reshape(fig.canvas.get_width_height()[::-1] + (4,))
# RGBの3チャンネルだけ取り出す (アルファチャンネルを除去)
image = image[:, :, :3]
plt.close(fig)
return image
# VideoClipを作成
video = VideoClip(make_frame, duration=duration)
video = video.set_fps(fps)
# 音声を読み込み
audio = AudioFileClip("sample.wav")
video = video.set_audio(audio)
# 動画ファイルとして保存
video.write_videofile("waveform_video.mp4", codec="libx264", audio_codec="aac")
この記事へのコメント
いやあ、これは、凄すぎですわ。
聞いていて、めっちゃおもろい!
UTOさん、気に入っていただけましたか。ありがとうございます!耳にやさしいですしね。
スゴイですね!
たった一言の問いかけを起点にここまでのものができるなんて。
レポートPDFの内容もチャンとしてるし。
ポッドキャスト風(?)の会話内容も全く違和感ない。
むしろ「ほしうん」がおチャメな位に感じた。ココ、ツッコミドコロ…みたいな。
レポートは私の知らないことがたくさん書かれていて勉強になりました。ポッドキャストは、なんかメカメカしいので、フレンドリーに作り込まないとですね。
いやー、これはすごいですね。なんかすごく普通な会話で、お昼休みに聞き入ってしまいました。特に間違ったことも言っていないし、何も知らずに聞いたら、AIが作ったなんて思わないですね。こんなのが作れちゃうんだ・・・
感情の起伏みたいなもの表現されていますし、技術の進歩って恐ろしいですよね。しかも、ボタン一発という…おもちゃにこと欠きません。