マルチチャンネルスピーチtoテキスト

このガイドでは、スピーチtoテキストAPIでマルチチャンネル文字起こしモードを使用する方法を説明します。

ハウツーガイド · スピーチtoテキストの クイックスタートを完了していることを前提としています。

概要

マルチチャンネルのスピーチtoテキスト機能では、各チャンネルに異なる話者が含まれるオーディオファイルを書き起こせます。話者が別々のオーディオチャンネルに分離されている録音に特に便利で、話者ダイアライゼーションなしで、よりクリアな文字起こしを作成できます。

各チャンネルは独立して処理され、チャンネル番号に基づいて自動的に話者IDが割り当てられます(チャンネル0→speaker_0、チャンネル1→speaker_1など)。システムは入力オーディオファイルから個別のチャンネルを抽出し、並列で書き起こします。デフォルトでは、APIはチャンネルごとに1つの文字起こしを返します。代わりにすべてのチャンネルを開始時刻順に並べた1つのリストへ統合し、各単語にchannel_indexを付けた単一の文字起こしを受け取るには、multichannel_output_style=combinedを設定してください。

主なユースケース

  • ステレオインタビュー録音 - 左チャンネルにインタビュアー、右チャンネルにインタビュー対象者
  • マルチトラックのポッドキャスト録音 - 参加者ごとに別トラックへ録音
  • コールセンター録音 - エージェントと顧客を別チャンネルに分離
  • 会議録音 - 各参加者を別チャンネルに分離
  • 法廷手続き - 複数の当事者を異なるチャンネルに録音

要件

  • APIキーを持つElevenLabsアカウント
  • マルチチャンネルオーディオファイル(WAV、MP3、またはその他の対応形式)
  • オーディオファイルあたり最大5チャンネル
  • 各チャンネルには1人の話者のみを含めること

仕組み

1

マルチチャンネルオーディオを準備する

オーディオファイル内で話者が別々のチャンネルに分離されていることを確認してください。マルチチャンネル機能は最大5チャンネルに対応しており、各チャンネルは特定の話者にマッピングされます。

  • チャンネル0→speaker_0
  • チャンネル1→speaker_1
  • チャンネル2→speaker_2
  • チャンネル3→speaker_3
  • チャンネル4→speaker_4
2

APIパラメーターを設定する

スピーチtoテキストリクエストを送信する際は、以下を設定する必要があります。

  • use_multi_channel: true
  • diarize: false(マルチチャンネルモードでは、チャンネルを介して話者を分離します)

必要に応じて、次の設定でレスポンス形式を制御できます。

  • multichannel_output_style: separate(デフォルト)は、チャンネルごとに1つの文字起こしを返します。combinedはすべてのチャンネルを、開始時刻順に並べた単一の文字起こしへ統合します。各単語にはchannel_indexが付与され、標準のシングルチャンネルレスポンス形式と一致します。combinedにはタイムスタンプが必要です(timestamps_granularityをnone以外にする必要があります)。Webhook配信、エンティティ検出、または編集との併用はサポートされていません。

話者数はチャンネル数によって自動的に決定されるため、マルチチャンネルモードではnum_speakersパラメーターを使用できません。マルチチャンネルモードでは、各チャンネルに話者が1人だけいることを前提としています。複数の話者がいる場合、そのチャンネル内のすべての話者に同じ話者IDが割り当てられます。

3

レスポンスを処理する

デフォルト(multichannel_output_style=separate)では、マルチチャンネルオーディオはシングルチャンネルとは異なるレスポンス形式を返します。

use_multi_channel: trueを設定していても、シングルチャンネル(モノラル)のオーディオファイルを指定した場合は、 マルチチャンネル形式ではなく、標準のシングルチャンネルレスポンスを受け取ります。マルチチャンネルレスポンス 形式が返されるのは、オーディオファイルに実際に複数のチャンネルが含まれている場合のみです。

{
"language_code": "en",
"language_probability": 0.98,
"text": "Hello world",
"words": [...]
}

multichannel_output_style=combinedでは、レスポンスはシングルチャンネルの文字起こしと同じフラットな形式(トップレベルのtextとwords、transcripts配列なし)になり、すべてのチャンネルが開始時刻順に並べられた1つのリストへ統合されます。すべての単語には、チャンネルを識別するchannel_index(およびspeaker_id)が含まれます。

実装

基本的なマルチチャンネル文字起こし

