구독해서 새 게시물에 대한 알림을 받으세요.

Cloudflare Stream으로 동영상에서 오디오 추출

2025-11-06

5분 읽기
이 게시물은 English日本語로도 이용할 수 있습니다.

본 콘텐츠는 사용자의 편의를 고려해 자동 기계 번역 서비스를 사용하였습니다. 영어 원문과 다른 오류, 누락 또는 해석상의 미묘한 차이가 포함될 수 있습니다. 필요하시다면 영어 원문을 참조하시기를 바랍니다.

Cloudflare Stream은 동영상을 좋아합니다. 하지만 모든 워크플로우에 대해 전체 그림이 필요한 것은 아니라는 점을 잘 알고 있으며, 팟캐스트의 인기는 독립형 오디오의 매력을 강조하고 있습니다. 개발자가 오디오에 액세스하기 위해 비디오를 처리하는 것은 느리고 비용이 많이 들며 복잡합니다. 

동영상이 이렇게 비싼 이유는 무엇일까요? 동영상 파일은 고해상도 images의 빽빽한 스택으로, 시간이 지남에 따라 함께 연결됩니다. 따라서 파일은 단순히 "하나의 파일"이 아니라 초당 프레임 수, 해상도, 코덱 등의 고차원 데이터를 담고 있는 컨테이너입니다. 비디오를 분석한다는 것은 시간 해상도 프레임 속도를 순회한다는 것을 의미합니다.

오디오를 추출해야 하는 이유

이에 비해 오디오 파일은 훨씬 간단합니다. 오디오 파일이 하나의 채널로만 구성된 경우 단일 파형으로 정의됩니다. 이 파형의 기술적 특성은 샘플 레이트(초당 추출되는 오디오 샘플 수) 및 비트 심도(각 샘플의 정밀도)로 정의됩니다.

연산 집약적인 AI 추론 파이프라인이 증가하면서, 오디오 분석만 필요한 다운스트림 워크플로우를 수행하려는 고객이 많아졌습니다. 예:

  • AI 및 머신 러닝 지원: 번역 및 전사 외에도 음성 인식 또는 분석 또는 AI 기반 요약을 위해 오디오를 음성 텍스트 변환 모델에 피드할 수 있습니다.

  • 콘텐츠 조정 개선: 동영상 내의 오디오를 분석하여 콘텐츠가 안전하고 규정을 준수하는지 확인합니다.

이러한 경우 비디오 데이터를 사용하는 것은 비용이 많이 들고 불필요합니다. 

그래서 Cloudflare에서 오디오 추출을 도입하는 것입니다. 이 기능을 통해 단 한 번의 API 호출이나 대시보드 클릭만으로 이제 모든 동영상에서 가벼운 M4A 오디오 트랙을 추출할 수 있습니다.

동영상에서 오디오를 추출하는 두 가지 유연한 방법을 소개합니다. 

1. 미디어 변환을 통한 온더플라이 오디오 추출

Media 변환 은 소셜 미디어 클립과 같은 짧은 형식의 동영상을 처리하고 변환하여 원하는 곳에 저장하는 데 적합합니다. 소스에서 직접 미디어를 가져와서 Cloudflare 에지에서 최적화하여 효율적으로 전달하는 방식으로 작동합니다.

우리는 이 워크플로우를 확장하여 오디오를 포함했습니다. 변환 URL에 mode=audio 를 추가하기만 하면, 어디에든 저장된 비디오 파일에서 즉석에서 오디오를 추출할 수 있습니다.

도메인에 Media Transformations가 활성화되면 모든 소스 비디오에서 오디오를 추출할 수 있습니다. 시간과 지속 시간을 지정하여 특정 섹션을자를 수도 있습니다.

예:

https://example.com/cdn-cgi/media/mode=audio,time=5s,duration=10s/<SOURCE-VIDEO>

위의 요청에 따라 소스 동영상에서 5초 마크에서 시작하여 10초 M4A 오디오 클립이 생성됩니다. 설정 및 기타 옵션에 대한 자세한 내용은 미디어 변환 문서를 참조하세요. 

2. 오디오 다운로드

이제 Stream 내에서 관리하는 모든 콘텐츠에 대한 오디오 트랙을 직접 다운로드할 수 있습니다. 오프라인으로 볼 수 있도록 다운로드 가능한 MP4를 생성하는 기능과 함께 영구 M4A 오디오 파일을 생성하고 저장할 수도 있습니다.

Workers AI 데모

여기에서 Cloudflare의 자체 제품 중 하나인 Workers AI와 함께 미디어 변환을 사용하는 방법을 보여 주는 샘플 코드를 볼 수 있습니다. 다음 코드는 먼저 동영상의 오디오를 영어로 전사한 다음, 스페인어로 번역하는 두 단계 프로세스를 생성합니다.

