CatDJ: 音楽と映像を融合させた、ユニークなDJミックス体験

## はじめに

CatDJは、複数の音楽トラックをDJスタイルでミックスし、その音楽に合わせて指定した動画をループ再生するためのPythonパッケージです。このツールを使用することで、オリジナルのパーティー体験を簡単に作成することができます。音楽と映像を組み合わせて、魅力的でエネルギッシュなパフォーマンスを実現しましょう。

## デモ

<blockquote class="twitter-tweet" data-media-max-width="800"><p lang="ja" dir="ltr">【CatDJ v0.1.2 リリース】<br>こんな感じでpipでインストールすれば簡単に作れまーす！ <a href="https://t.co/1lYmbFXgFP">https://t.co/1lYmbFXgFP</a> <a href="https://t.co/z6Psj4ha2L">pic.twitter.com/z6Psj4ha2L</a></p>&mdash; Maki@Sunwood AI Labs. (@hAru_mAki_ch) <a href="https://twitter.com/hAru_mAki_ch/status/1816432232300732707?ref_src=twsrc%5Etfw">July 25, 2024</a></blockquote> 

## CatDJの仕組み

CatDJは、主に以下の3つのモジュールから構成されています。

### 1. `DJMusicMixer`: 音楽トラックのミックス

- 音楽ファイルが入ったディレクトリを指定します。
- 複数のトラックをランダムな順序でミックスします。
- 各トラックの長さを調整したり、クロスフェードを適用したりすることができます。
- 効果音を適用して、よりダイナミックなミックスを実現します。

### 2. `VideoLoopProcessor`: 動画のループ処理

- 指定された動画ファイルを読み込みます。
- ミックスされた音楽の長さに合わせて、動画をループ再生します。
- 動画の速度をランダムに変更したり、逆再生したりして、視覚的に変化を加えます。

### 3. `CatDJ`: 全体的な処理

- `DJMusicMixer`と`VideoLoopProcessor`を連携させて、音楽と映像を組み合わせます。
- 最終的に、ミックスされた音楽とループ再生された動画を組み合わせた新しい動画ファイルを出力します。

## CatDJのインストールと使い方

### 1. CatDJのインストール

```bash
pip install cat-dj
```

### 入力ファイルの準備

- 音楽トラックを `input_tracks` ディレクトリに配置します。
- ループさせたい動画ファイルを用意します。

### CatDJの実行

```bash
cat-dj --input-dir input_tracks --input-video cat_is_playing_dj3.mp4 --track-duration 25000
```

**オプション**

- `--input-dir`: 音楽ファイルが入っているディレクトリ（必須）
- `--output-dir`: 出力ファイルを保存するディレクトリ（デフォルト: `output`）
- `--input-video`: 入力ビデオファイル（必須）
- `--track-duration`: 各トラックの長さ（ミリ秒）。-1で元の長さを維持（デフォルト: -1）
- `--crossfade-duration`: クロスフェードの長さ（ミリ秒）（デフォルト: 4000）

## CatDJのアーキテクチャ

```mermaid
%%{init:{'theme':'base'}}%%
graph LR
    subgraph CatDJ
        A[CatDJ] --> B{DJMusicMixer}
        A --> C{VideoLoopProcessor}
    end
    B --> D[音楽ファイルのロード]
    B --> E[トラックの長さ調整]
    B --> F[クロスフェード]
    B --> G[エフェクトの適用]
    B --> H[音楽トラックのミックス]
    C --> I[動画ファイルのロード]
    C --> J[動画のループ処理]
    C --> K[動画の速度変更]
    C --> L[動画の逆再生]
    C --> M[動画と音楽の結合]
```

## CatDJの構成要素

### `cat_dj.py`

- CatDJクラスを定義しています。
- `DJMusicMixer`と`VideoLoopProcessor`を呼び出して、音楽と映像を処理します。
- 最終的に、ミックスされた音楽とループ再生された動画を組み合わせた新しい動画ファイルを出力します。

### `cli.py`

- CatDJのCLIインターフェースを定義しています。
- コマンドラインからCatDJを実行するためのオプションを指定します。