2人の話者がいるステレオオーディオファイルを書き起こす完全な例を示します。

from elevenlabs import ElevenLabs
elevenlabs = ElevenLabs(api_key="YOUR_API_KEY")
def transcribe_multichannel(audio_file_path):
with open(audio_file_path, 'rb') as audio_file:
result = elevenlabs.speech_to_text.convert(
file=audio_file,
model_id='scribe_v2',
use_multi_channel=True,
diarize=False,
timestamps_granularity='word'
)
return result
# Process the response
result = transcribe_multichannel('stereo_interview.wav')
if hasattr(result, 'transcripts'): # Multichannel response
for transcript in result.transcripts:
channel = transcript.channel_index
text = transcript.text
print(f"Channel {channel} (speaker_{channel}): {text}")
else: # Single channel response (fallback)
print(f"Text: {result.text}")

会話形式の文字起こしを作成する

時系列順の会話形式の文字起こしを取得する最も簡単な方法は、multichannel_output_style=combinedをリクエストすることです。APIは開始時刻順にすでに並べられた単一のwordsリストを返し、各単語にはchannel_indexとspeaker_idが含まれます。

Combined output (recommended)
with open("stereo_interview.wav", "rb") as audio_file:
result = elevenlabs.speech_to_text.convert(
file=audio_file,
model_id="scribe_v2",
use_multi_channel=True,
multichannel_output_style="combined",
diarize=False,
timestamps_granularity="word",
)
for word in result.words:
if word.type == "word":
print(f"speaker_{word.channel_index}: {word.text}")

デフォルトのseparate出力を使用している場合は、代わりにクライアント側でチャンネルごとの文字起こしを統合できます。

def create_conversation_transcript(multichannel_result):
"""Create a conversation-style transcript with speaker labels"""
all_words = []
if hasattr(multichannel_result, 'transcripts'):
# Collect all words from all channels
for transcript in multichannel_result.transcripts:
for word in transcript.words or []:
if word.type == 'word':
all_words.append({
'text': word.text,
'start': word.start,
'speaker_id': word.speaker_id,
'channel': transcript.channel_index
})
# Sort by timestamp
all_words.sort(key=lambda w: w['start'])
# Group consecutive words by speaker
conversation = []
current_speaker = None
current_text = []
for word in all_words:
if word['speaker_id'] != current_speaker:
if current_text:
conversation.append({
'speaker': current_speaker,
'text': ' '.join(current_text)
})
current_speaker = word['speaker_id']
current_text = [word['text']]
else:
current_text.append(word['text'])
# Add the last segment
if current_text:
conversation.append({
'speaker': current_speaker,
'text': ' '.join(current_text)
})
return conversation
# Format the output
conversation = create_conversation_transcript(result)
for turn in conversation:
print(f"{turn['speaker']}: {turn['text']}")

マルチチャンネルでWebhookを使用する

マルチチャンネル文字起こしは、非同期処理のためのWebhook配信に対応しています。

Webhookはseparate(チャンネルごと)の形式を返します。multichannel_output_style=combinedは 現在Webhook配信ではサポートされていません。同期リクエストを使用するか、チャンネルごとの Webhookペイロードをクライアント側で統合してください。

from elevenlabs import ElevenLabs
elevenlabs = ElevenLabs(api_key="YOUR_API_KEY")
async def transcribe_multichannel_with_webhook(audio_file_path):
with open(audio_file_path, 'rb') as audio_file:
result = await elevenlabs.speech_to_text.convert_async(
file=audio_file,
model_id='scribe_v2',
use_multi_channel=True,
diarize=False,
webhook=True # Enable webhook delivery
)
print(f"Transcription started with task ID: {result.task_id}")
return result.task_id

エラー処理

よくある検証エラー

エラー:マルチチャンネルモードはダイアライゼーションをサポートしておらず、話者が発話する チャンネルに基づいて話者を割り当てます。

解決方法:マルチチャンネルモードを使用する場合は、常にdiarize=falseを設定してください。

エラー:use_multi_channelが有効な場合はnum_speakersを指定できません。話者数はチャンネル数によって 自動的に決定されます。解決方法:リクエストからnum_speakers パラメーターを削除してください。

エラー:マルチチャンネルモードは最大5チャンネルに対応していますが、オーディオファイルにはXチャンネルが含まれています。

解決方法:最初の5チャンネルのみを処理するか、事前にオーディオを処理してチャンネル数を 減らしてください。

