아티클
썸네일과 연락처 시트용 동영상 프레임 추출
동영상은 정지 이미지의 연속입니다. 그 중 하나를 꺼내면 썸네일, 커버, 또는 연락처 시트가 됩니다. 동영상 코덱이 프레임을 저장하는 방식과 포착할 가치 있는 순간을 이해하면 더 선명하고 예측 가능한 결과를 얻을 수 있습니다.
프레임과 프레임 속도
동영상 파일은 움직임의 착시를 만들기에 충분히 빠르게 표시되는 정지 이미지의 연속입니다. 초당 표시되는 이미지 수가 프레임 속도이며 fps로 표현됩니다. 일반적인 값은 영화의 경우 24 fps, PAL 방송의 경우 25 fps, 웹 동영상의 경우 30 fps, 게임 영상의 경우 60 fps입니다. 24 fps에서 2시간짜리 영화는 약 172,800개의 개별 프레임을 포함합니다. 각 프레임은 시간의 단일 순간에 해당하며, 하나를 추출하면 그 순간이 독립 이미지로 고정됩니다. 프레임 속도는 또한 배치로 추출할 때 영상 1초당 얻는 프레임 수를 결정합니다. 30 fps에서 1분 동영상의 모든 프레임을 추출하면 1,800개의 이미지가 되며, 이는 종종 필요 이상으로 많습니다. 더 낮은 프레임 속도로 추출하거나, 이를 지원하는 도구에서 N번째 프레임마다 추출하는 것은 전체 기간을 커버하면서 이미지 수를 줄이는 실용적인 방법입니다.

키프레임 vs 보간 프레임
현대 동영상 코덱은 모든 프레임을 완전한 이미지로 저장하지 않습니다. 공간 절약을 위해 세 가지 프레임 유형을 사용합니다. I-frame(키프레임이라고도 함)은 완전하고 독립적인 이미지입니다. P-frame은 마지막 I-frame 또는 P-frame 이후에 변경된 픽셀만 저장합니다. B-frame은 이전 프레임과 이후 프레임 모두에 대한 변경 사항을 저장하므로 재구성하려면 양쪽의 참조 프레임이 필요합니다. P-frame이나 B-frame은 독립적으로 불완전하므로 디코딩하려면 주변 참조 프레임이 필요합니다. 이러한 참조 프레임에 모션 블러나 전환이 포함되어 있으면 재구성된 이미지가 그 블러를 이어받습니다. 반면 I-frame은 독립적으로 디코딩됩니다. 이웃에서 아무것도 빌리지 않으므로 항상 선명합니다. 썸네일로 사용할 프레임을 추출할 때 I-frame에 위치하면 가장 깨끗한 결과를 얻습니다. 대부분의 코덱은 장면 전환 지점에 I-frame을 배치하는데, 이는 자연스럽게 선명한 시작점입니다.
올바른 순간 선택
잘 디코딩된 I-frame이라도 포착된 순간이 좋지 않으면 나쁜 썸네일이 될 수 있습니다. 여러 요인이 썸네일 품질을 저하시킵니다. 카메라나 피사체가 프레임 노출 중 빠르게 움직일 때 모션 블러가 발생합니다. 결과적으로 생기는 번짐은 디코딩이 깨끗했더라도 프레임을 흐려 보이게 만듭니다. 디졸브나 페이드 중간에 포착된 전환 프레임에는 두 이미지가 겹쳐져 있어 독립적인 사진으로 사용하기 어렵습니다. 자동 노출이 안정되기 전 장면 초반에 흔한 노출 부족이나 과노출 프레임은 그림자나 하이라이트의 세부 정보를 잃습니다. 최상의 썸네일 프레임은 명확한 동작이나 표정, 좋은 조명, 안정된 카메라가 있는 순간에서 나옵니다. 정확한 타임스탬프를 보여주는 플레이어로 동영상을 탐색하면 추출 전에 그러한 순간을 식별할 수 있습니다. 플레이어에서 일시 정지했을 때 좋아 보이는 프레임은 일반적으로 정지 이미지로 내보낼 때도 좋아 보입니다.

