GitHub Copilot ChatGPT Claude Codex CLI Cursor opencode Skill Text

azure-ai-transcription-py

Azure AI Transcription SDK for Python. Use for real-time and batch speech-to-text transcription with timestamps and diarization. Triggers: "transcription", "speech to text", "Azure AI Transcription", "TranscriptionClient".

Ciza · 0 points · 22 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download microsoft-skills-.github_plugins_azure-sdk-python_skills_azure-ai-transcription-py-e58528d.zip · 3 KB
Part of microsoft/skills — 195 skills

Install

skills CLI npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-python/skills/azure-ai-transcription-py
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install microsoft-skills@llmmart
Git git clone https://github.com/microsoft/skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole microsoft/skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Azure AI Transcription SDK for Python

Client library for Azure AI Transcription (speech-to-text) with real-time and batch transcription.

Installation

pip install azure-ai-transcription

Environment Variables

TRANSCRIPTION_ENDPOINT=https://<resource>.cognitiveservices.azure.com
TRANSCRIPTION_KEY=<your-key>  # For key auth; not needed when using DefaultAzureCredential/TokenCredential

Authentication & Lifecycle

🔑 Two rules apply to every code sample below:

  1. Two auth modes are supported: AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]) for key-based auth, or DefaultAzureCredential() / any TokenCredential for Entra ID. Prefer DefaultAzureCredential in production; never hardcode credentials in code.
  2. Wrap every client in a context manager so HTTP transports and sockets are released deterministically:
    • Sync: with <Client>(...) as client:
    • Async: async with <Client>(...) as client:

Snippets may abbreviate this setup, but production code should always follow both rules.

Use subscription key authentication:

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient

with TranscriptionClient(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
) as client:
    transcriptions = list(client.list_transcriptions())

Transcription (Batch)

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient

with TranscriptionClient(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
) as client:
    job = client.begin_transcription(
        name="meeting-transcription",
        locale="en-US",
        content_urls=["https://<storage>/audio.wav"],
        diarization_enabled=True,
    )
    result = job.result()
    print(result.status)

Transcription (Real-time)

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.transcription import TranscriptionClient

with TranscriptionClient(
    endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
    credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
) as client:
    stream = client.begin_stream_transcription(locale="en-US")
    stream.send_audio_file("audio.wav")
    for event in stream:
        print(event.text)

Best Practices

  1. Pick sync OR async and stay consistent. Do not mix azure.xxx sync clients with azure.xxx.aio async clients in the same call path. Choose one mode per module.
  2. Always use context managers for clients and async credentials. Wrap every client in with Client(...) as client: (sync) or async with Client(...) as client: (async). For async DefaultAzureCredential from azure.identity.aio, also use async with credential: so tokens and transports are cleaned up.
  3. Enable diarization when multiple speakers are present
  4. Use batch transcription for long files stored in blob storage
  5. Capture timestamps for subtitle generation
  6. Specify language to improve recognition accuracy
  7. Handle streaming backpressure for real-time transcription
  8. Close transcription sessions when complete

Reference Files

