環境
- L4 GPU
- ubuntu22.04
準備
実行
pythonでflacに変換
from datasets import load_dataset import os # データセットをロード ds = load_dataset("reazon-research/reazonspeech", "tiny") # 出力ディレクトリを作成 output_dir = "output_flac" os.makedirs(output_dir, exist_ok=True) # データセットの各サンプルを処理 for sample in ds["train"]: # 音声データのローカルパスを取得 audio_path = sample["audio"]["path"] # 出力ファイルのパスを作成 output_path = os.path.join(output_dir, os.path.basename(audio_path)) # 音声データをコピー with open(audio_path, "rb") as src_file, open(output_path, "wb") as dst_file: dst_file.write(src_file.read()) print("変換が完了しました。")
pythonでwavに変換
from datasets import load_dataset import os import librosa import soundfile as sf # データセットをロード ds = load_dataset("reazon-research/reazonspeech", "tiny") # 出力ディレクトリを作成 output_dir = "output_wav" os.makedirs(output_dir, exist_ok=True) # データセットの各サンプルを処理 for sample in ds["train"]: # 音声データのローカルパスを取得 audio_path = sample["audio"]["path"] # 音声データを読み込み audio, sr = librosa.load(audio_path, sr=None) # 出力ファイルのパスを作成 output_path = os.path.join(output_dir, os.path.splitext(os.path.basename(audio_path))[0] + ".wav") # 音声データを保存 sf.write(output_path, audio, sr, subtype='PCM_24') print("変換が完了しました。")
変換したwavファイルの情報を確認
以下で変換したwavファイルをいくつか取得して情報を確認します
import os import soundfile as sf output_dir = "output_wav" # 変換後のwavファイルを3つ選択 wav_files = [file for file in os.listdir(output_dir) if file.endswith(".wav")][:3] for wav_file in wav_files: file_path = os.path.join(output_dir, wav_file) # wavファイルの情報を取得 audio_info = sf.info(file_path) print(f"ファイル名: {wav_file}") print(f"サンプリングレート: {audio_info.samplerate} Hz") print(f"チャンネル数: {audio_info.channels}") print(f"ビット深度: {audio_info.subtype}") print(f"長さ: {audio_info.duration:.2f} 秒") print("------------------------")
以下のように表示されます
ファイル名: 6c52ba0a0ba57.wav サンプリングレート: 16000 Hz チャンネル数: 1 ビット深度: PCM_24 長さ: 5.63 秒 ------------------------ ファイル名: ff76142fa5e77.wav サンプリングレート: 16000 Hz チャンネル数: 1 ビット深度: PCM_24 長さ: 1.62 秒 ------------------------ ファイル名: f879dcb872a87.wav サンプリングレート: 16000 Hz チャンネル数: 1 ビット深度: PCM_24 長さ: 23.92 秒 ------------------------
ffmpegでflacからwavに変換
まずはGPUの並列処理をするために、以下のライブラリを入れます
sudo apt-get install parallel
以下が並列で処理をするためのコードです. -j $(nproc)
にてCPUのシステムコア数の最大値を指定しているため、必要に応じて変更してください
#!/bin/bash # 引数から音声ファイルがあるパスを取得 input_dir="$1" # 変換後のwavファイルを保存するフォルダを作成 mkdir -p convert_wav # 並列処理の関数を定義 convert_file() { file="$1" output_file="convert_wav/$(basename "${file%.flac}.wav")" echo "Converting file: $file" ffmpeg -i "$file" -acodec pcm_s16le -ar 44100 -ac 2 "$output_file" if [ $? -eq 0 ]; then echo "Conversion successful: $output_file" else echo "Conversion failed: $file" fi } # GNU Parallelを使用して並列処理を実行 export -f convert_file find "$input_dir" -maxdepth 1 -name "*.flac" | parallel -j $(nproc) convert_file {} echo "Conversion complete."