AWS 기술 블로그

클라우드 환경에서의 비디오 인텔리전스 구현: TwelveLabs로 시작하는 AI 영상 분석 2부 – 준실시간 환경에서 AWS 미디어 서비스를 활용한 분석 파이프라인 구축하기

소개

지난 1부에서는 ‘클라우드 환경에서의 비디오 인텔리전스 구현: TwelveLabs로 시작하는 AI 영상 분석 1부 – VoD환경에서의 비디오 분석 파이프라인 구축하기’라는 주제를 다루었습니다. 2부에서는 영상의 분석과 의사결정이 빠르게 요구되는 환경에서 준실시간으로 비디오 분석 파이프라인을 구축하는 방안에 대해 다루겠습니다.

영상 데이터는 초 단위로 쌓이지만, 그 안에서 의미 있는 이벤트를 찾아내는 일은 여전히 쉽지 않습니다. 기존의 감시/모니터링 시스템은 사람의 눈에 의존하거나, 단순한 룰 기반(예: 특정 시간대 모션 발생 시 알람)에 머무르는 경우가 많습니다. 이 방식으로는 “출입이 제한된 구역에 사람이 진입했는지”, “주차장에 의심 차량이 일정 시간 이상 머무르는지”와 같은 복잡한 패턴을 빠르게 파악하기 어렵습니다.

TwelveLabs Pegasus는 비디오 이해 모델로, 영상에 대한 장면, 맥락을 함께 이해하고 빠르게 텍스트 형태로 분석 결과를 제공합니다. 또한, Agent를 활용할 경우, 단순한 룰 기반이 아니라 “카운터에 5명 이상이 줄 서 있는 상황”, “차량이 역주행하는 순간”과 같은 특정 이벤트를 자연어로 정의할 수 있으며, 이를 통해 해당 장면이 감지될 때마다 AI가 의미를 판단하여 준실시간으로 알림을 제공하는 형태로 파이프라인을 구축할 수 있습니다.

시나리오 1: AWS Elemental 서비스를 활용한 라이브 스트림 분석

AWS Elemental 서비스 스택은 방송급 품질의 라이브 비디오 처리를 위한 완전 관리형 솔루션입니다. 실시간 스트리밍 환경에서 AI 영상 분석을 적용할 때 가장 큰 기술적 도전 과제는 스트리밍 포맷을 분석 가능한 형태로 변환하는 것입니다. 일반적인 실시간 스트리밍은 HLS(HTTP Live Streaming)나 DASH 프로토콜을 사용하며, 2~10초 단위의 작은 세그먼트(.ts 또는 .m4s 파일)로 분할되어 전송됩니다. TwelveLabs의 Marengo나 Pegasus 모델은 분석을 위해 MP4, MOV와 같은 비디오 파일로 변환하는 것이 중요합니다.

서버리스 아키텍처 방식

서버리스 방식은 인프라 관리 부담 없이 AWS 관리형 서비스만으로 파이프라인을 구축할 수 있습니다.

[방법 A: MediaLive HLS Output을 S3에 직접 저장]

MediaLive의 Output Group 설정에서 HLS를 S3에 직접 저장하는 가장 단순한 방식입니다.

[상세 흐름]

  1. 입력 소스 인제스트: 입력 소스(RTMP, RTP, HLS, MP4 등)가 AWS Elemental MediaLive로 인제스트됩니다.
  2. HLS Output Group 설정: MediaLive에서 Output Group을 HLS로 설정하고, Destination을 S3 버킷으로 지정합니다.
    1. Segment Length: 10초
    2. Destination: s3://bucket-name/live-stream/
  3. 세그먼트 자동 저장: MediaLive가 10초 단위로 .ts 세그먼트와 .m3u8 manifest를 S3에 저장합니다.
  4. S3 Event 트리거: S3에 .ts 파일이 생성될 때마다 EventBridge를 통해 Lambda 함수를 트리거합니다.
  5. Lambda 함수의 변환 및 분석: Lambda 함수는 다음 과정을 수행합니다:
    1. FFmpeg으로 .ts를 MP4로 변환: ffmpeg -i input.ts -c copy -movflags +faststart output.mp4
    2. 생성된 MP4를 분석용 S3 버킷에 업로드
    3. TwelveLabs API 호출하여 분석 시작

장점: 가장 단순한 구조, 추가 서비스 불필요
단점: 세그먼트 단위 분석으로 연속성 있는 이벤트 감지에 제한

[방법 B: MediaPackage 타임시프트 기능 활용]

AWS Elemental MediaPackage의 타임시프트(Time-shifted) 기능을 활용하면 라이브 스트림의 과거 구간을 DVR 방식으로 접근할 수 있습니다. 이 기능과 함께 10초 단위 세그먼트 설정을 조합하면, 10초짜리 세그먼트를 10초 주기로 가져와 분석하는 “준실시간” 파이프라인을 구축할 수 있습니다.

