-
Notifications
You must be signed in to change notification settings - Fork 6
Home
- Architecture
- Kafka Producer
- Kafka Streams
- Kafka Broker
- Kafka Consumer
- InfluxDB
- Video Range Extractor
- Cloud Storage
- YouTube Upload
Kafka에서 비디오 바이너리 데이터를 실시간으로 수신하고, 해당 데이터를 InfluxDB에 저장하기 위해 형식을 변환한다. 이 과정의 세부적인 단계는 다음과 같다.
- Kafka Consumer 설정: confluent_kafka 라이브러리를 사용하여 Kafka Consumer를 설정한다. 설정된 Consumer는 특정 Topic (Video Stream)에 대해 데이터를 실시간으로 가져온다.
- 비디오 바이너리 데이터를 Base64로 인코딩: 수신된 비디오 바이너리 데이터를 base64로 인코딩하여 텍스트 형식으로 변환한다. 이 인코딩 과정은 InfluxDB에 텍스트 필드로 저장하기 위함이다.
- 타임스탬프 변환: 수신된 카프카 메시지의 타임스탬프(밀리초 단위)를 나노초 단위로 변환하여 InfluxDB에 저장한다. 영상 바이너리 데이터는 밀리초 당 2개 이상의 데이터가 들어오므로 나노초 단위의 높은 정밀도가 필요하다.
Data Preprocessor에서 변환된 타임스탬프와 텍스트 형태로 변환된 비디오 바이너리 데이터는 InfluxDB에 저장한다. InfluxDB는 시계열 데이터의 저장 및 분석에 최적화된 데이터베이스로, 특히 타임스탬프를 기준으로 데이터를 조회하고 분석하는 데 뛰어난 성능을 발휘한다.
Video Script 데이터는 비디오 바이너리 데이터와 함께 InfluxDB에 저장되는 또 다른 시계열 데이터이다. 비비디오에서 오디오를 추출하고 이를 텍스트로 변환(STT: Speech-to-Text)한 텍스트 데이터를 InfluxDB에 저장한다. 이 데이터는 비디오의 각 타임스탬프에 대응하는 텍스트 정보이다.
영상 범위 추출 어플리케이션은 채팅 빈도가 높아진 시점을 명장면 타임스탬프로 식별하고, 이 기준을 바탕으로 전후 10분에 해당하는 영상 대본을 추출한다. 이후, 추출된 대본을 GPT API에 요청하여 해당 장면의 시작 및 종료 타임스탬프와 제목을 받아온다. 마지막으로, 이 정보를 활용하여 지정된 영상 구간을 추출하고, 결과를 mp4 파일로 저장한다.
영상의 범위를 추출하기 위해 GPT API를 사용한다. GPT API는 영상의 대본을 입력받아 해당 대본의 시작 및 종료 타임스탬프와 제목을 반환한다. 이렇게 반환된 제목으로 영상의 특정 구간을 저장한다.
영상의 byte array를 받아 해당 영상의 특정 구간을 추출하여 먼저 ts (transport stream) 파일로 저장한다. 이후, ts 파일을 mp4 파일로 변환하여 저장한다.
추출된 영상은 S3에 업로드된다. S3에 업로드된 영상은 자동으로 S3 트리거를 통해 YouTube에 업로드한다.