ビデオ連結機能を使用すると、複数のビデオを 1 つのビデオに結合し、指定したフォーマットに変換できます。
機能紹介
ビデオマージは、複数のビデオクリップを完全なビデオに結合し、必要なフォーマットに変換する機能です。

シナリオ
映画制作: 映画、テレビシリーズ、短編映画の制作プロセスにおいて、ビデオマージは、編集者がさまざまなショットやシーンを統合して完全な物語構造を構築するのに役立つ中心的なステップの 1 つです。
コンテンツ作成: 短編ビデオのソーシャルメディアプラットフォームでは、コンテンツ作成者はビデオマージ技術を使用して、vlog、チュートリアル、またはテーマ別のビデオを制作し、コンテンツの魅力と可視性を高めることがよくあります。
教育とトレーニング: 教師やトレーナーは、さまざまなビデオクリップをマージして、理論と実践を組み合わせた指導ビデオを作成し、学生の理解と学習を促進できます。
スポーツイベントの再生: スポーツ放送では、ビデオマージ技術を使用してハイライトリールを作成し、視聴者がイベントのエキサイティングな瞬間を振り返るのに役立てます。
使用方法
前提条件
Intelligent Media Management (IMM) サービスが有効化されていること。 詳細については、「プロダクトのアクティブ化」をご参照ください。
IMM プロジェクトがアタッチされていること。 Object Storage Service (OSS) コンソールでプロジェクトをアタッチするには、「ステップ 1: IMM プロジェクトをアタッチする」をご参照ください。 API 操作を呼び出してプロジェクトをアタッチするには、「AttachOSSBucket - OSS バケットをアタッチする」をご参照ください。
ビデオの連結
ビデオの連結は、非同期処理を介して Java、Python、または Go SDK を使用してのみ実行できます。
Java
Java SDK 3.17.4 以降を使用してください。
import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.AsyncProcessObjectRequest;
import com.aliyun.oss.model.AsyncProcessObjectResult;
import com.aliyuncs.exceptions.ClientException;
import java.util.Base64;
public class Demo {
public static void main(String[] args) throws ClientException {
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに置き換えます。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// cn-hangzhou などの一般的な Alibaba Cloud リージョン ID を指定します。
String region = "cn-hangzhou";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// バケット名を指定します。
String bucketName = "examplebucket";
// 連結されたビデオファイルの名前を指定します。
String targetObject = "dest.mp4";
// ソースビデオファイルの名前を指定します。
String sourceVideo = "src.mp4";
// 連結するビデオファイルの名前を指定します。
String video1 = "concat1.mp4";
String video2 = "concat2.mp4";
// OSSClient インスタンスを作成します。
// OSSClient インスタンスが不要になったら、shutdown メソッドを呼び出してリソースを解放します。
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// ビデオファイル名をエンコードします。
String video1Encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(video1.getBytes());
String video2Encoded = Base64.getUrlEncoder().withoutPadding().encodeToString(video2.getBytes());
// ビデオ処理スタイル文字列とビデオ連結パラメーターを構築します。
String style = String.format("video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_%s/sur,o_%s,t_0", video1Encoded, video2Encoded);
// 非同期処理命令を構築します。
String bucketEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(bucketName.getBytes());
String targetEncoded = Base64.getUrlEncoder().withoutPadding().encodeToString(targetObject.getBytes());
String process = String.format("%s|sys/saveas,b_%s,o_%s/notify,topic_QXVkaW9Db252ZXJ0", style, bucketEncoded, targetEncoded);
// AsyncProcessObjectRequest オブジェクトを作成します。
AsyncProcessObjectRequest request = new AsyncProcessObjectRequest(bucketName, sourceVideo, process);
// 非同期処理タスクを実行します。
AsyncProcessObjectResult response = ossClient.asyncProcessObject(request);
System.out.println("EventId: " + response.getEventId());
System.out.println("RequestId: " + response.getRequestId());
System.out.println("TaskId: " + response.getTaskId());
} finally {
// OSSClient をシャットダウンします。
ossClient.shutdown();
}
}
}Python
Python SDK 2.18.4 以降を使用してください。
# -*- coding: utf-8 -*-
import base64
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
def main():
# 環境変数から一時的なアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# エンドポイントを、バケットが配置されているリージョンのエンドポイントに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# cn-hangzhou などの一般的な Alibaba Cloud リージョン ID を指定します。
region = 'cn-hangzhou'
# examplebucket などのバケット名を指定します。
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# 連結されたビデオの名前を指定します。
target_object = 'out.mp4'
# ソースビデオファイルの名前を指定します。
source_video = 'emrfinal.mp4'
# 連結するビデオファイルの名前を指定します。
video1 = 'osshdfs.mp4'
video2 = 'product.mp4'
# ビデオ処理スタイル文字列とビデオ連結パラメーターを構築します。
video1_encoded = base64.urlsafe_b64encode(video1.encode()).decode().rstrip('=')
video2_encoded = base64.urlsafe_b64encode(video2.encode()).decode().rstrip('=')
style = f"video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_{video1_encoded}/sur,o_{video2_encoded},t_0"
# 非同期処理命令を構築します。
bucket_encoded = base64.urlsafe_b64encode('examplebucket'.encode()).decode().rstrip('=')
target_encoded = base64.urlsafe_b64encode(target_object.encode()).decode().rstrip('=')
process = f"{style}|sys/saveas,b_{bucket_encoded},o_{target_encoded}/notify,topic_QXVkaW9Db252ZXJ0"
print(process)
# 非同期処理タスクを実行します。
try:
result = bucket.async_process_object(source_video, process)
print(f"EventId: {result.event_id}")
print(f"RequestId: {result.request_id}")
print(f"TaskId: {result.task_id}")
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
main()
Go
Go SDK 3.0.2 以降を使用してください。
package main
import (
"encoding/base64"
"fmt"
"os"
"strings"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 環境変数から一時的なアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// OSSClient インスタンスを作成します。
// yourEndpoint をバケットのエンドポイントに置き換えます。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 他のリージョンについては、実際のエンドポイントを指定します。
// yourRegion を cn-hangzhou などの一般的な Alibaba Cloud リージョン ID に置き換えます。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("yourRegion"))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// examplebucket などのバケット名を指定します。
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 連結されたビデオファイルの名前を指定します。
targetObject := "dest.mp4"
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// ソースビデオファイルの名前を指定します。
sourcevideo := "src.mp4"
// 連結するビデオファイルの名前を指定します。
video1 := "concat1.mp4"
video2 := "concat2.mp4"
// ビデオ処理スタイル文字列とビデオ連結パラメーターを構築します。
style := fmt.Sprintf("video/concat,ss_0,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_%s/sur,o_%s,t_0", strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video1)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(video2)), "="))
// 非同期処理命令を構築します。
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v/notify,topic_QXVkaW9Db252ZXJ0", style, strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "="))
fmt.Printf("%#v\n", process)
rs, err := bucket.AsyncProcessObject(sourcevideo, process)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
fmt.Printf("EventId:%s\n", rs.EventId)
fmt.Printf("RequestId:%s\n", rs.RequestId)
fmt.Printf("TaskId:%s\n", rs.TaskId)
}非同期処理リクエストは処理結果を返しません。 非同期タスクの結果を取得するには、Simple Message Queue (SMQ) (旧 MNS) を使用します。 詳細については、「メッセージ通知」をご参照ください。
パラメーターの説明
アクション: video/concat
次の表にパラメーターを示します。
連結パラメーター
video/concat 操作は、リクエスト文字列に pre と sur が現れる順序でビデオを連結します。 詳細は次のとおりです。
/pre: 最初に連結するビデオファイル。/sur: 最後に連結するビデオファイル。
パラメーター | タイプ | 必須 | 説明 |
ss | int | いいえ | プレフィックスまたはサフィックスビデオを連結する開始時刻 (ミリ秒)。 有効値:
|
t | int | いいえ | プレフィックスまたはサフィックスビデオを連結する期間 (ミリ秒)。 有効値:
|
o | string | はい | 現在のバケット内の OSS オブジェクト。 オブジェクト名は Base64 URL セーフでエンコードする必要があります。 |
トランスコードパラメーター
パラメーター | タイプ | 必須 | 説明 |
ss | int | いいえ | 連結されるビデオのトランスコード開始時刻 (ミリ秒)。 有効値:
|
t | int | いいえ | 連結されるビデオのトランスコード期間 (ミリ秒)。 有効値:
|
f | string | はい | ビデオコンテナー。 有効値:
|
vn | int | いいえ | ビデオストリームを無効にするかどうかを指定します。 有効値:
|
vcodec | string | はい | ビデオコーデック (エンコード形式)。 有効値:
説明 mxf および flv フォーマットは H.265 をサポートしていません。 |
fps | float | いいえ | ビデオフレームレート。 デフォルトでは、このパラメーターは [align] で指定されたソースビデオのパラメーターと同じです。 有効値は 0 から 240 です。 |
fpsopt | int | いいえ | ビデオフレームレートオプション。 有効値:
説明 このパラメーターは [fps] と一緒に設定する必要があります。 |
pixfmt | string | いいえ | ピクセルサンプリングフォーマット。 デフォルトでは、このパラメーターは [align] で指定されたソースビデオのパラメーターと同じです。 有効値:
|
s | string | いいえ | 解像度。
|
sopt | int | いいえ | 解像度オプション。 有効値:
説明 このパラメーターは [s] と一緒に設定する必要があります。 |
scaletype | string | いいえ | スケーリング方法。 有効値:
|
arotate | int | いいえ | 解像度方向の自動回転。 有効値:
|
g | int | いいえ | Group of Pictures (GOP) サイズ。 デフォルト値は 150 です。 有効値は 1 から 100000 です。 |
vb | int | いいえ | ビデオビットレート (bps)。 有効値は 10000 から 100000000 です。 説明 このパラメーターは [crf] と相互排他です。 これらは異なるビットレート制御アルゴリズムを表します。 どちらも設定されていない場合、ビデオは出力解像度のデフォルトビットレートでエンコードされます。 |
vbopt | int | いいえ | ビデオビットレートオプション。 有効値:
説明 このパラメーターは [vb] と一緒に設定する必要があります。 |
crf | float | いいえ | 固定レート係数。 有効値は 0 から 51 です。 値が大きいほど画質が低くなります。 18 から 38 の値を推奨します。 |
maxrate | int | いいえ | 最大ビットレート (bps)。 デフォルト値は 0 です。 有効値は 10000 から 100000000 です。 説明 このパラメーターは [crf] と一緒に設定する必要があります。 |
bufsize | int | いいえ | バッファーサイズ (ビット)。 デフォルト値は 0 です。 有効値は 10000 から 200000000 です。 説明 このパラメーターは [crf] と一緒に設定する必要があります。 |
an | int | いいえ | オーディオストリームを無効にするかどうかを指定します。 有効値:
|
acodec | string | はい | オーディオコーデック (エンコード形式)。 有効値:
説明 mp4 は pcm をサポートしていません。 mov は flac または opus をサポートしていません。 asf は opus をサポートしていません。 avi は opus をサポートしていません。 mxf は pcm のみをサポートしています。 ts は flac、vorbis、amr、または pcm をサポートしていません。 flv は flac、vorbis、amr、opus、または pcm をサポートしていません。 |
ar | int | いいえ | 音声サンプリングレート。 デフォルトでは、このパラメーターは [align] で指定されたソースビデオのパラメーターと同じです。 有効値:
説明 サポートされているサンプルレートはフォーマットによって異なります。 mp3 は 48 kHz 以下のみをサポートします。 opus は 8 kHz、12 kHz、16 kHz、24 kHz、48 kHz をサポートします。 ac3 は 32 kHz、44.1 kHz、48 kHz をサポートします。 amr は 8 kHz と 16 kHz のみをサポートします。 |
ac | int | いいえ | サウンドチャンネルの数。 デフォルトでは、このパラメーターは [align] で指定されたソースビデオのパラメーターと同じです。 有効値は 1 から 8 です。 説明 サポートされているチャンネル数はフォーマットによって異なります。 mp3 はモノラルとステレオのみをサポートします。 ac3 は最大 6 チャンネル (5.1) をサポートします。 amr はモノラルのみをサポートします。 |
aq | int | いいえ | オーディオ圧縮品質。 有効値は 0 から 100 です。 説明 このパラメーターは [ab] と相互排他です。 どちらも設定されていない場合、オーディオはエンコーダーのデフォルトビットレートでエンコードされます。 |
ab | int | いいえ | オーディオビットレート (bps)。 有効値は 1000 から 10000000 です。 |
abopt | string | いいえ | オーディオビットレートオプション。 有効値:
説明 このパラメーターは [ab] と一緒に設定する必要があります。 |
align | int | いいえ | 連結リスト内のメインビデオファイル (デフォルトのトランスコードパラメーターを提供) の序数。 デフォルト値は 0 で、連結リストの最初のビデオファイルに合わせます。 |
adepth | int | いいえ | オーディオサンプリングのビット深度。 有効値: 16 または 24。 説明 このパラメーターは、acodec が flac に設定されている場合にのみ有効です。 |
メディアシャーディングパラメーター
/segment: シャーディングパラメーター
パラメーター | タイプ | 必須 | 説明 |
f | string | はい | シャーディングフォーマット。 有効値:
|
t | int | はい | シャードの長さ (ミリ秒)。 有効値は 0 から 3600000 です。 |
メディアシャーディングは mp4 および ts コンテナーのみをサポートします。
関連 API 操作
ビデオを MP4 ファイルに連結する
連結情報
ソースビデオ名: pre.mov、example.mkv、sur.mov
連結期間と順序:
ビデオ名
順序
期間
pre.mov
1
ビデオ全体
example.mkv
2
10 秒目から最後まで
sur.mov
3
最初から 10 秒目まで
トランスコード完了通知: MNS メッセージが送信されます。
連結されたビデオ情報
ビデオフォーマット: h264
ビデオフレームレート: 25 fps
ビデオビットレート: 1 Mbps
オーディオフォーマット: aac
オーディオ構成: 48 kHz サンプルレート、デュアルチャンネル
オーディオビットレート: 96 Kbps
ファイルストレージパス
MP4 ファイル: oss://outbucket/outobj.mp4
処理例
// ビデオファイル example.mkv を連結します。
POST /example.mkv?x-oss-async-process HTTP/1.1
Host: video-demo.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS4-HMAC-SHA256 Credential=LTAI********************/20250417/cn-hangzhou/oss/aliyun_v4_request,Signature=a7c3554c729d71929e0b84489addee6b2e8d5cb48595adfc51868c299c0c218e
x-oss-async-process=video/concat,ss_10000,f_mp4,vcodec_h264,fps_25,vb_1000000,acodec_aac,ab_96000,ar_48000,ac_2,align_1/pre,o_cHJlLm1vdgo/sur,o_c3VyMS5hYWMK,t_10000|sys/saveas,b_b3V0YnVja2V0,o_b3V0b2JqLnthdXRvZXh0fQo/notify,topic_QXVkaW9Db252ZXJ0権限
Alibaba Cloud アカウントは、デフォルトですべての権限を持っています。 Resource Access Management (RAM) ユーザーまたは RAM ロールは、デフォルトでは権限がありません。 RAM ポリシーまたはバケットポリシーを使用して、RAM ユーザーまたは RAM ロールに権限を付与する必要があります。
API | アクション | 定義 |
GetObject |
| オブジェクトをダウンロードします。 |
| オブジェクトをダウンロードする際に、versionId を通じてオブジェクトのバージョンを指定する場合、この権限が必要です。 | |
| オブジェクトをダウンロードする際に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、この権限が必要です。 |
API | アクション | 定義 |
HeadObject |
| オブジェクトのメタデータをクエリします。 |
API | アクション | 定義 |
PutObject |
| オブジェクトをアップロードします。 |
| オブジェクトをアップロードする際に、 | |
| オブジェクトをアップロードする際に、オブジェクトのメタデータに | |
|
API | アクション | 定義 |
CreateMediaConvertTask |
| メディアトランスコーディングに IMM を使用する権限。 |
課金
ビデオ連結中、IMM サービスが呼び出されるため、OSS と IMM の両方で課金項目が生成されます。 詳細は次のとおりです。
OSS 側: GetObject 操作を呼び出し、x-oss-async-process パラメーターを追加してビデオを連結する必要があります。 また、HeadObject 操作を呼び出してオブジェクトのメタデータを取得する必要もあります。 連結後、PutObject 操作が呼び出されて、生成されたビデオがバケットにアップロードされます。 次の課金項目が生成されます。 詳細な料金については、「OSS の料金」をご参照ください。
API
課金項目
説明
GetObject
GET リクエスト
成功したリクエストの数に基づいてリクエスト料金が課金されます。
インターネット経由のアウトバウンドトラフィック
oss-cn-hangzhou.aliyuncs.com などのパブリックエンドポイント、または oss-accelerate.aliyuncs.com などのアクセラレーションエンドポイントを使用して GetObject 操作を呼び出す場合、データサイズに基づいてインターネット経由のアウトバウンドトラフィックの料金が課金されます。
IA オブジェクトの取得
IA オブジェクトが取得される場合、取得された IA データのサイズに基づいて IA データ取得料金が課金されます。
リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトの取得
リアルタイムアクセスが有効になっているバケット内のアーカイブオブジェクトを取得する場合、取得されたアーカイブオブジェクトのサイズに基づいてアーカイブデータ取得料金が課金されます。
転送アクセラレーション料金
転送アクセラレーションを有効にし、アクセラレーションエンドポイントを使用してバケットにアクセスする場合、データサイズに基づいて転送アクセラレーション料金が課金されます。
API
課金項目
説明
PutObject
PUT リクエスト
成功したリクエストの数に基づいてリクエスト料金が課金されます。
ストレージ料金
オブジェクトのストレージタイプ、サイズ、およびストレージ期間に基づいてストレージ料金が課金されます。
IMM 側: 次の課金項目が生成されます。 詳細な料金については、「IMM の課金項目」をご参照ください。
API
課金項目
説明
CreateMediaConvertTask
ApsaraVideo Media Processing 料金
ApsaraVideo Media Processing 料金は、連結されたビデオの解像度と実際の時間 (秒) に基づいて計算されます。
注意
ビデオ連結は、非同期処理 (x-oss-async-process メソッドを使用) のみをサポートします。
匿名アクセスは拒否されます。
デフォルトのサンプルレートまたはサウンドチャンネル数でトランスコードする場合、ターゲットビデオコンテナーとの互換性の問題により連結が失敗することがあります。
一度に最大 11 本のビデオを連結できます。