이 페이지에서는 여러 입력 동영상을 단일 출력 동영상으로 결합하는 방법을 설명합니다. 입력 동영상의 타임라인을 자를 수도 있습니다.
입력 동영상마다 Input
객체를 inputs
배열에 추가합니다.
각 Input
객체는 연결된 입력 동영상의 키와 URI를 정의합니다. 선택적 PreprocessingConfig
객체를 Input
에 추가하여 입력 동영상에서 자르기, 패딩 또는 다른 사전 처리를 수행할 수 있습니다. inputs
배열은 정렬되지 않습니다. 입력 동영상을 원하는 순서로 추가할 수 있습니다.
입력 동영상을 출력 동영상 타임라인에 추가하려면 EditAtom
객체를 editList
배열에 추가합니다. editList
배열이 정렬됩니다. 이 배열에 지정된 첫 번째 입력이 출력 동영상에서 먼저 사용되고 두 번째 입력이 다음으로 사용됩니다. 키를 기준으로 입력 동영상을 식별합니다.
startTimeOffset
및 endTimeOffset
을(를) 지정하여 입력 동영상을 자를 수도 있습니다. 이 필드는 선택사항입니다. 이 필드를 지정하지 않으면 입력 동영상 전체가 사용됩니다.
다음 구성에서는 입력 동영상 두 개를 단일 출력 동영상으로 연결합니다.
"inputs": [
{
"key": "input1",
"uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO1"
},
{
"key": "input2",
"uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO2"
}
],
"editList": [
{
"key": "atom1",
"inputs": [
"input1"
],
"startTimeOffset": "START_TIME_OFFSET1s",
"endTimeOffset": "END_TIME_OFFSET1s"
},
{
"key": "atom2",
"inputs": [
"input2"
],
"startTimeOffset": "START_TIME_OFFSET2s",
"endTimeOffset": "END_TIME_OFFSET2s"
}
],
이 구성을 작업 템플릿에 추가하거나 임시 작업 구성에 포함할 수 있습니다.
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- PROJECT_ID: IAM 설정에 나열된 Google Cloud 프로젝트 ID입니다.
- LOCATION: 작업이 실행될 위치입니다. 지원되는 리전 중 하나를 사용합니다.
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- STORAGE_BUCKET_NAME: 만든 Cloud Storage 버킷의 이름입니다.
- STORAGE_INPUT_VIDEO1: 트랜스코딩하는 Cloud Storage 버킷에 있는 동영상의 이름입니다(예:
my-vid.mp4
). 이 필드는 버킷에서 만든 모든 폴더를 고려해야 합니다(예:input/my-vid.mp4
). 이 동영상은 출력 동영상 타임라인에서 먼저 사용됩니다. - START_TIME_OFFSET1: 첫 번째 입력 동영상 타임라인을 기준으로 시작 시간(소수부 초 단위)입니다(예:
0.0
). 이 필드를 사용하여 동영상 시작 부분에서 콘텐츠를 자릅니다. - END_TIME_OFFSET1: 첫 번째 입력 동영상 타임라인을 기준으로 종료 시간(소수부 초 단위)입니다(예:
8.1
). 이 필드를 사용하여 동영상 끝 부분에서 콘텐츠를 자릅니다. - STORAGE_INPUT_VIDEO2: 트랜스코딩하는 Cloud Storage 버킷에 있는 동영상의 이름입니다(예:
my-vid.mp4
). 이 필드는 버킷에서 만든 모든 폴더를 고려해야 합니다(예:input/my-vid.mp4
). 이 동영상은 출력 동영상 타임라인에서 두 번째로 사용됩니다. - START_TIME_OFFSET2: 두 번째 입력 동영상 타임라인을 기준으로 시작 시간(소수부 초 단위)입니다(예:
3.5
). 이 필드를 사용하여 두 번째 동영상 시작 부분에서 콘텐츠를 자릅니다. - END_TIME_OFFSET2: 두 번째 입력 동영상 타임라인을 기준으로 종료 시간(소수부 초 단위)입니다(예:
15
). 이 필드를 사용하여 두 번째 동영상 끝 부분에서 콘텐츠를 자릅니다. - STORAGE_OUTPUT_FOLDER: 인코딩된 동영상 출력을 저장할 Cloud Storage 폴더 이름입니다.
JSON 요청 본문:
{ "config": { "inputs": [ { "key": "input1", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO1" }, { "key": "input2", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO2" } ], "editList": [ { "key": "atom1", "inputs": [ "input1" ], "startTimeOffset": "START_TIME_OFFSET1s", "endTimeOffset": "END_TIME_OFFSET1s" }, { "key": "atom2", "inputs": [ "input2" ], "startTimeOffset": "START_TIME_OFFSET2s", "endTimeOffset": "END_TIME_OFFSET2s" } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud CLI
- 작업 필드를 정의하는
request.json
파일을 만듭니다.gcloud
명령어를 다음과 같이 바꿉니다.- LOCATION: 작업이 실행될 위치입니다. 지원되는 리전 중 하나를 사용합니다.
us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
asia-east1
asia-south1
asia-southeast1
europe-west1
europe-west2
europe-west4
- STORAGE_BUCKET_NAME: 만든 Cloud Storage 버킷의 이름입니다.
- STORAGE_INPUT_VIDEO1: 트랜스코딩하는 Cloud Storage 버킷에 있는 동영상의 이름입니다(예:
my-vid.mp4
). 이 필드는 버킷에서 만든 모든 폴더를 고려해야 합니다(예:input/my-vid.mp4
). 이 동영상은 출력 동영상 타임라인에서 먼저 사용됩니다. - START_TIME_OFFSET1: 첫 번째 입력 동영상 타임라인을 기준으로 시작 시간(소수부 초 단위)입니다(예:
0.0
). 이 필드를 사용하여 동영상 시작 부분에서 콘텐츠를 자릅니다. - END_TIME_OFFSET1: 첫 번째 입력 동영상 타임라인을 기준으로 종료 시간(소수부 초 단위)입니다(예:
8.1
). 이 필드를 사용하여 동영상 끝 부분에서 콘텐츠를 자릅니다. - STORAGE_INPUT_VIDEO2: 트랜스코딩하는 Cloud Storage 버킷에 있는 동영상의 이름입니다(예:
my-vid.mp4
). 이 필드는 버킷에서 만든 모든 폴더를 고려해야 합니다(예:input/my-vid.mp4
). 이 동영상은 출력 동영상 타임라인에서 두 번째로 사용됩니다. - START_TIME_OFFSET2: 두 번째 입력 동영상 타임라인을 기준으로 시작 시간(소수부 초 단위)입니다(예:
3.5
). 이 필드를 사용하여 두 번째 동영상 시작 부분에서 콘텐츠를 자릅니다. - END_TIME_OFFSET2: 두 번째 입력 동영상 타임라인을 기준으로 종료 시간(소수부 초 단위)입니다(예:
15
). 이 필드를 사용하여 두 번째 동영상 끝 부분에서 콘텐츠를 자릅니다. - STORAGE_OUTPUT_FOLDER: 인코딩된 동영상 출력을 저장할 Cloud Storage 폴더 이름입니다.
{ "config": { "inputs": [ { "key": "input1", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO1" }, { "key": "input2", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO2" } ], "editList": [ { "key": "atom1", "inputs": [ "input1" ], "startTimeOffset": "START_TIME_OFFSET1s", "endTimeOffset": "END_TIME_OFFSET1s" }, { "key": "atom2", "inputs": [ "input2" ], "startTimeOffset": "START_TIME_OFFSET2s", "endTimeOffset": "END_TIME_OFFSET2s" } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } } ], "muxStreams": [ { "key": "sd", "container": "mp4", "elementaryStreams": [ "video-stream0", "audio-stream0" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
- LOCATION: 작업이 실행될 위치입니다. 지원되는 리전 중 하나를 사용합니다.
- 다음 명령어를 실행합니다.
gcloud transcoder jobs create --location=LOCATION --file="request.json"
다음과 비슷한 응답이 표시됩니다.{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
C#
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 C# 설정 안내를 따르세요. 자세한 내용은 Transcoder API C# API 참조 문서를 확인하세요.
Go
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Transcoder API Go API 참조 문서를 확인하세요.
Java
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Transcoder API Java API 참조 문서를 확인하세요.
Node.js
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Transcoder API Node.js API 참조 문서를 확인하세요.
PHP
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 PHP 설정 안내를 따르세요. 자세한 내용은 Transcoder API PHP API 참조 문서를 확인하세요.
Python
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Transcoder API Python API 참조 문서를 확인하세요.
Ruby
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Ruby 설정 안내를 따르세요. 자세한 내용은 Transcoder API Ruby API 참조 문서를 확인하세요.
예시
다음 샘플 동영상을 살펴보세요.
이 두 동영상은 아래 세 파트를 포함한다는 점에서 유사합니다.
- 휴대기기에서 영화 또는 게임 보기
- 큰 화면에서 동일한 콘텐츠 보기
- 제품에 대한 간략한 광고 문구 표시
예를 들어 출력 동영상에서 첫 번째 동영상의 1부와 2부를 보여주고 이후에 두 번째 동영상의 2부와 3부를 보여주는 것과 같이 동영상 두 개를 연결할 수 있습니다. 다음과 같은 타임스탬프를 사용하여 이 연결을 수행할 수 있습니다.
- ForBiggerEscapes.mp4
startTimeOffset
:0s
endTimeOffset
:8.1s
- ForBiggerJoyrides.mp4
startTimeOffset
:3.5s
endTimeOffset
:15s
액션이 가득한 결과 동영상을 보려면 이 두 동영상 및 시차와 함께 앞의 코드를 사용합니다.