[상세 흐름]

    1. 입력 소스 인제스트: 입력 소스(RTMP, RTP, HLS, MP4 등)가 AWS Elemental MediaLive로 인제스트됩니다.
    2. HLS 인코딩 및 전달: MediaLive는 입력 스트림을 인코딩하여 HLS 형식으로 AWS Elemental MediaPackage에 전달합니다.
    3. 타임시프트 윈도우 설정: MediaPackage는 타임시프트 윈도우(예: 24시간)를 설정하여 해당 기간 동안의 세그먼트를 보관합니다. 이를 통해 ?start=<ISO8601>&end=<ISO8601> 쿼리 파라미터로 과거 구간에 접근할 수 있습니다.
    4. Step Functions 내부 루프를 통한 주기적 실행: Step Functions State Machine 내부에서 Wait 상태와 루프를 활용하여 10초 주기로 클립 생성 작업을 반복 실행합니다. 이전 실행에서 사용된 끝 타임스탬프를 다음 실행의 시작 타임스탬프로 전달하여, 영상 구간이 누락되거나 중복되지 않도록 연속적으로 처리합니다.
    5. Lambda 함수의 클립 생성: Lambda 함수는 다음 과정을 수행합니다:
      1. MediaPackage 타임시프트 URL 생성: https://{cloudfront-domain}/out/v1/{endpoint-id}/index.m3u8?start={startTime}&end={endTime}
      2. FFmpeg으로 HLS 스트림을 MP4로 변환: ffmpeg -i '{timeShiftUrl}' -t 10 -c copy -movflags +faststart -y output.mp4
        1. -t 10 옵션으로 10초만 읽어 자동 종료되므로 별도의 manifest 변환 불필요
      3. 생성된 MP4를 S3에 업로드
      4. 썸네일 이미지 생성 및 업로드
    6. AI 분석 파이프라인: S3에 MP4가 업로드되면 TwelveLabs API 호출하여 분석 시작

장점: 타임시프트로 정확한 시간 구간 제어, 연속적인 클립 생성 가능, 완전 서버리스
단점: MediaPackage 타임시프트 윈도우 설정 필요

서버 기반 아키텍처 방식

서버 기반 방식은 더 낮은 레이턴시와 실시간 처리가 필요한 경우에 적합합니다.

[방법 C: MediaConnect SRT를 서버에서 폴링]

AWS Elemental MediaConnect를 활용하여 SRT(Secure Reliable Transport) 프로토콜로 스트림을 전송하고, EC2/ECS에서 FFmpeg으로 실시간 세그먼트를 생성합니다.

[상세 흐름]

  1. MediaLive에서 이중 출력 설정:
    1. Output 1: MediaPackage로 전송 (시청자용 HLS/DASH 배포)
    2. Output 2: MediaConnect SRT Output으로 전송 (분석용)
    3. ffmpeg -i srt://mediaconnect-endpoint:port?mode=caller \
          -c copy \
          -f segment \
          -segment_time 10 \
          -segment_format mp4 \
          -reset_timestamps 1 \
          -strftime 1 \
          "/output/segment_%Y%m%d_%H%M%S.mp4"
  2. S3 업로드 및 분석: 생성된 세그먼트를 즉시 S3에 업로드하고, 추출된 MP4를 TwelveLabs API로 전송하여 분석 파이프라인을 실행합니다.

장점: 낮은 레이턴시, SRT의 안정적인 전송 보장, 패킷 손실 복구 기능
단점: MediaConnect 사용으로 인한 추가 비용, 서버 관리 필요

시나리오 2: Amazon Kinesis Video Streams를 활용한 준실시간 CCTV 분석

Amazon Kinesis Video Streams(이하 Amazon KVS)는 비디오 스트림을 실시간으로 수집, 처리, 저장하기 위한 완전 관리형 서비스입니다. 특히 보안/감시 분야에서 IP 카메라, CCTV 스트림을 클라우드로 수집할 때 널리 사용됩니다. ㅁAmazon KVS의 가장 큰 장점은 GetClip API를 통해 특정 시간 구간의 영상을 MP4 형식으로 직접 추출할 수 있다는 점입니다. 별도의 FFmpeg 변환 과정 없이 바로 분석 가능한 포맷을 획득할 수 있습니다.

Amazon KVS에서 제공하는 GetClip API는 지정된 시간 범위의 스트림을 MP4 컨테이너로 직접 반환합니다. 이 방식은 HLS 세그먼트를 다운로드하고 FFmpeg으로 변환하는 과정을 완전히 생략할 수 있어 파이프라인이 단순해집니다. 아래 예시는 Amazon KVS의 PutMedia API를 활용하여 Matroska(MKV) 컨테이너 형식을 전송하는 방식입니다.

