すべてのプロダクト
Search
ドキュメントセンター

Drive and Photo Service:メディア トランスコーディング

最終更新日:May 20, 2025

Drive and Photo Service (PDS) は、デフォルトの Web ページでオーディオ ファイルとビデオ ファイルをプレビューできるメディア トランスコーディング機能を提供します。 この機能を使用すると、API 操作を呼び出したり、SDK を使用して指定されたパラメータに基づいてオーディオ ファイルとビデオ ファイルをトランスコードしたり、トランスコードされたファイルのプレビュー URL を取得したりすることもできます。 メディア トランスコーディング機能を使用する前に、まずこの機能を有効にする必要があります。 このトピックでは、メディア トランスコーディング機能とその使用方法について説明します。

手順

メディア トランスコーディング機能を使用するには、次の手順を実行します。

1. メディア トランスコーディング機能を有効にします。

2. オーディオ ファイルまたはビデオ ファイルをアップロードします。

3. メディア トランスコーディングに関する情報を取得します。

機能概要

PDS のメディア トランスコーディング機能は、テンプレートを使用してオーディオ ファイルとビデオ ファイルをトランスコードするドメイン固有の機能です。 ドメイン内の同じメディア ファイルは、テンプレートに基づいて 1 回だけトランスコードされます。 ハッシュ値が同じファイルは、同じメディア ファイルと見なされます。 これにより、プレビュー エクスペリエンスが向上し、コストを削減できます。

さまざまなビジネス シナリオの要件を満たすために、PDS は、オフライン トランスコーディング (offline_video または offline_audio)、ライブ トランスコーディング (live_transcoding)、クイック トランスコーディング (quick_video) などのトランスコーディング タイプをサポートしています。 オフライン トランスコーディングは、オーディオ ファイルとビデオ ファイルのオフライン処理用に設計されており、オーディオ ファイルとビデオ ファイルのさまざまな形式変換をサポートしています。 ライブ トランスコーディングとクイック トランスコーディングは、リアルタイム ビデオ ストリーミング用に設計されており、低レイテンシと高いリアルタイム パフォーマンス要件に対応します。

オフライン トランスコーディングでは、完全なメディア ファイルを別のファイルにトランスコードできます。 このトランスコーディング タイプは、高い互換性を備えており、ほとんどのトランスコーディング パラメータをサポートしています。 ただし、トランスコーディングが完了する前にプレビュー URL を取得することはできません。

ライブ トランスコーディング 2.0 とクイック トランスコーディングは、トランスコーディング タスクを次のサブタスクに分割します。プレイリストを生成するためのサブタスクと、複数のセグメントをトランスコードするためのサブタスクです。 これにより、トランスコーディング結果をすばやくプレビューできます。 ビデオがアップロードされ、トランスコーディング情報が取得されると、プレイリストを生成するためのサブタスクはすぐに完了し、プレビュー URL を取得できます。 プレビュー URL を使用してプレーヤーでビデオを再生する場合、トランスコーディングが完了していれば、再生はすぐに開始できます。 トランスコーディングが完了していない場合は、再生されるセグメントが対応するトランスコーディング サブタスクによってトランスコードされた後に再生が開始されます。これには通常 10 秒もかかりません。 再生中にトランスコードされていないセグメントをシークする場合、セグメントがトランスコードされるまで数秒待つだけで済みます。 クイック トランスコーディングと比較して、早期に開始されたライブ トランスコーディングには、一部のプレーヤーで再生シーク中にバッファリング時間が長くなるという欠点があります。 したがって、現在はクイック トランスコーディングのみがサポートされています。 ライブ トランスコーディングを有効にしているお客様には、ライブ トランスコーディングからクイック トランスコーディングへの移行を支援するシームレスな移行ソリューションが提供されています。 詳細については、「ライブ トランスコーディングからクイック トランスコーディングへの移行」をご参照ください。

次の図は、PDS のメディア トランスコーディング ロジックを示しています。これは、トランスコーディング情報の確認、トランスコーディング テンプレートの選択、トランスコーディング タスクの開始という 3 つの主要な手順で構成されています。

image