File Contents
references/capabilities.md Additional non-hero capabilities, operation-group coverage, and production checklists.
references/non-hero-scenarios.md Dedicated non-hero examples for secondary/advanced scenarios.
Files (skills)
  • references
    • capabilities.md 1.1 KB
      # azure-ai-transcription-py capability coverage
      
      **SDK/package**: `azure-ai-transcription`
      
      This index maps hero scenarios in `SKILL.md` and links non-hero scenarios documented in dedicated reference files.
      
      ## Hero scenarios covered in SKILL.md
      
      - `Transcription (Batch)`
      - `Transcription (Real-time)`
      
      ## Non-hero scenarios
      
      - `Operational hardening`: Use this section for retries, timeouts, pagination, and cleanup patterns specific to this SDK.  
        See: [`non-hero-scenarios.md#operational-hardening`](non-hero-scenarios.md#operational-hardening)
      
      ## Related deep-dive references
      
      - [`non-hero-scenarios.md`](non-hero-scenarios.md): Dedicated non-hero examples and implementation notes.
      
      ## API breadth checklist
      
      - Verify client/auth mode for the environment before coding.
      - Confirm operation-group/method names against current Microsoft Learn API reference.
      - For Python SDKs with both sync and async clients, document both forms without a blanket preference.
      - Include cleanup/delete paths for created resources in examples.
      - Prefer idempotent create/update operations where available.
      - Validate paging/LRO/error-handling patterns for production paths.
      
    • non-hero-scenarios.md 3.6 KB
      # azure-ai-transcription-py non-hero scenarios
      
      These scenarios are intentionally separate from hero flows in `SKILL.md`.
      They cover secondary/advanced patterns typically used after the primary end-to-end path is working.
      
      ## Operational hardening
      
      ### Retry Policy
      
      Configure retries for transient failures via `azure-core` retry policy:
      
      ```python
      import os
      from azure.core.credentials import AzureKeyCredential
      from azure.ai.transcription import TranscriptionClient
      from azure.core.pipeline.policies import RetryPolicy
      
      retry_policy = RetryPolicy(retry_total=3, retry_backoff_factor=2)
      
      with TranscriptionClient(
          endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
          credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
          retry_policy=retry_policy,
      ) as client:
          job = client.begin_transcription(
              name="meeting-transcription",
              locale="en-US",
              content_urls=["https://<storage>/audio.wav"],
          )
          result = job.result()
      ```
      
      ### LRO Poll with Timeout
      
      Avoid blocking indefinitely on long-running batch jobs:
      
      ```python
      import os
      import time
      from azure.core.credentials import AzureKeyCredential
      from azure.ai.transcription import TranscriptionClient
      
      with TranscriptionClient(
          endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
          credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
      ) as client:
          job = client.begin_transcription(
              name="long-audio",
              locale="en-US",
              content_urls=["https://<storage>/long-audio.wav"],
          )
          # Poll with an explicit deadline; job.result() does not raise on timeout
          deadline = time.monotonic() + 300
          while not job.done():
              if time.monotonic() > deadline:
                  raise TimeoutError("Transcription did not complete within 300 s")
              time.sleep(5)
          result = job.result()
          print(result.status)
      ```
      
      ### List and Paginate Transcriptions
      
      `list_transcriptions()` returns a lazy iterator; paginate explicitly to avoid loading everything at once:
      
      ```python
      import os
      from azure.core.credentials import AzureKeyCredential
      from azure.ai.transcription import TranscriptionClient
      
      with TranscriptionClient(
          endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
          credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
      ) as client:
          for index, transcription in enumerate(client.list_transcriptions()):
              print(f"[{index}] {transcription.name}: {transcription.status}")
      ```
      
      ### Delete Completed Transcriptions
      
      Remove completed jobs to keep the account tidy:
      
      ```python
      import os
      from azure.core.credentials import AzureKeyCredential
      from azure.ai.transcription import TranscriptionClient
      
      with TranscriptionClient(
          endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
          credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
      ) as client:
          for transcription in client.list_transcriptions():
              if transcription.status == "Succeeded":
                  client.delete_transcription(transcription.transcription_id)
      ```
      
      ### Async Batch Transcription
      
      Use the async client for non-blocking workflows:
      
      ```python
      import os
      from azure.core.credentials import AzureKeyCredential
      from azure.ai.transcription.aio import TranscriptionClient
      
      async def run_async_transcription():
          async with TranscriptionClient(
              endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
              credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
          ) as client:
              job = await client.begin_transcription(
                  name="async-meeting",
                  locale="en-US",
                  content_urls=["https://<storage>/audio.wav"],
                  diarization_enabled=True,
              )
              result = await job.result()
              print(result.status)
      ```
      
  • SKILL.md 4 KB
    ---
    name: azure-ai-transcription-py
    description: |
      Azure AI Transcription SDK for Python. Use for real-time and batch speech-to-text transcription with timestamps and diarization.
      Triggers: "transcription", "speech to text", "Azure AI Transcription", "TranscriptionClient".
    license: MIT
    metadata:
      author: Microsoft
      version: "1.0.0"
      package: azure-ai-transcription
    ---
    
    # Azure AI Transcription SDK for Python
    
    Client library for Azure AI Transcription (speech-to-text) with real-time and batch transcription.
    
    ## Installation
    
    ```bash
    pip install azure-ai-transcription
    ```
    
    ## Environment Variables
    
    ```bash
    TRANSCRIPTION_ENDPOINT=https://<resource>.cognitiveservices.azure.com
    TRANSCRIPTION_KEY=<your-key>  # For key auth; not needed when using DefaultAzureCredential/TokenCredential
    ```
    
    ## Authentication & Lifecycle
    
    > **🔑 Two rules apply to every code sample below:**
    >
    > 1. **Two auth modes are supported:** `AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"])` for key-based auth, or `DefaultAzureCredential()` / any `TokenCredential` for Entra ID. Prefer `DefaultAzureCredential` in production; never hardcode credentials in code.
    > 2. **Wrap every client in a context manager** so HTTP transports and sockets are released deterministically:
    >    - Sync: `with <Client>(...) as client:`
    >    - Async: `async with <Client>(...) as client:`
    >
    > Snippets may abbreviate this setup, but production code should always follow both rules.
    
    Use subscription key authentication:
    
    ```python
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.transcription import TranscriptionClient
    
    with TranscriptionClient(
        endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
        credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
    ) as client:
        transcriptions = list(client.list_transcriptions())
    ```
    
    ## Transcription (Batch)
    
    ```python
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.transcription import TranscriptionClient
    
    with TranscriptionClient(
        endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
        credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
    ) as client:
        job = client.begin_transcription(
            name="meeting-transcription",
            locale="en-US",
            content_urls=["https://<storage>/audio.wav"],
            diarization_enabled=True,
        )
        result = job.result()
        print(result.status)
    ```
    
    ## Transcription (Real-time)
    
    ```python
    import os
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.transcription import TranscriptionClient
    
    with TranscriptionClient(
        endpoint=os.environ["TRANSCRIPTION_ENDPOINT"],
        credential=AzureKeyCredential(os.environ["TRANSCRIPTION_KEY"]),
    ) as client:
        stream = client.begin_stream_transcription(locale="en-US")
        stream.send_audio_file("audio.wav")
        for event in stream:
            print(event.text)
    ```
    
    ## Best Practices
    
    1. **Pick sync OR async and stay consistent.** Do not mix `azure.xxx` sync clients with `azure.xxx.aio` async clients in the same call path. Choose one mode per module.
    2. **Always use context managers for clients and async credentials.** Wrap every client in `with Client(...) as client:` (sync) or `async with Client(...) as client:` (async). For async `DefaultAzureCredential` from `azure.identity.aio`, also use `async with credential:` so tokens and transports are cleaned up.
    3. **Enable diarization** when multiple speakers are present
    4. **Use batch transcription** for long files stored in blob storage
    5. **Capture timestamps** for subtitle generation
    6. **Specify language** to improve recognition accuracy
    7. **Handle streaming backpressure** for real-time transcription
    8. **Close transcription sessions** when complete
    
    ## Reference Files
    
    | File | Contents |
    |------|----------|
    | [references/capabilities.md](references/capabilities.md) | Additional non-hero capabilities, operation-group coverage, and production checklists. |
    | [references/non-hero-scenarios.md](references/non-hero-scenarios.md) | Dedicated non-hero examples for secondary/advanced scenarios. |
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related