mcpField
F
fun-asr

fun-asr

github.com/wmy2981クリエイティブ・メディア164 回インストール5 週間前に更新
リポジトリ

fun-asr について

Fun-ASRは、Alibaba Cloud DashScopeの非同期Fun-ASRサービスで音声を文字起こしするコマンドラインスキルです。話者識別、言語ヒント、テキスト・JSON・SRT形式の出力に対応します。

主な機能

  1. 01Fun-ASRによる音声文字起こし
  2. 02話者識別に対応
  3. 03言語ヒントを指定可能
  4. 04テキスト、JSON、SRTで出力
  5. 05S3互換ストレージ経由で音声をアップロード

活用シーン

  1. 01会議録音をテキスト化
  2. 02話者ラベル付きのインタビュー記録を作成
  3. 03講義音声からSRT字幕を生成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/wmy2981/skills --skill fun-asr

インストール後、Claude Code で/fun-asrを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.claude-plugin/
plugin.json
references/
api_doc.md
guide.md
scripts/
.env.example
fun_asr_cli.py
requirements.txt

詳細

Fun-ASR:音声の文字起こし

Alibaba Cloud DashScope の Fun-ASR 非リアルタイム音声認識モデルを使用して、音声ファイルを文字起こしします。話者ダイアライゼーション、多言語認識、複数の出力形式(プレーンテキスト、JSON、SRT 字幕)に対応しています。

ワークフロー

Audio → S3 → Fun-ASR async → Poll → Save file → Agent reads

要件

環境変数

これらの変数は、~/.wmyskills/.env(スキル間で共有)または scripts/.env(こちらが優先)に設定してください。テンプレートとして scripts/.env.example を使用してください。変数を ~/.wmyskills/.env に追加するときは、既存のファイルを上書きしないでください。

変数必須説明
DASHSCOPE_API_KEYはいAlibaba Cloud DashScope API キー(または BAILIAN_APIKEY を使用)
BAILIAN_APIKEYはい*DASHSCOPE_API_KEY の代替(Bailian/DashScope)
S3_ENDPOINTはいS3 互換ストレージのエンドポイント URL
S3_BUCKETはい音声アップロード用の S3 バケット名
S3_REGIONいいえS3 リージョン(デフォルト:us-east-1)
S3_PREFIXいいえアップロード用のキー接頭辞(デフォルト:asr-uploads)
AWS_ACCESS_KEY_IDいいえ*AWS アクセスキー(IAM/デフォルトの認証情報チェーンを使用しない場合に必要)
AWS_SECRET_ACCESS_KEYいいえ*AWS シークレットキー(IAM/デフォルトの認証情報チェーンを使用しない場合に必要)

スクリプトは ~/.wmyskills/.env と scripts/.env から .env を自動的に読み込みます(スクリプトのディレクトリが優先されます)。

Python の依存関係
pip install boto3 requests python-dotenv
オプション:ffmpeg

以下の処理には ffmpeg/ffprobe が必要です。

  • 音声チャンネル数の検出
  • マルチチャンネル音声のモノラルへの変換(話者ダイアライゼーションに必要)

ffmpeg がない場合、スクリプトはモノラルへの変換をスキップし、元のファイルを使用します。

使用方法

python fun_asr_cli.py <audio-file> [options]

script/ ディレクトリから実行するか、fun_asr_cli.py のフルパスを指定してください。

位置引数
引数説明
file音声ファイルのパス(aac、wav、mp3、m4a、flac、ogg など)
オプション
オプションデフォルト説明
--modelfun-asrASR モデル:fun-asr、paraformer-v2、paraformer-v1、fun-asr-mtl、paraformer-mtl-v1
--no-diarization(有効)話者ダイアライゼーションを無効にします
--languagezh言語ヒント:zh、en、ja、ko、yue など
--channel-id0文字起こしする音声チャンネル(0 = 最初のチャンネル/モノラル)
--output自動生成出力ファイルのパスを指定します(デフォルト:~/.wmyskills/fun-asr/outputs/)
--formattext出力形式:text、json、srt
--keep-s3(オフ)文字起こし後もアップロードしたファイルを S3 に保持します
--version—スクリプトのバージョンを表示して終了します
例
# Basic transcription (text format, Chinese)
python fun_asr_cli.py meeting.mp3