export default {
 async fetch(request, env, ctx) {


   // 1. Use Media Transformations to fetch only the audio track
   const res = await fetch( "https://blog.cloudflare.com/cdn-cgi/media/mode=audio/https://pub-d9fcbc1abcd244c1821f38b99017347f.r2.dev/announcing-audio-mode.mp4" );
   const blob = await res.arrayBuffer();


   // 2. Transcribe the audio to text using Whisper
   const transcript_response = await env.AI.run(
     "@cf/openai/whisper-large-v3-turbo",
     {
       audio: base64Encode(blob), // A base64 encoded string is required by @cf/openai/whisper-large-v3-turbo
     }
   );


   // Check if transcription was successful and text exists
   if (!transcript_response.text) {
       return Response.json({ error: "Failed to transcribe audio." }, { status: 500 });
   }


   // 3. Translate the transcribed text using the M2M100 model
   const translation_response = await env.AI.run(
     '@cf/meta/m2m100-1.2b',
     {
       text: transcript_response.text,
       source_lang: 'en', // The source language (English)
       target_lang: 'es'  // The target language (Spanish)
     }
   );


   // 4. Return both the original transcription and the translation
    return Response.json({
        transcription: transcript_response.text,
        translation: translation_response.translated_text
    });


 }
};


export function base64Encode(buf) {
 let string = '';
 (new Uint8Array(buf)).forEach(
   (byte) => { string += String.fromCharCode(byte) }
 )
 return btoa(string)
}

worker는 실행 후 깨끗한 JSON 응답을 반환합니다. 아래는 worker가 반환한 응답의 전사 및 번역본입니다.

전사:

{
  "transcription": "I'm excited to announce that Media Transformations from Cloudflare has added audio-only mode. Now you can quickly extract and deliver just the audio from your short form video. And from there, you can transcribe it or summarize it on Worker's AI or run moderation or inference tasks easily.",
  "translation": "Estoy encantado de anunciar que Media Transformations de Cloudflare ha añadido el modo solo de audio. Ahora puede extraer y entregar rápidamente sólo el audio de su vídeo de forma corta. Y desde allí, puede transcribirlo o resumirlo en la IA de Worker o ejecutar tareas de moderación o inferencia fácilmente."
}

기술 세부 정보

저는 Stream 팀의 여름 인턴으로 오랫동안 요청해 온 이 기능을 출시하는 작업을 했습니다. 저는 Stream 미디어 파이프라인의 복잡한 아키텍처를 이해하는 것을 첫 번째 단계로 이해했습니다.

Stream에서 동영상을 처리할 때 다음 두 경로 중 하나를 따를 수 있습니다. 첫 번째는 Stream에 직접 업로드된 동영상을 처리하는 주문형 비디오(VOD) 파이프라인입니다. HLS/DASH로 스트리밍할 수 있는 가변 비트레이트 스트리밍용 인코딩된 비디오 세그먼트 세트를 생성하고 저장합니다. 또 다른 경로는 Stream Live와 미디어 변환 서비스를 구동하는 Cloudflare의 즉시 인코딩(OTFE) 파이프라인입니다. OTFE는 파일을 전처리하고 저장하는 대신 고객의 자체 웹 사이트에서 미디어를 가져오고 에지에서 변환을 수행합니다.

제 프로젝트에는 오디오 추출을 지원하기 위해 이 두 파이프라인을 모두 확장하는 것이 포함되었습니다.

OTFE 파이프라인

OTFE 파이프라인은 실시간 작업을 위해 설계되었습니다. 기존의 흐름은 시각적 작업에 맞게 설계되었습니다. Media Transformations를 활성화한 고객이 자신의 웹 사이트에서 요청을 하면, 해당 요청은 진입점 역할을 하는 에지 서버로 라우팅됩니다. 그런 다음 요청이 검증되고, 사용자의 요청에 따라 OTFE가 동영상을 가져와 크기를 조정한 버전 또는 스틸 프레임 썸네일을 생성합니다.

오디오 전용 추출을 지원하기 위해, 기존 워크플로우를 기반으로 새로운 모드를 추가했습니다. 여기에는 다음이 포함되었습니다.

  1. 유효성 검사 로직 확장: 특히 오디오의 경우, 추출을 시도하기 전에 소스 비디오에 오디오 트랙이 포함되어 있는지 확인하는 것이 중요한 유효성 검사 단계였습니다. 이는 요청된 URL의 형식이 올바른지 확인하는 기존 유효성 검사 단계가 추가되었습니다. 

  2. 새 변환 처리기 구축: 이것이 제 프로젝트의 핵심이었습니다. 저는 고품질 M4A 파일을 전송하기 위해 시각적 트랙을 버린 새로운 핸들러를 OTFE 플랫폼 내에 구축했습니다.

