기술 ·

영상 트랜스코딩은 어떻게 작동할까요 (그리고 왜 24/7 스트리밍에 중요할까요)

영상 트랜스코딩은 어떻게 작동할까요 (그리고 왜 24/7 스트리밍에 중요할까요)

핵심 요약

  • 트랜스코딩은 영상을 일관된 해상도, 프레임 레이트, 코덱으로 변환해요 — 서로 다른 출처의 파일들이 예측 가능하게 재생되도록 해주는 과정이에요.
  • 24/7 루프는 특히 일관되지 않은 영상에 취약해요. 클립들이 끊임없이 연달아 재생되는데, 이상을 알아채고 고쳐줄 사람이 곁에 없기 때문이에요.
  • 모든 영상을 처음에 한 번만 정규화해 두면 라이브를 시작하는 순간 재인코딩할 필요가 없어요 — 보통 끊김과 충돌은 클립 경계에서 이런 재인코딩 때문에 발생해요.

같은 프로젝트에 휴대폰, 화면 녹화 프로그램, 편집 앱에서 나온 영상들을 업로드해 봤다면 아마 이들이 항상 잘 어우러지지는 않는다는 걸 눈치챘을 거예요 — 해상도가 다르고, 프레임 레이트가 다르고, 때로는 코덱 자체가 완전히 다르기도 해요. 트랜스코딩은 이 문제를 해결하는 단계이고, 특히 24/7 라이브 루프에서는 선택 사항이 아니에요. 몇 달 동안 문제없이 돌아가는 스트림과 특정 클립에 도달할 때마다 끊기는 스트림 사이의 차이를 만드는 게 바로 이거예요.

트랜스코딩이 실제로 의미하는 것

트랜스코딩은 영상 파일을 한 형식에서 다른 형식으로 변환하는 과정이에요 — 보통 해상도(예: 모두 1920x1080으로), 프레임 레이트(모두 30fps로), 코덱(넓은 호환성을 위해 흔히 H.264로)을 정규화해서 모든 파일이 이후 단계에서 똑같이 동작하도록 만들어요. 이건 단순히 "파일 형식을 바꾸는 것"과는 달라요. 두 개의 .mp4 파일이 같은 확장자를 가지고 있어도 내부적으로는 완전히 다른 코덱, 비트레이트, 프레임 레이트를 사용할 수 있어요.

트랜스코딩 없이 24fps 4K 파일 바로 뒤에 60fps 720p 파일을 같은 연속 스트림에서 재생하면, 눈에 보이는 끊김이나 짧은 검은 화면, 심한 경우 인코더 충돌까지 일어날 수 있어요 — 스트림을 송출하는 소프트웨어가 방송 도중에 출력 설정을 다시 협상해야 하기 때문이에요.

이게 단일 영상보다 24/7 루프에서 더 중요한 이유

한 번짜리 업로드는 한 번만 시청되고, 어떤 문제든 단 한 번의 나쁜 시청 경험으로 끝나요. 24/7 루프는 스트림이 실행되는 한 같은 클립들을 끊임없이 연달아 재생해요. 즉:

  • 모든 불일치가 반복돼요. 특정 두 클립 사이의 전환에서 발생하는 끊김은 한 번만 일어나는 게 아니에요 — 루프가 실행되는 한, 플레이리스트가 그 지점에 도달할 때마다 매번 일어나요.
  • 다시 시작해 줄 사람이 아무도 지켜보고 있지 않아요. 24/7 스트림의 전제 자체가 무인으로 운영된다는 거예요. 사람이 지켜보는 스트림이라면 사람이 알아채고 몇 초 만에 고쳤을 충돌이, 무인 스트림에서는 몇 시간이고 멈춘 채로 있을 수 있어요.
  • 플레이리스트는 시간이 지나면서 늘어나요. 더 다양한 출처에서 더 많은 영상을 추가할수록, 형식이 맞지 않는 클립이 적어도 하나쯤 섞여 있을 확률이 누적돼요.

이걸 처리하는 두 가지 방법: 업로드할 때, 또는 Go Live 할 때

트랜스코딩이 일어날 수 있는 시점은 두 가지이고, 그 차이가 중요해요.

  1. 업로드할 때, 한 번만. 라이브러리에 추가되는 순간 모든 영상이 고정된 목표 형식으로 정규화돼요 — 플레이리스트에 들어가기 전에 해상도, 프레임 레이트, 코덱이 확정되는 거예요. 트랜스코딩 비용은 처음 한 번만 지불하고 다시는 지불하지 않아요.
  2. Go Live 할 때, 매번. 방송을 시작할 때마다 스트림이 전체 플레이리스트를 즉석에서 재인코딩해요. 이것도 작동은 하지만, 라이브를 시작할 때마다 매번 트랜스코딩 비용을 지불하고 트랜스코딩 실패의 위험을 감수해야 한다는 뜻이고, 같은 플레이리스트 안의 클립들 간 불일치를 전혀 막아주지 못해요.

Loopcast는 첫 번째 방식을 사용해요. 업로드 직후 각 영상이 백그라운드에서 한 번 정규화되기 때문에, 라이브 루프에 들어갈 즈음에는 릴레이가 즉석에서 재인코딩하는 게 아니라 이미 일관된 클립들을 이어 붙이기만 하면 돼요. 영상의 잘라내기 지점을 수정하면 전체 스트림이 아니라 빠른 재정규화만 일어나는 이유도 이 때문이에요 — 바뀐 클립 하나만 새로 작업하면 되거든요.

실제로는 이런 모습이에요

트랜스코딩은 대체로 눈에 보이지 않아요 — 영상을 업로드하면 백그라운드에서 실행되고, 플레이리스트에 추가할 수 있는 준비 상태로 표시되기 전까지 영상은 짧은 "처리 중" 상태를 보여줘요. 실질적으로 중요한 건 설정해야 할 옵션이 아니에요. 영상이 즉시 스트림 준비가 될 거라 기대하지 말고 론칭 전에 미리 업로드해야 한다는 이유이고, 처음에 한 번 트랜스코딩하는 서비스가 그렇지 않은 서비스보다 길고 무인으로 운영되는 상황에서 더 잘 버텨내는 이유예요.

자주 묻는 질문

트랜스코딩이 영상 화질을 떨어뜨리나요?

제대로 설정된 트랜스코딩은 시청자에게 화질 손실이 보이지 않을 만큼 충분히 높은 비트레이트와 해상도를 목표로 해요. 특히 YouTube 자체도 업로드하거나 스트리밍하는 모든 것을 어차피 다시 압축하기 때문이에요. 여기서 트랜스코딩의 목표는 압축 자체가 아니라 일관성이에요.

새로 업로드한 영상이 왜 바로 준비 상태가 아니라 "처리 중"으로 표시되나요?

트랜스코딩 단계가 실행되고 있는 거예요 — 영상이 백그라운드에서 일관된 형식으로 정규화되고 있어요. 완료되면 영상을 플레이리스트에 추가할 수 있게 돼요.

제 영상 두 개가 이미 같은 해상도와 프레임 레이트라면, 그래도 트랜스코딩이 필요한가요?

보통은 필요해요, 적어도 처음 한 번은요 — 해상도와 프레임 레이트가 일치하는 것은 필요조건이지만 충분조건은 아니에요. 코덱 설정, 키프레임 간격, 오디오 형식은 파일 속성만 봐서는 알 수 없는 방식으로 여전히 다를 수 있어요. 그래서 모든 업로드를 같은 방식으로 정규화하면 시각적으로 비슷해 보이는 것이 완전히 일치한다고 넘겨짚는 위험을 피할 수 있어요.