非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

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の変更
  • 音声解析:特定の周波数を強調・除去
  • エフェクト適用:ロボット風の声、低音化、高音化 など

この方法を応用すれば、オリジナルの音声加工アプリを作ることも可能です。

スポンサーリンク

 - Python