トランスコーディング テンプレートを選択するロジックは、メディア タイプによって異なります。 PDS は、ドメインに設定されているすべてのテンプレートを使用してオーディオ ファイルをトランスコードします。 次の表に、オフライン オーディオ トランスコーディングのデフォルト テンプレートを示します。

パラメータ

LQ

HQ

SQ

オーディオ コーデック

MP3

MP3

MP3

音声サンプリングレート (Hz)

44,100

44,100

44,100

オーディオ チャンネル数

2

2

2

オーディオ ビットレート (Kbit/s)

128

320

640

デフォルトでは、PDS は元のビデオの解像度に基づいてビデオ ファイルのトランスコーディング テンプレートを選択します。 解像度が元のビデオの解像度よりも低いすべてのテンプレートと、解像度が元のビデオの解像度以下ではない最初のテンプレートが選択されます。 PDS がビデオ ファイルのトランスコーディング テンプレートを選択する場合、PDS は最初に元のビデオの幅と高さを交換して、ビデオの幅がビデオの高さ以上になるようにします。 交換後、ビデオの幅または高さがテンプレートの幅または高さよりも大きい場合、元のビデオの解像度はテンプレートの解像度よりも大きいと見なされます。 PDS が解像度が元のビデオの解像度以下ではないテンプレートに基づいてビデオをトランスコードする場合、トランスコーディング中に元のビデオの解像度が使用されます。 keep_original_resolution フィールドは、元のビデオの解像度が保持されているかどうかを示すためにプレビュー URL に追加されます。

たとえば、ドメインに設定されているテンプレートの解像度が 720 × 480、1280 × 720、1920 × 1080 で、元のビデオの解像度が 540 × 720 の場合、解像度が 720 × 480 と 1280 × 720 のテンプレートが選択され、トランスコードされたビデオの解像度は 720 × 480 と 720 × 540 になります。 次の表に、3 つのビデオ トランスコーディング タイプすべてのデフォルトのビデオ トランスコーディング テンプレートを示します。

パラメータ

264_480p

264_720p

264_1080p

ビデオ コーデック

H.264

H.264

H.264

ビデオ解像度

720 × 480

1280 × 720

1920 × 1080

ビデオ ビットレート (Kbit/s)

600

1500

3000

ビデオ フレームレート (1 秒あたりのフレーム数)

25

25

25

オーディオ コーデック

AAC

AAC

AAC

音声サンプリングレート (Hz)

44,100

44,100

44,100

オーディオ チャンネル数

2

2

2

オーディオ ビットレート (Kbit/s)

72

128

160

デフォルトのテンプレートとテンプレート選択ポリシーがビジネス要件を満たしていない場合は、お問い合わせいただき、テンプレートとテンプレート選択ポリシーをカスタマイズしてください。(PDS Enterprise Edition では、カスタム テンプレートまたはテンプレート選択ポリシーはサポートされていません。) 次の表に、PDS でサポートされているテンプレート パラメータを示します。

パラメータ

タイプ

必須

説明

TemplateID

string

はい

オーディオまたはビデオ トランスコーディング テンプレートの ID。

Width

int64

はい

出力ビデオの幅。 値は正の偶数である必要があります。 有効値: (0,4096]。

Height

int64

はい

出力ビデオの高さ。 値は正の偶数である必要があります。 有効値: (0,4096]。

警告

このパラメータの値が Width パラメータの値よりも大きい場合、トランスコーディング中にテンプレートは無視されます。

VideoCodec

string

はい

ビデオ エンコード形式。

  • オフライン トランスコーディングまたはライブ トランスコーディングの有効値: copy、h264、h265、vp9。

警告

このパラメータを copy に設定すると、処理されるビデオ ストリームは出力ファイルに直接コピーされます。 この場合、他のビデオ関連のパラメータは無効になります。 ビデオをマージする場合、このパラメータを copy に設定することはできません。 このオプションは、多くの場合、コンテナ形式の変換で使用されます。

  • クイック トランスコーディングの有効値: h264 と h265。

VideoFrameRate

int64

はい

ビデオのフレームレート。

VideoBitrate

int64

はい

ビデオのビットレート。 単位: Kbit/s。

説明