[상세 흐름]

        1. PutMedia API로 영상을 KVS 스트림에 업로드하고 Amazon KVS 콘솔의 Media Playback탭에서 영상이 플레이되는 것을 확인합니다.
        2. Amazon EventBridge가 1분마다 AWS Lambda를 호출하고 get_clip api를 통해 구간의 시작과 끝을 지정해 1분 간격의 영상을 Mp4파일로 변환합니다. 이때 FragmentSelectorType’은 ‘PRODUCER_TIMESTAMP’로 지정합니다.
                1. PRODUCER_TIMESTAMP는 영상이 촬영된 시점을 기록하며 SERVER_TIMESTAMP는 KVS 서버가 fragment를 받는 시점을 기록합니다. SERVER_TIMESTAMP는 KVS 서버의 수신 시각 기준으로 클리핑하므로,파일 업로드처럼 영상이 실시간보다 빠르게 전송되는 경우 1분 구간에 실제 영상 수 분이 포함될 수 있습니다. 따라서 영상 자체의 타임라인 기준으로 정확히 1분을 자르기 위해 PRODUCER_TIMESTAMP를 사용합니다. (문서 링크)
                   try:
                            response = clip_client.get_clip(
                                StreamARN=STREAM_ARN,
                                ClipFragmentSelector={
                                    'FragmentSelectorType': 'PRODUCER_TIMESTAMP',
                                    'TimestampRange': {
                                        'StartTimestamp': clip_start,   # 이번 구간 시작
                                        'EndTimestamp': clip_end         # 이번 구간 끝 (+60초)
                                    }
                                }
                            )
                   mp4_bytes = response['Payload'].read()
                  
                                         
                 
             
         
   
  1. 변환된 MP4 파일을 지정한 S3 경로에 세그먼트 단위로 저장하고, 상태 파일(_state.json)을 업데이트하여 다음 클리핑 위치를 기록합니다.
     
      s3.put_object(
          Bucket='xxxxxxxxx',
          Key='xxxxxx/output/segment_0001.mp4',
          Body=mp4_bytes,          # S3에 저장
          ContentType='video/mp4'
      )

  2. 1분 단위로 저장된 영상을 Amazon Bedrock TwelveLabs Pegasus1.2 모델로 분석하거나 Marengo3.0모델로 임베딩합니다.

결론

AWS Elemental 서비스, Amazon IVS, 그리고 Kinesis Video Streams를 활용하면 실시간 스트리밍 환경에서도 TwelveLabs의 강력한 비디오 인텔리전스를 적용할 수 있습니다.

클라우드 환경에서의 TwelveLabs 기반 비디오 인텔리전스 구현 블로그는 총 5개의 시리즈로 구성이 되어 있습니다. 아래에서 관심 있는 주제를 추가로 살펴보시기 바랍니다.

TwelveLabs로 시작하는 AI 영상 분석 1부 – VoD환경에서의 비디오 분석 파이프라인 구축하기
TwelveLabs로 시작하는 AI 영상 분석 3부 – Strands Agent를 활용한 Agentic video engine구현
TwelveLabs로 시작하는 AI 영상 분석 4부 – TwelveLabs Marengo 3.0 임베딩 및 검색 전략과 구현 가이드
TwelveLabs로 시작하는 AI 영상 분석 5부 – AWS에서 Marengo 3.0 비디오 임베딩을 저장하고 검색하기

TaeHoon Kyeong

TaeHoon Kyeong

Taehoon Kyeong is a Solutions Architect who helps media and entertainment customers design optimal cloud architectures to achieve their business goals. He is also an active member of a working group exploring how to apply generative AI technologies to the media and entertainment industry. Previously, he worked as an SAP DevOps developer and now contributes to customers' SupplyChain adoption on AWS.

Sukwon Lee

Sukwon Lee

이석원 솔루션즈 아키텍트는 고객들의 비즈니스 문제를 AWS의 기술을 통해 해결하고 구현하는데 도움을 드리고 있습니다.

Yongzhe Ren

Yongzhe Ren

렌(Yongzhe Ren) 솔루션즈 아키텍트는 다양한 분야의 엔지니어 경험을 바탕으로, 고객의 비즈니스 성과를 달성하도록 최적의 아키텍처를 구성하는 역할을 수행하고 있습니다.

Yuntaek Lim

Yuntaek Lim

임윤택 솔루션즈 아키텍트는 미디어 및 엔터테인먼트 고객들이 원하는 비즈니스 결과를 달성할 수 있도록 최적의 아키텍처를 설계하는 역할을 맡고 있습니다. OTT 산업의 기술 배경지식을 바탕으로 미디어 산업에 기술적으로 기여하고자 노력하고 있습니다.