エラー:multichannel_output_style=‘combined’にはタイムスタンプが必要です。timestamps_granularityを ‘word’または’character’に設定してください。

解決方法:統合出力では単語を時刻順に並べるため、timestamps_granularityをword (デフォルト)またはcharacterに設定してください。

エラー:multichannel_output_style=‘combined’は、Webhook配信ではまだサポートされていません。

解決方法:combinedを使用する同期リクエストを送信するか、Webhook使用時はデフォルトのseparate出力を 維持し、クライアント側で統合してください。

ベストプラクティス

オーディオの準備

最適な結果を得るには:- パフォーマンス向上のため16kHzのサンプルレートを使用する - 処理前に無音または未使用の チャンネルを削除する - 各チャンネルに話者が1人だけ含まれるようにする - 可能な場合は最高品質のためにロスレス形式 (WAV)を使用する

パフォーマンスの最適化

同時実行コストはチャンネル数に比例して増加します。60秒・3チャンネルのファイルの同時実行コストは、シングルチャンネルファイルの3倍です。

次の式を使用して、マルチチャンネルオーディオの処理時間を見積もることができます。

Processing Time=(D⋅0.3)+2+(N⋅0.5)Processing\ Time = (D \cdot 0.3) + 2 + (N \cdot 0.5)

各項目:

  • DD = ファイルの長さ(秒)
  • NN = チャンネル数
  • 0.30.3 = 処理速度係数(リアルタイムの約30%)
  • 22 = 固定オーバーヘッド(秒)
  • 0.50.5 = チャンネルあたりのオーバーヘッド(秒)

例:60秒のステレオファイル(2チャンネル)の場合:

Processing Time=(60⋅0.3)+2+(2⋅0.5)=18+2+1=21 secondsProcessing\ Time = (60 \cdot 0.3) + 2 + (2 \cdot 0.5) = 18 + 2 + 1 = 21\ seconds

メモリに関する考慮事項

大きなマルチチャンネルファイルでは、ストリーミングまたはチャンク分割を検討してください。

def process_large_multichannel_file(file_path, chunk_duration=300):
"""Process large files in chunks (5-minute segments)"""
from pydub import AudioSegment
from elevenlabs import ElevenLabs
import os
elevenlabs = ElevenLabs(api_key="YOUR_API_KEY")
audio = AudioSegment.from_file(file_path)
duration_ms = len(audio)
chunk_size_ms = chunk_duration * 1000
all_transcripts = []
for start_ms in range(0, duration_ms, chunk_size_ms):
end_ms = min(start_ms + chunk_size_ms, duration_ms)
# Extract chunk
chunk = audio[start_ms:end_ms]
chunk_file = f"temp_chunk_{start_ms}.wav"
chunk.export(chunk_file, format="wav")
# Transcribe chunk using SDK
with open(chunk_file, 'rb') as audio_file:
result = elevenlabs.speech_to_text.convert(
file=audio_file,
model_id='scribe_v2',
use_multi_channel=True,
diarize=False,
timestamps_granularity='word'
)
# Adjust timestamps
if hasattr(result, 'transcripts'):
for transcript in result.transcripts:
for word in transcript.words or []:
word.start += start_ms / 1000
word.end += start_ms / 1000
all_transcripts.extend(result.transcripts)
# Clean up
os.remove(chunk_file)
return all_transcripts

FAQ

APIはエラーを返します。APIに送信する5つのチャンネルを選択するか、APIへ送信する前に一部のチャンネルを ミックスダウンする必要があります。

はい、できますが不要です。use_multi_channel=trueを指定してモノラルオーディオを送信すると、 マルチチャンネル形式ではなく標準のシングルチャンネルレスポンスを受け取ります。

はい。multichannel_output_style=combinedを設定すると、すべてのチャンネルを統合し、開始時刻順に並べた 単一の文字起こしを受け取れます。各単語にはchannel_indexが付加されます。これは標準の シングルチャンネルレスポンス形式と一致します。タイムスタンプが必要で、Webhook 配信では使用できません。

話者IDはチャンネル番号に基づいて決定されます。チャンネル0はspeaker_0、チャンネル1は speaker_1というように割り当てられます。

はい。各チャンネルは独立して処理されるため、異なる言語を検出できます。言語検出はチャンネルごとに 行われます。multichannel_output_style=combinedでは、トップレベルの language_codeは最も確信度の高いチャンネルを反映しますが、各単語には引き続き channel_indexが含まれます。

次のステップ