このパラメーターは、VideoCRF パラメーターと競合します。 このパラメーターと VideoCRF パラメーターの両方が空のままになっている場合、デフォルトでは VideoCRF パラメーターの値 23 に基づいてビデオがトランスコードされます。

VideoBFrames

int64

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 連続する B フレームの数。 デフォルト値: 3。

VideoBufferSize

int64

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 動的ビットレートが使用されるときのデコード用バッファのサイズ。 単位: bit/s。

説明

このパラメータは、VideoCRF パラメータと一緒に使用する必要があります。

VideoCRF

float64

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 ビデオの Constant Rate Factor (CRF)。 このパラメータは VideoBitrate パラメータと競合します。 有効値: [0,51]。 値が大きいほど画質が低下します。 このパラメータは 18 ~ 38 の値に設定することをお勧めします。

VideoGOPSize

int64

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 Group of Pictures (GOP) サイズを示します。 デフォルト値: 150。

VideoMaxBitrate

int64

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 動的ビットレートが使用されるときの最大ビットレート。 このパラメータを指定する場合は、VideoBufferSize パラメータが必要です。

説明

このパラメータは、VideoCRF パラメータと一緒に使用する必要があります。

VideoRefs

int64

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 参照フレームの数を示します。 デフォルト値: 2。

VideoResolution

string

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。 出力ビデオの解像度。 形式は WidthxHeight です。 このパラメータと Width パラメータと Height パラメータを同時に指定した場合、このパラメータの値が優先されます。 有効値: (0,4096]。

説明

元のビデオが回転されている場合、回転されたビデオの幅、高さ、長辺、短辺が優先されます。

VideoPreset

string

いいえ

このパラメータは、オフライン トランスコーディングとクイック トランスコーディングに対してのみ有効です。

VideoResolutionFixPolicy

string

いいえ

このパラメータはオフライン トランスコーディングに対してのみ有効です。 出力ビデオの高さまたは幅のみが VideoResolution パラメータで設定されている場合、このパラメータは特定の辺の長さを修正するために使用されるポリシーを指定します。 有効値:

  • align_long_side

  • align_short_side

例:

VideoResolution パラメータが 480x に設定され、VideoResolutionFixPolicy パラメータが align_long_side に設定されています。 入力ビデオの解像度が 960 × 720 の場合、出力ビデオの解像度は 480 × 360 です。 入力ビデオの解像度が 720 × 960 の場合、出力ビデオの解像度は 360 × 480 です。

説明

このパラメータは VideoResolution パラメータと一緒に使用する必要があり、VideoResolution パラメータではビデオの高さまたは幅のみを指定する必要があります (480x など)。

AudioCodec

int64

はい

オーディオ エンコード方式。

  • オフライン トランスコーディングまたはライブ トランスコーディングの有効値: copy、mp3、vorbis、aac、flac、ac3、opus、amr。

  • クイック トランスコーディングの有効値: aac。

説明

このパラメータを copy に設定すると、処理されるオーディオ ストリームは出力ファイルに直接コピーされます。 この場合、他のオーディオ関連のパラメータは無効になります。 オーディオをマージする場合、このパラメータを copy に設定することはできません。 このオプションは、多くの場合、コンテナ形式の変換で使用されます。

AudioBitrate

int64

はい

オーディオ ビットレート。 単位: Kbit/s。 有効値: [1,10000]。

AudioSampleRate

int64

はい

音声サンプリングレート。 単位: Hz。 有効値: 8000、12025、12000、16000、22050、24000、32000、44100、48000、64000、88200、96000。

説明

音声サンプリングレートはファイル形式によって異なります。 MP3 形式は 48,000 Hz 以下をサポートしています。 Opus 形式は 8,000 Hz、12,000 Hz、16,000 Hz、24,000 Hz、48,000 Hz をサポートしています。 AC3 形式は 32,000 Hz、44,100 Hz、48,000 Hz をサポートしています。 AMR 形式は 8,000 Hz と 16,000 Hz のみサポートしています。

AudioChannel

int64

はい

オーディオ チャンネル数。 有効値: [1,8]。

AudioStream

[]int64

いいえ