내보내기: 해상도, 형식, N번째 프레임
프레임을 추출할 때 내보내는 이미지는 동영상의 원본 해상도와 일치해야 합니다. 확대하면 보간 아티팩트가 생기고, 축소하면 필요할 수 있는 픽셀을 버립니다. 1080p 동영상은 1920x1080픽셀 이미지를 생성하고, 4K 동영상은 3840x2160을 생성합니다. 형식에 대해서는 PNG가 모든 픽셀을 정확히 보존하며 편집이나 추가 스케일링에 최대 선명도가 필요할 때 올바른 선택입니다. JPEG는 더 작고 미리보기나 공유에 적합하지만 선명한 가장자리 주변에 압축 아티팩트가 생깁니다. 전체 기간을 커버하는 작은 대표 프레임의 격자인 연락처 시트를 만드는 경우, 고정된 프레임 속도로 추출하는 것이 모든 프레임을 뽑아내는 것보다 표준적인 방법입니다. 30 fps 소스에서 초당 1프레임을 요청하면 영상 1초당 이미지 1개가 나오고, 5나 10 fps처럼 더 높은 속도를 쓰면 세밀하게 살펴보기 좋은 더 촘촘한 세트를 얻습니다. 정확한 속도는 필요한 세부 정보 대비 처리할 이미지 수에 따라 달라집니다.
video-extract-frames로 로컬에서 처리하기
Sunasty의 video-extract-frames 도구는 WebAssembly로 컴파일된 FFmpeg을 사용하여 브라우저 내에서 완전히 동영상을 디코딩합니다. 파일을 드롭하고 초당 1~30프레임 사이의 프레임 속도를 선택하고 PNG 또는 JPEG를 선택하면, 도구가 해당 속도로 브라우저 메모리에서 프레임을 디코딩하여 결과를 개별 다운로드로 제공하며, 한 번 실행에 최대 300프레임으로 제한됩니다. 동영상 파일은 기기를 벗어나지 않습니다. 처리 과정 중 어떤 바이트도 서버로 전송되지 않습니다. 이는 개인 또는 민감한 콘텐츠가 포함된 영상에 중요합니다. 가족 녹화, 인터뷰, 편집 전 원본 영상 등이 해당됩니다. 브라우저는 RAM의 가상 파일 시스템에 동영상을 로드하고 FFmpeg 디코딩을 실행한 후 이미지를 반환합니다. 절충점은 전용 하드웨어가 아닌 CPU에서 소프트웨어로 디코딩되므로 긴 고해상도 동영상은 네이티브 애플리케이션보다 시간이 더 걸린다는 것입니다. 몇 개의 프레임을 추출하거나 짧은 클립에서 연락처 시트를 만들기에는 처리 속도가 실용적입니다.
이 아티클의 도구
자주 묻는 질문
추출한 프레임이 왜 흐릿하게 보이나요?
가장 일반적인 원인은 움직임이 있는 순간의 P-frame 또는 B-frame에 위치하는 것입니다. 이러한 프레임은 완전한 이미지가 아닌 차이점을 저장하며, 소스 영상의 모션 블러가 디코딩에 영향을 미칩니다. 더 선명한 결과를 위해 장면 전환이나 주기적인 키프레임에 해당하는 가장 가까운 I-frame을 추출해 보세요.
프레임을 PNG로 내보내야 할까요, JPEG로 내보내야 할까요?
프레임을 편집하거나 확대하거나 압축 아티팩트가 보이는 환경에서 사용할 계획이라면 PNG를 선택하세요. 빠른 공유나 미리보기를 위해 더 작은 파일이 필요하고 약간의 화질 저하가 허용된다면 JPEG를 선택하세요. 고정된 작은 크기로 표시되는 썸네일의 경우, 적당한 품질 설정의 JPEG가 보통 충분합니다.
동영상에서 연락처 시트를 어떻게 만드나요?
단일 타임스탬프가 아니라 다루기 좋은 개수의 스틸 이미지가 나올 만큼 충분히 낮은 프레임 속도를 고르세요. 2분짜리 클립이라면 초당 1프레임으로 약 120개의 프레임이 나오며, 이는 좋은 격자를 고르기에 충분히 촘촘합니다. 어느 쪽이든 한 번 실행의 출력은 최대 300프레임으로 제한됩니다. 오늘은 1 fps보다 더 성긴 속도가 없으므로, 더 성긴 시트가 필요하다면 1 fps로 추출한 다음 최종 격자에 원하는 프레임만 남기세요.