動画編集やポッドキャスティングに携わる中で、動画から音声を抽出して、長い動画の場合に音声を特定の長さで分割したいと考えることがよくあります。この記事では、この作業を自動化するためのPythonツールを紹介します。
必要なライブラリ
- moviepy: 動画ファイルの読み込みと音声の抽出を行うためのライブラリ。
- pydub: 音声ファイルの分割や操作を行うためのライブラリ。
これらのライブラリは、以下のコマンドで簡単にインストールできます:
pip install moviepy pydub
関数の実装
以下の関数は、動画から音声を抽出し、動画の長さが15分以上の場合は5分ごとに音声を分割する機能を持っています。
from moviepy.editor import *
from pydub import AudioSegment
from typing import List
def extract_and_split_audio_from_video(video_path: str, output_audio_path: str, output_folder: str) -> List[str]:
"""
動画から音声を抽出し、指定した条件に従って音声を分割する関数
Parameters:
- video_path: 入力動画ファイルのパス
- output_audio_path: 変換した音声ファイルの保存先パス
- output_folder: 分割された音声ファイルの保存先フォルダ
Returns:
- audio_files: 生成された分割された音声ファイルのパスのリスト
"""
video = VideoFileClip(video_path)
video_duration = video.duration
audio = video.audio
audio.write_audiofile(output_audio_path)
audio_files = []
if video_duration >= 900: # 900秒 = 15分
audio_segment = AudioSegment.from_wav(output_audio_path)
n_chunks = int(video_duration // 300) # 5分 = 300秒
for i in range(n_chunks):
start_time = i * 300 * 1000 # pydubはミリ秒を使用するため、1000をかける
end_time = (i+1) * 300 * 1000
chunk = audio_segment[start_time:end_time]
chunk_path = f"{output_folder}/audio_chunk_{i+1}.wav"
chunk.export(chunk_path, format="wav")
audio_files.append(chunk_path)
return audio_files
# 使用例:
# video_path = 'path_to_your_video_file.mp4'
# output_audio_path = 'path_for_extracted_audio.wav'
# output_folder = 'path_for_audio_chunks'
# generated_files = extract_and_split_audio_from_video(video_path, output_audio_path, output_folder)
# print(generated_files)
使い方
上記の関数を使用するには、以下のように動画のパス、出力する音声のパス、分割された音声を保存するフォルダのパスを指定します。
video_path = 'path_to_your_video_file.mp4'
output_audio_path = 'path_for_extracted_audio.wav'
output_folder = 'path_for_audio_chunks'
generated_files = extract_and_split_audio_from_video(video_path, output_audio_path, output_folder)
print(generated_files)
まとめ
動画から音声を抽出し、必要に応じて分割するためのシンプルなPythonツールを紹介しました。このツールは、動画編集やポッドキャスティングのプロジェクトで非常に役立つことでしょう。Happy coding!