0
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?

動画に合うBGMを毎回探すのが面倒なので、PythonとAIで「勝手に音楽を作る」仕組みを構築した

0
Posted at

4b6951cb-f88a-4289-94ba-d6ebee1a72bc.png

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

というように変換します。

実装のポイントと「壁」

  1. 動画の内容を「音楽プロンプト」に変換する

最初の壁は、

「この動画にはどんな音楽が合うのか?」

ということです。

人間なら、

夜の東京だから、少し落ち着いた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'
}

のようになります。

ここから音楽生成用のプロンプトを作ります。

  1. 音楽生成用プロンプトを自動生成する

次に、動画情報から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
    ↓
音楽プロンプト

という変換ができます。

  1. 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
  1. 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

まで指定すると、動画に合わせた音楽を作りやすくなります。

  1. Before / After

ここが今回の一番大きなポイントです。

Before

従来なら、

動画を完成させる
      ↓
BGMサイトを開く
      ↓
「Cinematic」で検索
      ↓
大量の曲を確認
      ↓
動画に合う曲を探す
      ↓
ライセンスを確認
      ↓
ダウンロード
      ↓
動画編集ソフトに追加

という流れです。

After

今回の方法では、

動画の内容
      ↓
Python
      ↓
AIが音楽条件を分析
      ↓
音楽プロンプト生成
      ↓
Tegmix
      ↓
AI Music
      ↓
動画に追加

となります。

つまり、

「音楽を探す時間」

を、

「音楽を作る時間」

に変えています。

  1. 複数パターンを自動生成する

さらに面白いのが、同じ動画に対して複数の音楽パターンを作る方法です。

例えば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向けコンテンツでは、こうしたパターン比較も面白いと思います。

  1. 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で制作できます。

  1. 音楽から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

という制作パイプラインを作れます。

  1. 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上で実行する形にしています。

  1. 音楽制作を「コード」で管理する

ここまでやってみると、音楽制作もある程度コードで管理できることが分かります。

例えば、

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音楽制作を一つのパイプラインとして考えられるようになります。

0
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
0
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?