元のファイルで処理されるオーディオ ストリームのインデックス。 デフォルトでは、最初のオーディオ ストリームが処理されます。 100 より大きい値は、すべてのオーディオ ストリームが処理されることを示します。

  • 例: [0,1] は、インデックスが 0 と 1 のオーディオ ストリームが処理されることを示します。 [1] は、インデックスが 1 のオーディオ ストリームが処理されることを示します。 [101] は、すべてのオーディオ ストリームが処理されることを示します。

説明

指定されたインデックスに対応する既存のオーディオ ストリームのみが処理されます。 インデックスに対応するオーディオ ストリームが存在しない場合、エラーは報告されません。

メディアトランスコード機能を有効にする

デフォルトでは、PDS Enterprise Edition でクイックトランスコードとオフライン トランスコード 機能が有効になっています。

PDS Developer Edition でメディア トランスコード 機能を有効にする場合は、公式 DingTalk グループに参加してご連絡ください。メディア トランスコード 機能の有効化は無料ですが、この機能を使用すると料金が発生します。詳細については、「付加価値機能の課金対象項目」をご参照ください。

ライブ トランスコードからクイック トランスコードへの移行

クイック トランスコードと比較して、早期に開始されたライブ トランスコードは、特定のプレーヤーで再生シーク中のバッファリング時間が長いという欠点があります。この問題に対処するために、ライブ トランスコードからクイック トランスコードへのシームレスな移行ソリューションが提供されています。ライブ トランスコードを有効にしているお客様は、ライブ トランスコードからクイック トランスコードにシームレスに移行できます。この移行により、お客様は既存のコードを再利用して、より高速なトランスコードとよりスムーズな再生を実現できるだけでなく、ライブ トランスコードに基づいて以前にトランスコードされたオーディオ ファイルとビデオ ファイルのほとんどを再利用することもできます。移行前に、次の制限事項に注意してください。

  1. 移行後、LiveTranscoding 課金項目が使用されます。Transcoding-Transcode-xxx などの元の課金項目(Transcoding-Transcode264-HD など)は徐々に減少し、最終的には廃止されます。

  2. 移行後、クライアントまたはプレーヤーが m3u8 プレイリストから TS セグメント ファイルをフェッチする場合、返された再生 URL は Range GET リクエストをサポートしなくなります。

  3. 移行後、返される再生 URL のクエリ値には、エンコードされていない {} 文字が含まれます。URL の例:

http://sample.oss-cn-hangzhou.aliyuncs.com/xxx/media-token-0.ts?x-oss-process=if_status_eq_404{hls/ts,from_dGFyZ2V0L2ZhbmdhbmxhaS92aWRlby8xMDgwcC8xMDgwcDMzLm0zdTg}&x-oss-expires=12345&x-oss-signature-version=OSS2&x-oss-access-key-id=ak&x-oss-signature=sk

iOS プラットフォームの場合、NSURL ライブラリを使用する際に発生する可能性のあるデコード エラーを防ぐために、返された URL をデコードしてからエンコードする必要があります。コードの例:

#import "NSString+URLReEncode.h"

@implementation NSString (URLEncoding)

- (NSString *)urlReEncode {
    NSRange queryStartRange = [self rangeOfString:@"?"]; // クエリ文字列の開始位置を検索
    if (queryStartRange.location == NSNotFound) { // クエリ文字列がない場合
        return self;
    }
    
    NSString *baseURL = [self substringToIndex:queryStartRange.location]; // ベース URL を取得
    NSMutableCharacterSet *allowedCharacterSet = NSCharacterSet.URLQueryAllowedCharacterSet.mutableCopy; // URLクエリで許可される文字セットのコピーを作成
    [allowedCharacterSet removeCharactersInString:@"=&+"]; // 特定の文字を除外

    NSString *query = [self substringFromIndex:queryStartRange.location + 1]; // クエリ文字列を取得
    NSArray *parameters = [query componentsSeparatedByString:@"&"]; // パラメータを分割
    NSMutableArray *encodedParameters = [NSMutableArray arrayWithCapacity:[parameters count]]; // エンコードされたパラメータを格納する配列

    for (NSString *parameter in parameters) { // 各パラメータに対して
        NSArray *keyValue = [parameter componentsSeparatedByString:@"="]; // キーと値を分割
        if ([keyValue count] == 2) { // キーと値のペアが存在する場合
            NSString *key = keyValue[0]; // キーを取得
            NSString *value = [keyValue[1] stringByRemovingPercentEncoding]; // 値をデコード
            NSString *encodedValue = [value stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacterSet]; // 値をエンコード
            [encodedParameters addObject:[NSString stringWithFormat:@"%@=%@", key, encodedValue]]; // エンコードされたキーと値のペアを追加
        } else { // キーと値のペアが存在しない場合
            [encodedParameters addObject:parameter]; // パラメータをそのまま追加
        }
    }
    
    NSString *encodedQuery = [encodedParameters componentsJoinedByString:@"&"]; // エンコードされたパラメータを結合
    return [NSString stringWithFormat:@"%@?%@", baseURL, encodedQuery]; // エンコードされた URL を返す
}