VOD 파이프라인

제가 OTFE에서 작업한 것과 비슷하게, 이번 프로젝트에는 현재의 MP4 다운로드 워크플로우를 오디오 전용 M4A 다운로드로 확장하는 작업이 포함되어 있었습니다. 이로 인해 흥미로운 기술적 결정이 내려졌습니다. 

동영상 다운로드를 만드는 일반적인 흐름은 인증 및 유효성 검사를 처리하고 해당 데이터베이스 레코드를 생성하는 주 API 계층에 대한 POST 요청으로 시작됩니다. 그런 다음 Workers가 처리 작업을 수행하는 비동기 대기열에 작업을 대기열에 추가합니다. VOD용 오디오 다운로드를 가능하게 하기 위해 기본 또는 비디오 다운로드 유형의 다운로드를 생성하기 위한 별칭으로 레거시 POST /downloads 경로를 유지하면서 새로운 유형별 API 엔드포인트( POST/downloads/{type} )를 도입했습니다. 이를 통해 완전한 이전 버전과의 호환성이 보장되었습니다.

다운로드를 생성하는 핵심 작업은 비동기식 대기열에서 수행됩니다. 여기에는 다음이 포함됩니다.

  • 새로운 오디오 다운로드 유형을 감지하는 로직을 소비자에게 추가함

  • API 계층에 정의한 ffmpeg 템플릿을 가져와 오디오 스트림을 고품질 M4A 컨테이너로 적절하게 인코딩합니다

API 라우팅에서 미디어 처리 명령에 이르기까지 이 파이프라인의 각 구성 요소를 확장함으로써 저는 요청이 많이 되었던 새로운 기능을 제공함으로써 고객에게 오디오 중심 워크플로를 선사할 수 있었습니다!

Dash 스크린샷

이 기능을 Stream 대시보드에서도 사용할 수 있다는 소식을 알려드리게 되어 기쁩니다. 원하는 동영상으로 이동하기만 하면 동영상을 다운로드하거나 오디오만 다운로드할 수 있는 옵션이 있습니다.

다운로드 준비가 완료되면 파일 URL과 함께 비활성화 옵션이 나타납니다.

끝입니다.

이 프로젝트에서는 동영상에서 오디오로 작업하는 더 간단한 방법을 제공하여 오래된 고객의 요구를 해결했습니다. 문제를 파악하고 해결책을 마련해 놓은 것에 이르기까지 이 모든 여정에 진심으로 감사드립니다. 특히 그 과정에서 팀으로부터 받았던 멘토링과 지도에 대해 깊이 감사드립니다. 개발자들이 이 새로운 기능을 사용하여 Cloudflare Stream에서 보다 효율적이고 흥미로운 응용 프로그램을 구축하는 모습을 보게 되어 기쁩니다.

Stream에 동영상을 업로드 하거나 API를 사용하여 오디오 추출 기능을 사용해 볼 수 있습니다! 이러한 종류의 기술적 문제를 직접 해결하고 싶다면 Cloudflare의 인턴십과 초기 인재 프로그램을 살펴보고 자신의 여정을 시작해보세요.

Cloudflare에서는 전체 기업 네트워크를 보호하고, 고객이 인터넷 규모의 애플리케이션을 효과적으로 구축하도록 지원하며, 웹 사이트와 인터넷 애플리케이션을 가속화하고, DDoS 공격을 막으며, 해커를 막고, Zero Trust로 향하는 고객의 여정을 지원합니다.

어떤 장치로든 1.1.1.1에 방문해 인터넷을 더 빠르고 안전하게 만들어 주는 Cloudflare의 무료 애플리케이션을 사용해 보세요.

더 나은 인터넷을 만들기 위한 Cloudflare의 사명을 자세히 알아보려면 여기에서 시작하세요. 새로운 커리어 경로를 찾고 있다면 채용 공고를 확인해 보세요.
Internship Experience제품 뉴스Cloudflare Stream (KO)

X에서 팔로우하기

Cloudflare|@cloudflare

관련 게시물

2025년 11월 04일 오후 2:00

다단계 애플리케이션을 위한 지속형 실행 엔진인 Workflows를 위한 더 나은 테스트 환경 구축

Cloudflare Workflows의 엔드투엔드 테스트는 어려웠습니다. cloudflare:test에 최고 수준의 Workflows 지원을 도입합니다. 가장 복잡한 애플리케이션에 대해 완전한 자기 검사, 조롱 및 격리된, 안정적인 테스트가 가능합니다....