Pythonで動画の音声を変換して入れ替える方法
Pythonを使って動画(MP4)の音声を変更し、元の音声と入れ替える方法を紹介します。
必要なライブラリ
以下のライブラリを使用します。インストールしていない場合は、事前にインストールしてください。
pip install librosa soundfile ffmpeg-python
また、ffmpeg が必要なので、インストールしておきましょう。
FFmpegのインストール方法
- Windows: 公式サイト からダウンロードし、パスを通す。
- Mac: brew install ffmpeg
- Linux (Ubuntu): sudo apt install ffmpeg
Pythonコード(音声の変更と入れ替え)
import librosa
import soundfile as sf
import subprocess
# 1. 動画から音声を抽出(MP4 → WAV)
subprocess.run(["ffmpeg", "-i", "input.mp4", "-q:a", "0", "-map", "a", "audio.wav", "-y"])
# 2. 音声ファイルの読み込み
audio, sr = librosa.load("audio.wav", sr=None)
# 3. ピッチを変更(+5 半音上げる)
audio_shifted = librosa.effects.pitch_shift(audio, sr=sr, n_steps=5)
# 4. 変換後の音声を保存
sf.write("modified_audio.wav", audio_shifted, sr)
# 5. 変換後の音声を動画に再合成(元の音声を削除し、新しい音声を適用)
subprocess.run([
"ffmpeg", "-i", "input.mp4", # 元の動画
"-i", "modified_audio.wav", # 変更後の音声
"-c:v", "copy", # 映像は再エンコードしない
"-c:a", "aac", "-b:a", "192k", # 音声をAAC形式で192kbpsにエンコード
"-map", "0:v:0", "-map", "1:a:0", # 映像ストリームはそのまま、音声は新しいものを使用
"output.mp4", "-y"
])
コードの説明
動画の音声をWAV形式で抽出
- ffmpeg を使用してMP4ファイルから音声だけを取り出し、audio.wav として保存。
音声ファイルをPythonで読み込む
- librosa を使って audio.wav を読み込み。
音声のピッチを変更
- librosa.effects.pitch_shift() を使い、音声のピッチを +5 半音上げる。
変更後の音声を保存
- soundfile ライブラリを使い、modified_audio.wav として保存。
変更後の音声を動画に埋め込む
- ffmpeg を使用して input.mp4 の元の音声を削除し、modified_audio.wav に置き換える。
- -c:v copy を指定することで映像の再エンコードを防ぎ、画質を劣化させずに処理。
- -c:a aac -b:a 192k により、高品質なAAC音声に変換。
まとめ
この方法を使えば、Pythonで動画の音声を自由に変換して入れ替えることができます。librosa の pitch_shift 以外にも、音声の速度を変更したり、エコーを加えたりすることで、さまざまな加工が可能です。
また、ffmpeg を活用することで、Python単体では難しい動画処理をスムーズに行うことができます。映像を保持しながら音声だけを編集する手法は、ナレーションの差し替えや、オーディオエフェクトの適用など、幅広い用途に応用できます。
例えば、以下のようなケースで役立つでしょう。
- 動画編集:ナレーションやBGMの変更
- 音声解析:特定の周波数を強調・除去
- エフェクト適用:ロボット風の声、低音化、高音化 など
この方法を応用すれば、オリジナルの音声加工アプリを作ることも可能です。
スポンサーリンク