이 페이지에서는 출력 동영상에 자막을 추가하는 방법을 설명합니다.
자막은 동영상의 오디오를 시각적으로 표시하는 것입니다. 자막은 일반적으로 오디오와 동일한 언어이며 배경음과 화자 변경사항을 포함합니다.
자막은 일반적으로 동영상의 대화를 다른 언어로 번역하는 데 사용됩니다. 자막에는 일반적으로 배경음과 화자 변경사항이 포함되지 않습니다.
이 페이지에서는 입력 자막 파일이라는 용어를 사용하여 자막을 포함하는 텍스트 파일을 지칭합니다. 이 파일을 작업에 대한 입력으로 제공합니다.
작업 구성에 자막 추가
지원되는 입력 자막 파일 형식은 지원되는 입력 및 출력을 참조하세요. 구성을 테스트할 수 있도록 샘플 동영상 파일과 샘플 입력 자막 파일이 제공됩니다.
다음 섹션의 정보를 사용하여 작업 구성에 자막을 추가합니다. 이 페이지는 사용자가 기본 JobConfig에 익숙하다고 가정합니다. 트랜스코딩 작업을 만드는 방법에 대한 자세한 내용은 작업 만들기 및 관리를 참조하세요.
자막 추가
출력 동영상 파일 컨테이너에 자막을 삽입하는 작업을 만들려면 다음을 수행합니다.
작업 구성의 시작 부분에
inputs
배열을 추가합니다.연결된 입력 동영상의 키와 URI를 정의하는
inputs
배열에Input
객체를 추가합니다.입력 자막 파일의 경로가 포함된 다른
Input
객체를 추가합니다.editList
배열을 작업 구성에 추가합니다. 이 배열은 출력 동영상 타임라인에 입력을 추가하는 데 사용됩니다.EditAtom
객체를editList
배열에 추가합니다. 이EditAtom
객체는inputs
배열에 추가한 입력 동영상과 자막의 키를 참조해야 합니다.startTimeOffset
및endTimeOffset
을 지정하여 입력 동영상을 자를 수 있습니다.textStream
객체를elementaryStreams
배열에 추가하여 출력 컨테이너에 자막을 추가합니다. 출력 타임라인이 하나뿐이므로 삽입된 텍스트 스트림 하나만 지원되며 모든 출력 동영상에 추가됩니다.textStream
구성 객체에서mapping
배열을 사용하여EditAtom
객체 키를 참조합니다.
다음 구성 예시는 CEA-608 자막을 동영상에 삽입합니다.
이 구성을 작업 템플릿에 추가하거나 임시 작업 구성에 포함할 수 있습니다.
자막 추가
매니페스트에서 재생되는 다국어 자막 파일을 생성하는 작업을 만들려면 다음을 수행합니다.
inputs
배열을 작업 구성에 추가합니다.연결된 입력 동영상의 키와 URI를 정의하는
inputs
배열에Input
객체를 추가합니다.입력 자막 파일의 URI를 정의하는 다른
Input
객체를 추가합니다.editList
배열을 구성에 추가합니다. 이 배열은 출력 동영상 타임라인에 입력을 추가하는 데 사용됩니다.키로
inputs
배열의 객체를 참조하는EditAtom
객체를editList
배열에 추가합니다.startTimeOffset
및endTimeOffset
을 지정하여 입력 동영상을 자를 수 있습니다.textStream
객체를elementaryStreams
배열에 추가하여 출력 컨테이너에 자막을 추가합니다.독립형 자막 파일의 경우
muxStream
배열에 컨테이너를 지정합니다. 다음 구성에서text-vtt-en
및text-vtt-es
키가 있는 객체를 참조하세요. 삽입된 자막의 경우 기본 스트림만 있으면 됩니다.
다음 구성은 여러 WebVTT 파일을 생성합니다. 영어 자막과 스페인어 자막을 위한 파일이 각각 하나씩 생성됩니다.
이 구성을 작업 템플릿에 추가하거나 임시 작업 구성에 포함할 수 있습니다.
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
PROJECT_ID
: IAM 설정에 나열된 Google Cloud 프로젝트 ID입니다.LOCATION
: 작업이 실행될 위치입니다. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
STORAGE_BUCKET_NAME
: 만든 Cloud Storage 버킷의 이름입니다.STORAGE_INPUT_VIDEO
: Cloud Storage 버킷에 있는 트랜스코딩하는 동영상의 이름입니다(예:my-vid.mp4
). 이 필드는 버킷에서 만든 폴더(예:input/my-vid.mp4
)를 고려해야 합니다.STORAGE_SUBTITLES_FILE1
: Cloud Storage 버킷에 있는 자막 파일의 이름입니다(예: 영어 자막의 경우subtitles-en.srt
). 이 필드는 버킷에서 만든 폴더(예:input/subtitles-en.srt
)를 고려해야 합니다.STORAGE_SUBTITLES_FILE2
: Cloud Storage 버킷에 있는 다른 자막 파일의 이름입니다(예: 스페인어 자막의 경우subtitles-es.srt
). 이 필드는 버킷에서 만든 폴더(예:input/subtitles-es.srt
)를 고려해야 합니다.STORAGE_OUTPUT_FOLDER
: 인코딩된 동영상 출력을 저장할 Cloud Storage 버킷의 출력 폴더 이름입니다.
요청을 보내려면 다음 옵션 중 하나를 펼칩니다.
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_NUMBER/locations/LOCATION/jobs/JOB_ID", "config": { ... }, "state": "PENDING", "createTime": CREATE_TIME, "ttlAfterCompletionDays": 30 }
gcloud
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
LOCATION
: 작업이 실행될 위치입니다. 지원되는 리전 중 하나를 사용합니다.위치 표시us-central1
us-west1
us-west2
us-east1
us-east4
southamerica-east1
northamerica-northeast1
asia-east1
asia-northeast1
asia-northeast3
asia-south1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west4
STORAGE_BUCKET_NAME
: 만든 Cloud Storage 버킷의 이름입니다.STORAGE_INPUT_VIDEO
: Cloud Storage 버킷에 있는 트랜스코딩하는 동영상의 이름입니다(예:my-vid.mp4
). 이 필드는 버킷에서 만든 폴더(예:input/my-vid.mp4
)를 고려해야 합니다.STORAGE_SUBTITLES_FILE1
: Cloud Storage 버킷에 있는 자막 파일의 이름입니다(예: 영어 자막의 경우subtitles-en.srt
). 이 필드는 버킷에서 만든 폴더(예:input/subtitles-en.srt
)를 고려해야 합니다.STORAGE_SUBTITLES_FILE2
: Cloud Storage 버킷에 있는 다른 자막 파일의 이름입니다(예: 스페인어 자막의 경우subtitles-es.srt
). 이 필드는 버킷에서 만든 폴더(예:input/subtitles-es.srt
)를 고려해야 합니다.STORAGE_OUTPUT_FOLDER
: 인코딩된 동영상 출력을 저장할 Cloud Storage 버킷의 출력 폴더 이름입니다.
다음 콘텐츠를 request.json
파일에 저장합니다.
{ "config": { "inputs": [ { "key": "input0", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_INPUT_VIDEO" }, { "key": "subtitle_input_en", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_SUBTITLES_FILE1" }, { "key": "subtitle_input_es", "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_SUBTITLES_FILE2" } ], "editList": [ { "key": "atom0", "inputs": [ "input0", "subtitle_input_en", "subtitle_input_es" ] } ], "elementaryStreams": [ { "key": "video-stream0", "videoStream": { "h264": { "heightPixels": 360, "widthPixels": 640, "bitrateBps": 550000, "frameRate": 60 } } }, { "key": "audio-stream0", "audioStream": { "codec": "aac", "bitrateBps": 64000 } }, { "key": "vtt-stream-en", "textStream": { "codec": "webvtt", "languageCode": "en-US", "displayName": "English", "mapping": [ { "atomKey": "atom0", "inputKey": "subtitle_input_en" } ] } }, { "key": "vtt-stream-es", "textStream": { "codec": "webvtt", "languageCode": "es-ES", "displayName": "Spanish", "mapping": [ { "atomKey": "atom0", "inputKey": "subtitle_input_es" } ] } } ], "muxStreams": [ { "key": "sd-hls-fmp4", "container": "fmp4", "elementaryStreams": [ "video-stream0" ] }, { "key": "audio-hls-fmp4", "container": "fmp4", "elementaryStreams": [ "audio-stream0" ] }, { "key": "text-vtt-en", "container": "vtt", "elementaryStreams": [ "vtt-stream-en" ], "segmentSettings": { "segmentDuration": "6s", "individualSegments": true } }, { "key": "text-vtt-es", "container": "vtt", "elementaryStreams": [ "vtt-stream-es" ], "segmentSettings": { "segmentDuration": "6s", "individualSegments": true } } ], "manifests": [ { "fileName": "manifest.m3u8", "type": "HLS", "muxStreams": [ "sd-hls-fmp4", "audio-hls-fmp4", "text-vtt-en", "text-vtt-es" ] } ], "output": { "uri": "gs://STORAGE_BUCKET_NAME/STORAGE_OUTPUT_FOLDER/" } } }
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows(PowerShell)
gcloud transcoder jobs create --location=LOCATION --file=request.json
Windows(cmd.exe)
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 }
Go
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 Transcoder API Go API 참고 문서를 확인하세요.
Transcoder API에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Java
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Java 설정 안내를 따르세요. 자세한 내용은 Transcoder API Java API 참고 문서를 확인하세요.
Transcoder API에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Node.js
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Node.js 설정 안내를 따르세요. 자세한 내용은 Transcoder API Node.js API 참고 문서를 확인하세요.
Transcoder API에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
Python
이 샘플을 사용해 보기 전에 Transcoder API 빠른 시작: 클라이언트 라이브러리 사용의 Python 설정 안내를 따르세요. 자세한 내용은 Transcoder API Python API 참고 문서를 확인하세요.
Transcoder API에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.
동영상 재생
Windows에서 자막을 보려면 영화 및 TV 앱에서 동영상을 재생하세요. 자막 트랙을 선택해야 합니다.
MacOS 또는 Linux에서 자막을 보려면 Shaka Player에서 동영상을 재생하면 됩니다. Captions(자막) 메뉴에서 자막을 사용 설정해야 합니다.
생성된 미디어 파일을 Shaka Player에서 재생하려면 다음 단계를 완료합니다.
- 만든 Cloud Storage 버킷을 공개적으로 읽을 수 있도록 합니다.
- Cloud Storage 버킷에서 교차 출처 리소스 공유(CORS)를 사용 설정하려면 다음을 수행합니다.
- 다음을 포함하는 JSON 파일을 만듭니다.
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ]
-
JSON_FILE_NAME을 이전 단계에서 만든 JSON 파일 이름으로 바꾼 후 다음 명령어를 실행합니다.
gsutil cors set JSON_FILE_NAME.json gs://STORAGE_BUCKET_NAME
- 다음을 포함하는 JSON 파일을 만듭니다.
- Cloud Storage 버킷에서 트랜스코딩 작업으로 생성된 MP4 또는 매니페스트 파일 중 하나를 선택합니다. 파일의 공개 액세스 열에서 URL 복사를 클릭합니다.
- 온라인 실시간 스트림 플레이어인 Shaka Player로 이동합니다.
- 상단 탐색 메뉴에서 커스텀 콘텐츠를 클릭합니다.
- + 버튼을 클릭합니다.
파일의 공개 URL을 매니페스트 URL 상자에 붙여넣습니다.
이름 상자에 이름을 입력합니다.
저장을 클릭합니다.
재생을 클릭합니다.
플레이어 오른쪽 하단의 줄임표 버튼을 선택하고 자막을 사용 설정합니다.
예
테스트 작업을 위해 다음 파일을 사용할 수 있습니다.
입력 자막 파일에서 텍스트 줄 사이에 빈 줄을 포함하지 않아야 합니다.