@end

オーディオまたはビデオ ファイルのアップロード

トランスコード用に新しいオーディオまたはビデオ ファイルをアップロードしたり、既存のメディア ファイルをトランスコードしたりできます。 トランスコード結果を取得するために必要な、元のメディア ファイルのドライブ ID とファイル ID を取得する必要があります。

メディア トランスコードに関する情報を取得する

/v2/file/get_video_preview_play_info 操作を呼び出します。トランスコード タイプを、クイック トランスコードなど、ドメインで有効になっているトランスコード機能に設定します。 template_id パラメーターを、使用するテンプレートの ID(例:264_480p)に設定します。この方法で、指定されたテンプレートに基づいてトランスコードされたファイルの再生情報を取得できます。テンプレート ID を指定しない場合は、すべてのトランスコードされたファイルの再生情報が返されます。トランスコードが完了していない場合は、状態コード 202 VideoPreviewWaitAndRetry が返されます。トランスコードが完了すると、プレビュー URL が URL フィールドに返されます。

サンプル リクエスト

{
    "drive_id": "1",
    "file_id": "abcd", // メディア ファイルの ID。
    "category": "quick_video", // トランスコード タイプ。
    "template_id": "264_480p"       // プレビューするファイルのトランスコードに使用するテンプレートの ID。
}

サンプル 応答

  1. リトライ待機中の応答

{
  "Code": "VideoPreviewWaitAndRetry",
  "Message": "メディアはトランスコード中です。しばらく待ってから再試行してください。 xxx"
}
  1. ビデオ トランスコード失敗の応答

    {
      "Code": "NotFound.VideoPreviewInfo",
      "Message": "ErrVideoPreviewLastErrorExist"
    }
  2. オフライン ビデオ トランスコードの応答

{
    "domain_id": "xxxxx",
    "drive_id": "1",
    "file_id": "abcd", // ビデオ ファイルの ID。
    "video_preview_play_info": {
        "category": "offline_video", // トランスコード タイプ。
        // その他のビデオ情報。
        "offline_video_transcoding_list": [
            {
                "template_id": "264_480p", // テンプレート ID。
                "status": "finished" // トランスコード タスクは完了です。
                "url": "https://example.aliyundoc.com/c/d?e=f...", // プレビュー URL。
            }
        ]
    }
}
  1. オフライン オーディオ トランスコードの応答

{
    "domain_id": "xxxxx",
    "drive_id": "1",
    "file_id": "abcd", // オーディオ ファイルの ID。
    "video_preview_play_info": {
        "category": "offline_audio", // トランスコード タイプ。
        // その他のオーディオ情報。
        "offline_audio_list": [
            {
                "template_id": "264_480p", // テンプレート ID。
                "status": "finished" // トランスコード タスクは完了です。
                "url": "https://example.aliyundoc.com/c/d?e=f...", // プレビュー URL。
            }
        ]
    }
}
  1. クイック トランスコードの応答

{
    "domain_id": "xxxxx",
    "drive_id": "1",
    "file_id": "abcd", // ビデオ ファイルの ID。
    "video_preview_play_info": {
        "category": "quick_video", // トランスコード タイプ。
        // その他のビデオ情報。
        "quick_video_list": [
            {
                "template_id": "264_480p", // テンプレート ID。
                "status": "finished" // プレイリストが生成されました。
                "url": "https://example.aliyundoc.com/c/d?e=f...", // プレビュー URL。
            }
        ]
    }
}