### `dj_music_mixer.py`

- `DJMusicMixer`クラスを定義しています。
- 音楽トラックのミックス処理を行います。

### `video_loop_processor.py`

- `VideoLoopProcessor`クラスを定義しています。
- 動画のループ処理を行います。

### `__init__.py`

- CatDJパッケージの初期化ファイルです。
- CatDJのモジュールをインポートします。

## CatDJの開発環境

### Pythonのインストール

- 最新版のPythonを[公式ウェブサイト](https://www.python.org/)からダウンロードしてインストールします。

### 依存関係のインストール

- `pip`を使って、必要なライブラリをインストールします。

```bash
pip install pydub loguru art
```

### CatDJの起動

- CatDJのコードをダウンロードして、以下のコマンドを実行します。

```bash
python cat_dj\cli.py --input-dir input_tracks --input-video cat_is_playing_dj3.mp4 --track-duration 25000
```

## CatDJの使用方法

### 音楽ファイルの準備

- 音楽ファイルは、`input_tracks`ディレクトリに配置してください。
- 音声ファイル形式は、`.mp3`、`.wav`、`.ogg`、`.flac`がサポートされています。

### 動画ファイルの準備

- ループさせたい動画ファイルを準備してください。
- 動画ファイル形式は、`.mp4`、`.avi`、`.mov`などがサポートされています。

### CatDJの実行

- CatDJのCLIインターフェースを使って、以下のコマンドを実行してください。

```bash
cat-dj --input-dir input_tracks --input-video cat_is_playing_dj3.mp4 --track-duration 25000
```

### 出力ファイルの確認

- 出力ファイルは、`output`ディレクトリに保存されます。
- 出力ファイル名は、`mixed_input_tracks.mp3`と`cat_dj_output.mp4`です。

## CatDJの機能

### 音楽トラックのミックス

- 複数の音楽トラックをランダムな順序でミックスします。
- 各トラックの長さを調整したり、クロスフェードを適用したりすることができます。
- 効果音を適用して、よりダイナミックなミックスを実現します。

### 動画のループ処理

- 指定された動画ファイルを、ミックスされた音楽の長さに合わせてループ再生します。
- 動画の速度をランダムに変更したり、逆再生したりして、視覚的に変化を加えます。

### 音楽と映像の組み合わせ

- ミックスされた音楽とループ再生された動画を組み合わせた新しい動画ファイルを出力します。

## CatDJの開発

### 新機能の追加

- 新機能を追加する場合は、`cat_dj.py`、`dj_music_mixer.py`、`video_loop_processor.py`のいずれかのファイルにコードを追加してください。
- 新機能のテストコードを追加して、コードの品質を向上させてください。

### バグの修正

- バグを発見した場合は、バグを修正して、`cat_dj.py`、`dj_music_mixer.py`、`video_loop_processor.py`のいずれかのファイルにコードを修正してください。
- バグを修正した場合は、テストコードを追加して、バグが修正されたことを確認してください。

### コードのレビュー

- コードを変更したら、コードレビューを行い、コードの品質を向上させてください。
- コードレビューは、コードの可読性、保守性、効率性を向上させるのに役立ちます。

## CatDJの貢献

### バグの報告

- バグを発見した場合は、GitHubのリポジトリにIssueを作成して報告してください。

### 新機能のリクエスト

- 新機能のリクエストがある場合は、GitHubのリポジトリにIssueを作成してください。

### プルリクエスト

- コードの修正や新機能の追加を行った場合は、GitHubのリポジトリにPull Requestを送信してください。

## CatDJのライセンス

- CatDJはMITライセンスの下で公開されています。
- 詳細については、[LICENSE](https://github.com/Sunwood-ai-labs/CatDJ/blob/main/LICENSE)を参照してください。

## まとめ

CatDJは、音楽と映像を融合させた、ユニークなDJミックス体験を提供するPythonパッケージです。このツールを使用することで、オリジナルのパーティー体験を簡単に作成することができます。音楽と映像を組み合わせて、魅力的でエネルギッシュなパフォーマンスを実現しましょう。

<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>