음성과 영상 변환 API
각 메서드의 media_item_rid: Optional[str]는 기본 None으로 집합 전체를 처리하며, 지정하면 해당 항목을 처리합니다. 미디어 자체를 생성하는 메서드는 MediaSetInputTransform을 반환하여 출력의 write()에 전달합니다. 아래 함수는 실제 입력/출력 핸들을 인자로 받습니다.
transcode와 extract_audio
| 메서드 | 추가 인자 | 기본값과 동작 |
|---|---|---|
transcode() | encode_format: Optional[str] | 영상은 MP4, 음성은 MP3로 인코딩 |
extract_audio() | output_format: str | 영상에서 음성을 추출. 기본 mp3, wav 등 선택 |
def transcode_video(videos, output):
output.write(videos.transform().transcode(encode_format="mov"))
def extract_video_audio(videos, audio_output):
audio_output.write(videos.transform().extract_audio(output_format="wav"))
extract_scene_frames
새 장면의 시작이나 큰 시각적 전환에 해당하는 프레임을 추출합니다.
| 인자 | 기본값과 조건 |
|---|---|
scene_sensitivity | STANDARD. MORE_SENSITIVE, STANDARD, LESS_SENSITIVE 중 선택 |
output_format | PNG. 추출할 프레임의 이미지 형식 |
media_item_rid | None, 집합 전체 |
각 영상의 결과 이미지들은 TAR archive로 저장됩니다. 이를 받을 수 있는 multimodal 미디어 출력을 사용합니다.
def scene_frames(videos, multimodal_output):
operation = videos.transform().extract_scene_frames(scene_sensitivity="MORE_SENSITIVE")
multimodal_output.write(operation)
chunk
음성이나 영상을 지정한 기간의 작은 조각으로 나눕니다.
| 인자 | 자료형 | 기본값과 조건 |
|---|---|---|
chunk_duration_milliseconds | int | 10000, 즉 10초. 양의 정수 |
output_format | Optional[str] | 영상은 MP4, 음성은 TS. 음성 chunk의 출력은 TS만 지원 |
media_item_rid | Optional[str] | None |
def five_second_video_chunks(videos, output):
output.write(videos.transform().chunk(chunk_duration_milliseconds=5000))
chunk의 기간은 밀리초이며 아래 프레임 추출의 timestamps는 초입니다. Transcode의 음성 기본 MP3와 chunk의 음성 TS 조건도 구분합니다.
extract_first_frame
영상의 첫 완전한 장면 프레임을 이미지로 추출합니다.
| 인자 | 기본값과 동작 |
|---|---|
width: Optional[int] | None. height만 있으면 그 크기에 맞춰 폭 조정 |
height: Optional[int] | None. width만 있으면 그 크기에 맞춰 높이 조정 |
output_format: str | PNG |
media_item_rid: Optional[str] | None |
폭과 높이를 모두 생략하면 원래 크기를 사용합니다.
def first_video_frames(videos, image_output):
image_output.write(videos.transform().extract_first_frame(width=800, height=600))
extract_frames_at_timestamp
| 인자 | 자료형 | 기본값과 조건 |
|---|---|---|
timestamps | Union[float, Column] | 필수. 프레임을 추출할 시각, 초 단위 |
media_item_rid | Optional[str] | None |
df | Optional[DataFrame] | 동적 시각을 제공하거나 처리 대상을 제한하는 표 |
on | Optional[str] | media_item_rid 또는 media_reference. df와 함께 지정 |
width | Optional[int] | None, height가 있으면 그에 맞춰 조정 |
height | Optional[int] | None, width가 있으면 그에 맞춰 조정 |
output_format | str | PNG |
크기를 모두 생략하면 원래 크기입니다. df를 지정하면 입력 집합과 표에 모두 있는 항목만 처리합니다. 다음 marks는 실제 미디어 식별자와 timestamp 열을 가진 Spark DataFrame입니다.
def frames_from_marks(videos, image_output, marks):
operation = videos.transform().extract_frames_at_timestamp(
timestamps=marks.timestamp, df=marks, on="media_item_rid"
)
image_output.write(operation)
def frames_at_thirty_seconds(videos, image_output):
image_output.write(videos.transform().extract_frames_at_timestamp(timestamps=30))
음성과 영상의 값 추출
아래 추출 메서드는 단일 항목이면 문자열, 집합 전체이면 DataFrame을 반환합니다. 집합 결과에는 공통으로 media_item_rid, path, media_reference가 포함됩니다.
suppress_errors: bool=True가 기본이며 집합 전체에서 발생한 오류를 결과에 포함합니다. False이면 오류를 잡지 않고 빌드를 실패시킵니다. 이 옵션은 개별 항목에는 적용하지 않습니다.
get_waveform
peaks_per_second: Optional[int]는 기본 100이며 1~1000의 정수입니다. 단일 항목은 0~1로 정규화된 진폭 double 목록의 JSON 문자열을 반환합니다. 집합 결과의 추가 열은 waveform: str입니다.
def audio_waveforms(audio, dataset_output):
dataset_output.write_dataframe(audio.transform().get_waveform())
transcribe
| 인자 | 자료형 | 기본값과 조건 |
|---|---|---|
media_item_rid | Optional[str] | None |
language | Optional[str] | None이면 언어 자동 감지 |
performance_mode | 문자열 열거값 | more_economical 기본, 또는 more_performant |
output_format | 문자열 열거값 | text 기본, 또는 segments |
add_timestamps | Optional[bool] | False. text 출력에만 적용 |
suppress_errors | bool | True, 집합 전체에만 적용 |
단일 text 결과는 전사 문자열입니다. 단일 segments 결과도 문자열이지만 시각과 구간 신뢰도 등의 상세 정보를 담은 JSON입니다. 집합 결과는 transcription: str 열을 추가합니다. 언어 이름과 코드는 전사 언어 사전에 있습니다.
def transcribe_segments(audio, dataset_output):
result = audio.transform().transcribe(output_format="segments")
dataset_output.write_dataframe(result)
def transcribe_english_item(audio, media_item_rid):
return audio.transform().transcribe(
media_item_rid=media_item_rid, language="english"
)
두 번째 함수의 반환은 단일 문자열입니다. 이를 집합 전체의 DataFrame 반환과 혼동하지 않습니다.
get_scene_frame_timestamps
scene_sensitivity는 기본 STANDARD이며 MORE_SENSITIVE와 LESS_SENSITIVE도 지원합니다. 공통 media_item_rid와 suppress_errors 인자를 받습니다.
단일 결과는 frames 필드에 장면 프레임 목록을 담은 JSON 문자열입니다. 각 프레임에는 timestamp와 sceneScore가 있습니다. 집합 결과의 추가 열은 scene_frames: str입니다.
def scene_frame_times(videos, dataset_output):
dataset_output.write_dataframe(videos.transform().get_scene_frame_timestamps())