AIで動画を作っていると、意外と面倒なのがBGMです。
最近では、
- AIで画像を生成する
- AIで動画を生成する
- AIでナレーションを作る
- AIで字幕を作る
といった作業まで、かなり自動化できるようになりました。
ところが、最後にBGMを入れようとすると、
動画を作る
↓
BGMを探す
↓
利用条件を確認する
↓
動画に合うか確認する
↓
ダウンロードする
↓
動画に入れる
という作業が残ります。
しかも動画を何本も作る場合、となります。
動画1 → BGMを探す
動画2 → またBGMを探す
動画3 → またBGMを探す
動画4 → またBGMを探す
正直、ここもAIにやってもらいたくなりました。
そこで今回は、
「動画に合うBGMを探す」
のではなく、
「動画の内容から、AIにBGMを作らせる」
というワークフローを考えてみました。
今回利用するのは、AI音楽生成サービスの Tegmix です。
Tegmixでは、AI Music Generatorを使ってテキストからオリジナル音楽を生成できます。
さらに、
AI Lyrics Generator
Song Cover
AI Extend Song
Vocal Remover
Replace Section
AI Music Video
など、音楽制作に関する機能も用意されています。
今回は、
動画の内容
↓
Pythonで音楽プロンプトを作る
↓
Tegmix
↓
AI Music
↓
動画に利用
という流れを作ってみます。
全体アーキテクチャ
今回やりたいことはシンプルです。
Input: 動画の内容を入力
Analyze: AIに動画の雰囲気を分析させる
Generate Prompt: 音楽生成用のプロンプトを作る
Create: Tegmixで音楽を生成
Use: 生成した音楽を動画に利用
全体のイメージはこんな感じです。
┌────────────────────┐
│ Video Idea │
│ 動画の内容 │
└──────────┬─────────┘
↓
┌────────────────────┐
│ Python / AI │
│ 音楽プロンプト生成 │
└──────────┬─────────┘
↓
┌────────────────────┐
│ Tegmix │
│ AI Music Generator│
└──────────┬─────────┘
↓
┌────────────────────┐
│ Generated Song │
│ AI Music │
└──────────┬─────────┘
↓
┌────────────────────┐
│ Video Editor │
│ 動画制作 │
└────────────────────┘
例えば、
動画:
夜の東京を歩くAIキャラクター
↓
ジャンル:
Lo-fi / Cinematic
↓
雰囲気:
Calm / Mysterious / Emotional
↓
テンポ:
Slow
↓
楽器:
Electric Piano / Soft Drums / Bass
というように変換します。
実装のポイントと「壁」
- 動画の内容を「音楽プロンプト」に変換する
最初の壁は、
「この動画にはどんな音楽が合うのか?」
ということです。
人間なら、
夜の東京だから、少し落ち着いたLo-fiがいいかな。
と考えられます。
しかしAIに音楽を作らせる場合、もう少し具体的にしたほうが扱いやすくなります。
そこで、まずPythonで動画情報を構造化します。
# music_prompt.py
video_info = {
"title": "未来の東京を歩くAIキャラクター",
"scene": "東京の夜の街を歩く",
"mood": [
"futuristic",
"mysterious",
"cinematic"
],
"duration": 30,
"platform": "YouTube Shorts"
}
print(video_info)
実行すると、
{
'title': '未来の東京を歩くAIキャラクター',
'scene': '東京の夜の街を歩く',
'mood': ['futuristic', 'mysterious', 'cinematic'],
'duration': 30,
'platform': 'YouTube Shorts'
}
のようになります。
ここから音楽生成用のプロンプトを作ります。
- 音楽生成用プロンプトを自動生成する
次に、動画情報からAI Music用のプロンプトを作ります。
例えば、
# prompt_generator.py
def generate_music_prompt(video):
mood = ", ".join(video["mood"])
prompt = f"""
Create an original music track for the following video.
Video:
{video["title"]}
Scene:
{video["scene"]}
Mood:
{mood}
Duration:
{video["duration"]} seconds
Platform:
{video["platform"]}
Music requirements:
- cinematic atmosphere
- suitable for short-form video
- memorable melody
- clear rhythm
- avoid overly aggressive sound
- build gradually
"""
return prompt.strip()
music_prompt = generate_music_prompt(video_info)
print(music_prompt)
生成されるプロンプトは、
Create an original music track for the following video.
Video:
未来の東京を歩くAIキャラクター
Scene:
東京の夜の街を歩く
Mood:
futuristic, mysterious, cinematic
Duration:
30 seconds
Platform:
YouTube Shorts
Music requirements:
- cinematic atmosphere
- suitable for short-form video
- memorable melody
- clear rhythm
- avoid overly aggressive sound
- build gradually
-
となります。
このようにすると、
動画の説明
↓
Python
↓
音楽プロンプト
という変換ができます。
- AIに音楽生成の「条件」を考えさせる
さらにAIを使えば、ジャンルや楽器なども自動で考えさせることができます。
例えばOpenAI APIなどのLLMを利用する場合、
# analyze_video.py
from openai import OpenAI
client = OpenAI()
video_description = """
A young AI character is walking through
a futuristic Tokyo street at night.
Neon lights are reflected on the wet road.
The camera slowly follows the character.
The video is 30 seconds long.
"""
prompt = f"""
Analyze this video description and recommend
the most suitable music style.
Return:
Genre:
Mood:
Tempo:
Instruments:
Energy:
Music Description:
Video:
{video_description}
"""
response = client.responses.create(
model="gpt-5",
input=prompt
)
print(response.output_text)
例えばAIから、
Genre:
Lo-fi Cinematic
Mood:
Mysterious, Calm, Emotional
Tempo:
Slow / Medium
Instruments:
Electric Piano, Soft Drums, Synth Bass
Energy:
Low → Medium
Music Description:
A cinematic lo-fi track that starts quietly
and gradually becomes more atmospheric.
のような結果が返ってくるイメージです。
これを次のステップに渡します。
Video
↓
LLM
↓
Music Specification
↓
Music Prompt
- Tegmixで音楽を生成する
ここでTegmixを使います。
Music Prompt
↓
Tegmix
↓
AI Music Generator
↓
Generated Song
例えば先ほど作ったプロンプトをTegmixに入力します。
Create an original cinematic lo-fi track
for a futuristic Tokyo night scene.
Mood:
mysterious, calm, emotional
Tempo:
slow to medium
Instruments:
warm electric piano,
soft electronic drums,
deep synth bass,
subtle atmospheric pads
The track should start quietly
and gradually build energy.
The music should feel futuristic,
cinematic and suitable for a
30-second YouTube Short.
ここで重要なのは、
「音楽を作ってください」だけで終わらせないこと
です。
Genre
Mood
Tempo
Instruments
Energy
Scene
Duration
まで指定すると、動画に合わせた音楽を作りやすくなります。
- Before / After
ここが今回の一番大きなポイントです。
Before
従来なら、
動画を完成させる
↓
BGMサイトを開く
↓
「Cinematic」で検索
↓
大量の曲を確認
↓
動画に合う曲を探す
↓
ライセンスを確認
↓
ダウンロード
↓
動画編集ソフトに追加
という流れです。
After
今回の方法では、
動画の内容
↓
Python
↓
AIが音楽条件を分析
↓
音楽プロンプト生成
↓
Tegmix
↓
AI Music
↓
動画に追加
となります。
つまり、
「音楽を探す時間」
を、
「音楽を作る時間」
に変えています。
- 複数パターンを自動生成する
さらに面白いのが、同じ動画に対して複数の音楽パターンを作る方法です。
例えばPythonで、
styles = [
{
"genre": "Lo-fi",
"mood": "Calm"
},
{
"genre": "Cinematic",
"mood": "Emotional"
},
{
"genre": "Electronic",
"mood": "Energetic"
},
{
"genre": "Jazz",
"mood": "Smooth"
}
]
for style in styles:
print(
f"Genre: {style['genre']}\n"
f"Mood: {style['mood']}\n"
)
とすると、
Genre: Lo-fi
Mood: Calm
Genre: Cinematic
Mood: Emotional
Genre: Electronic
Mood: Energetic
Genre: Jazz
Mood: Smooth
という複数の候補を作れます。
それぞれをTegmixで生成すれば、
Video
├── Lo-fi Version
├── Cinematic Version
├── Electronic Version
└── Jazz Version
というように、同じ映像から複数の音楽パターンを作れます。
SNS向けコンテンツでは、こうしたパターン比較も面白いと思います。
- AI Lyrics Generatorも組み合わせる
音楽だけではなく、歌詞もAIで作ることができます。
例えば、
song_theme = {
"topic": "AI and the future",
"language": "Japanese",
"mood": "hopeful",
"style": "electronic pop"
}
lyrics_prompt = f"""
Write original song lyrics.
Topic:
{song_theme["topic"]}
Language:
{song_theme["language"]}
Mood:
{song_theme["mood"]}
Style:
{song_theme["style"]}
Structure:
Verse 1
Pre-Chorus
Chorus
Verse 2
Chorus
Bridge
Final Chorus
"""
print(lyrics_prompt)
このプロンプトを使って歌詞を生成し、
Lyrics
↓
AI Music
↓
Song
という流れにできます。
つまり、
アイデア
↓
歌詞
↓
メロディ
↓
ボーカル
↓
楽曲
というところまでAIで制作できます。
- 音楽からMusic Videoまでつなげる
さらに音楽が完成したら、Music Videoも作れます。
全体の流れは、
Idea
↓
Lyrics
↓
AI Music
↓
AI Visual
↓
Music Video
です。
例えば、
project = {
"title": "Neon Future",
"genre": "Electronic",
"mood": "Futuristic",
"visual_style": "Cyberpunk Tokyo",
"duration": 120
}
print(project)
というように、音楽プロジェクト全体をJSONとして管理することもできます。
{
"title": "Neon Future",
"genre": "Electronic",
"mood": "Futuristic",
"visual_style": "Cyberpunk Tokyo",
"duration": 120
}
この情報を、
AI Music
+
AI Image
+
AI Video
にそれぞれ渡せば、
Music
+
Visual
↓
Music Video
という制作パイプラインを作れます。
- GitHub Actionsで自動化する
さらに、定期的にAI音楽を作りたい場合はGitHub Actionsなどと組み合わせることもできます。
例えば、毎週月曜日に新しい音楽プロジェクト用のプロンプトを生成するだけなら、
name: Generate Music Prompt
on:
schedule:
- cron: "0 0 * * 1"
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Generate Music Prompt
run: python scripts/generate_music_prompt.py
という構成にできます。
例えば、
Monday
↓
GitHub Actions
↓
Python
↓
Music Prompt
↓
Tegmix
↓
New Song
という流れです。
現時点ではTegmixの公開APIを前提にしていないため、最後の音楽生成部分はTegmix上で実行する形にしています。
- 音楽制作を「コード」で管理する
ここまでやってみると、音楽制作もある程度コードで管理できることが分かります。
例えば、
music_project = {
"title": "Tokyo After Midnight",
"genre": "Lo-fi",
"mood": [
"calm",
"mysterious",
"emotional"
],
"tempo": "slow",
"instruments": [
"electric piano",
"soft drums",
"synth bass"
],
"duration": 120
}
print(music_project)
こうしておけば、
project.json
↓
Python
↓
Prompt
↓
Tegmix
↓
Music
という形で、制作条件を再利用できます。
例えば別の曲を作る場合、
music_project["genre"] = "Cinematic"
music_project["mood"] = [
"dramatic",
"emotional"
]
のように変更するだけです。
実際の効果
今回のワークフローを使うことで、BGM制作の考え方が変わります。
BGMを探す時間を減らせる
Before
動画
↓
BGMサイト
↓
検索
↓
比較
↓
ライセンス確認
↓
ダウンロード
から、
After
動画
↓
AI
↓
音楽プロンプト
↓
Tegmix
↓
オリジナル音楽
に変えられます。
動画ごとに音楽を変えられる
例えば、
Video A
→ Lo-fi
Video B
→ Cinematic
Video C
→ Electronic
Video D
→ Jazz
というように、動画のテーマに合わせて音楽を作れます。
音楽制作のハードルが下がる
以前は、
作曲
↓
編曲
↓
演奏
↓
録音
↓
ミックス
という専門的な工程が必要でした。
AIを使えば、
Idea
↓
Prompt
↓
AI
↓
Music
というところから始められます。
まとめ
今回やってみたかったのは、
「BGMを探す作業をなくせないか?」
という単純な問題でした。
そこで、
動画
↓
Python
↓
AIによる音楽分析
↓
Music Prompt
↓
Tegmix
↓
AI Music
というワークフローを考えてみました。
TegmixではAI Music Generatorだけではなく、
AI Music
AI Lyrics Generator
Song Cover
AI Extend Song
Vocal Remover
Replace Section
AI Music Video
など、音楽制作に関するさまざまな機能を利用できます。
そのため、
Idea
↓
Lyrics
↓
Music
↓
Edit
↓
Music Video
という一連の制作フローをAIで組み立てることができます。
個人的に面白いと思ったのは、
「音楽を探す」
から、
「自分のコンテンツに合わせて音楽を作る」
へ発想を変えられることです。
特にAI動画を大量に作る場合、
AI Image
↓
AI Video
↓
AI Music
↓
Final Content
というように、映像と音楽の両方をAIで生成することで、コンテンツ制作全体をかなり自動化できます。
Tegmixはこちらです。
[Appendix]
今回作った基本的なPython構成は以下です。
project/
│
├── scripts/
│ ├── analyze_video.py
│ ├── prompt_generator.py
│ └── generate_music_prompt.py
│
├── data/
│ └── project.json
│
└── .github/
└── workflows/
└── music.yml
基本的な処理は、
project.json
↓
analyze_video.py
↓
prompt_generator.py
↓
music_prompt.txt
↓
Tegmix
↓
AI Music
です。
例えば project.json は、
{
"title": "Tokyo After Midnight",
"scene": "A futuristic Tokyo street at night",
"genre": "Lo-fi",
"mood": [
"calm",
"mysterious",
"cinematic"
],
"tempo": "slow",
"duration": 120
}
としておきます。
そしてPythonで、
import json
with open("data/project.json", "r", encoding="utf-8") as f:
project = json.load(f)
prompt = f"""
Create an original {project["genre"]} track.
Scene:
{project["scene"]}
Mood:
{", ".join(project["mood"])}
Tempo:
{project["tempo"]}
Duration:
{project["duration"]} seconds.
The music should be suitable for
a cinematic short-form video.
"""
with open(
"music_prompt.txt",
"w",
encoding="utf-8"
) as f:
f.write(prompt)
print("Music prompt generated.")
とすれば、
project.json
↓
Python
↓
music_prompt.txt
まで自動化できます。
あとは生成されたプロンプトをTegmixに入力して、
AI Prompt
↓
Tegmix
↓
Generated Music
という流れで音楽を作れます。
「動画を作るためにBGMを探す」のではなく、
「動画の内容を解析して、その動画のための音楽を作る」
という発想にすると、AI動画制作とAI音楽制作を一つのパイプラインとして考えられるようになります。