# JSON output with full metadata (timestamps, speaker IDs, confidence)
python fun_asr_cli.py interview.wav --format json

# SRT subtitle output
python fun_asr_cli.py lecture.mp3 --format srt

# Disable speaker diarization
python fun_asr_cli.py meeting.mp3 --no-diarization

# Specify language and model
python fun_asr_cli.py japanese_audio.mp3 --language ja --model paraformer-v2

# Custom output path
python fun_asr_cli.py audio.wav --output ~/Desktop/transcript.txt

出力形式

text(デフォルト)

話者ラベルとタイムスタンプを含むプレーンテキストです。形式は [Speaker N] HH:MM:SS - HH:MM:SS に続けてテキストが表示されます。

json

タイムスタンプ、話者 ID、信頼度スコア、API の生のレスポンスなど、すべてのメタデータを含む JSON です。

srt

標準の SRT 字幕形式です:NN \n HH:MM:SS,mmm --> HH:MM:SS,mmm \n [SN] text。

実行ルール

ユーザーが要求したコマンドを、依存関係、環境変数、設定を事前に確認せず、そのまま実行してください。問題がある場合は、スクリプトが明確なエラーを出して失敗します。その場合に限り、確認して修正してください。

エージェントへの指示

文字起こしの完了後

文字起こしの出力はファイルに保存されます。テキストの内容は標準出力には表示されません。標準出力に表示されるのは、結果ファイルの保存先を示す Output file: <path> の1行だけです。デフォルトの出力ディレクトリは ~/.wmyskills/fun-asr/outputs/ です。

文字起こしが成功すると、標準出力には Output file: <path> のみが出力されます。情報ログとエラーログは標準エラー出力に送られます。

成功した場合は、必ず結果をユーザーに提示してください。

  1. 標準出力から Output file: のパスを解析します
  2. ファイルの内容を読み取り、ユーザーに提示します
  3. 音声の長さ、検出された話者数(ダイアライゼーションが有効な場合)、内容の簡潔な概要を含む短い要約を提示します
エラーのシナリオ

スクリプトは、プログラムで処理するための特定の終了コードを返します。

  • コード 2 — 設定エラー:環境変数が不足しています。無効な引数(不明なフラグ、無効なモデル名など)に対して argparse が使用するコードでもあります。
  • コード 3 — ファイルエラー:ファイルが見つからない、大きすぎる、または制限を超えています。
  • コード 4 — API/ネットワークエラー:送信またはポーリングに失敗しました。
  • コード 6 — タスク失敗:ASR API がエラーを返しました。エラーメッセージを確認してください。
  • コード 7 — タイムアウト:文字起こしに 30 分以上かかりました。
重要なルール
  • 有効な音声が検出されない場合:API が ASR_RESPONSE_HAVE_NO_WORDS または SUCCESS_WITH_NO_VALID_FRAGMENT を返した場合、音声には検出可能な人間の発話が含まれていません(無音、小さすぎる音量、または純粋なノイズ)。**直ちに停止し、その旨をユーザーに報告してください。自動的に再試行したり、モデルを切り替えたり、音声パラメーターを変更したりしないでください。**再試行するのは、ユーザーから明示的に依頼された場合のみです。
  • 話者ダイアライゼーションには、2 時間以下のモノラル音声が必要です。スクリプトは ffmpeg を使ってマルチチャンネル音声を自動変換します。ファイルが 2 時間を超える場合、ダイアライゼーションは自動的に無効になります。
  • ダイアライゼーションの料金:スクリプトはダイアライゼーションの有無にかかわらず、音声の秒数に応じて課金します。有効にしても追加料金はかかりません。
  • S3 のクリーンアップ:一時ファイルは、--keep-s3 を指定しない限り、文字起こしの完了後に S3 から自動的に削除されます。
  • 料金:Fun-ASR の料金は、音声 1 秒あたり CNY 0.00022 です。スクリプトは開始前に料金を見積もり、完了時に実際の料金を報告します。

コメント