Base64를 동영상으로 변환
Base64 입력
Base64 입력
비디오 미리보기
온라인에서 Base64로 인코딩된 동영상 데이터를 재생 가능한 MP4/WebM/OGG 동영상 파일로 복원합니다. Data URL 접두사 자동 인식을 지원하며 모든 작업은 브라우저 로컬에서 완료되고 동영상 데이터는 서버에 업로드되지 않습니다. 백엔드 API 인터페이스 디버깅, 동영상 인코딩 검증, 프론트엔드 인라인 동영상 복원에 적합하며 디코딩 후 직접 미리보기 재생하고 다운로드할 수 있습니다.
관련 추천
사용 사례
- 백엔드 동영상 인터페이스 디버깅: API가 Base64로 인코딩된 동영상 데이터를 반환할 때 도구에 직접 붙여넣어 빠르게 미리보기하고 프론트엔드 디코딩 코드를 작성하지 않아도 인터페이스 반환이 올바른지 검증 가능
- 동영상 인코딩 출력 검증: FFmpeg 또는 클라우드 트랜스코딩 서비스로 Base64 동영상을 생성한 후 디코딩 재생하여 트랜스코딩 결과가 정상인지 확인하고 인코딩 손상 문제 해결
- 프론트엔드 인라인 동영상 복원: HTML, CSS, JavaScript 내의 Data URL 형식 인라인 동영상(data:video/mp4;base64,...)을 추출하여 볼 수 있는 동영상 파일로 복원
- 동영상 데이터 빠른 검증: 두 개의 Base64 동영상을 디코딩하여 동일한 콘텐츠인지 비교하거나 Base64 전송 중 데이터 손상이 발생했는지 검증
- 짧은 동영상 임시 미리보기: 로컬에 저장할 필요가 없는 짧은 동영상 클립을 도구에서 직접 미리보기 재생하여 콘텐츠를 확인한 후 다운로드 여부 결정
- 크롤러 데이터 분석: 웹 크롤러가 수집한 Base64 인코딩 동영상 데이터를 콘텐츠 심사나 분석을 위해 빠르게 재생 가능한 파일로 복원
- 클라이언트 개발 디버깅: 모바일 앱, 미니프로그램 개발에서 백엔드가 Base64 동영상을 반환할 때 본 도구로 데이터 정확성을 검증한 후 클라이언트 디코딩 개발 진행
- 교육 데모 용도: Base64 인코딩 원리, Data URL 기술, 프론트엔드에서 Blob/URL.createObjectURL 사용법을 설명할 때 온라인 데모 도구로 활용
- 이메일 첨부 파일 미리보기: 일부 이메일 시스템은 첨부 파일을 Base64로 변환하여 삽입하므로 추출 후 빠르게 동영상 콘텐츠를 복원하여 확인 가능
- Bug 재현 지원: 테스트 팀이 동영상 관련 Bug를 보고할 때 Base64 데이터를 제공하면 개발자가 빠르게 동영상을 복원하여 문제 시나리오 재현 가능
이용 방법
- Base64 동영상 데이터 가져오기: API 응답, 로그, HTML 소스, 데이터베이스 등에서 Base64로 인코딩된 동영상 문자열을 복사합니다. Data URL 접두사 유무는 상관없습니다
- 입력 영역에 붙여넣기: 복사한 Base64 텍스트를 도구의 입력 상자에 완전히 붙여넣으면 도구가 data:video/...;base64, 접두사 포함 여부를 자동 인식합니다
- 형식 확인 또는 선택: 입력에 Data URL 접두사가 포함되어 있으면 도구가 MIME 타입을 자동 인식합니다; 순수 Base64인 경우 해당하는 동영상 형식(MP4/WebM/OGG)을 수동 선택
- 디코딩 버튼 클릭: 디코딩 버튼을 클릭하면 도구가 브라우저 로컬에서 Base64 디코딩, Uint8Array 변환, Blob 생성 등의 작업을 수행하며 처리 중 상태 메시지가 표시됩니다
- 동영상 정보 확인: 디코딩 완료 후 파일 크기, MIME 타입, 형식 확인 등 동영상 기본 정보를 표시하여 디코딩이 성공했는지 검증
- 동영상 미리보기 재생: 페이지 내장 HTML5 플레이어로 동영상을 미리보고 진행 바를 드래그하여 동영상 콘텐츠가 완전한지, 화면과 소리가 정상인지 확인
- 동영상 파일 다운로드: 동영상에 문제가 없으면 다운로드 버튼을 클릭하여 Blob 동영상을 로컬에 저장합니다. 파일에 올바른 확장자(.mp4/.webm/.ogg)가 자동으로 부여됩니다
주요 기능
- 입력 형식 스마트 인식: 순수 Base64 인코딩과 완전한 Data URL 형식(data:video/...;base64, 접두사)을 자동 감지하여 수동으로 접두사를 제거하지 않아도 디코딩 가능
- 다중 형식 동영상 지원: MP4(video/mp4), WebM(video/webm), OGG(video/ogg) 등 주요 브라우저가 네이티브로 지원하는 동영상 MIME 타입을 완벽 지원
- 브라우저 로컬 처리: 모든 Base64 디코딩, Blob 생성, 동영상 미리보기 작업이 사용자 브라우저 내에서 JavaScript로 수행되며 동영상 데이터는 어떤 서버에도 업로드되지 않음
- 즉각적인 미리보기 재생: 디코딩 후 HTML5 video 플레이어가 자동 생성되어 재생, 일시정지, 진행 바 드래그, 볼륨 조절, 전체 화면 등 완전한 재생 컨트롤 지원
- 원본 파일 다운로드: 한 번의 클릭으로 디코딩된 동영상을 로컬 파일로 저장하고 MIME 타입에 따라 올바른 파일 확장자(.mp4/.webm/.ogg)를 자동 선택
- 자동 MIME 타입 감지: Data URL 접두사에서 동영상 형식을 자동 인식하므로 사용자가 수동으로 선택할 필요 없음; 순수 Base64 입력 시 수동으로 형식 지정 가능
- 실시간 디코딩 진행률 피드백: 대용량 Base64 데이터 디코딩 시 처리 상태를 표시하여 사용자가 페이지가 멈췄다고 오인하는 것을 방지
- 동영상 메타 정보 표시: 디코딩 후 동영상 크기, MIME 타입, 길이(재생 가능 시), 해상도 등 기본 정보 표시
- 오류 진단 메시지: 입력 형식 오류, Base64 인코딩 손상, 지원되지 않는 동영상 형식 시 명확한 오류 메시지와 해결 방법 제시
- 드래그 앤 드롭 및 붙여넣기 지원: Base64 텍스트 직접 붙여넣기, 텍스트 파일을 입력 영역으로 드래그 앤 드롭하여 디버깅 효율 향상
- 인코딩 문제 자동 복구: Base64 패딩 문자(=) 누락, 공백 문자, 줄바꿈 문자 등 일반적인 형식 문제 자동 처리
- 크로스 브라우저 호환: Chrome, Firefox, Safari, Edge 등 모든 현대 브라우저를 지원하며 표준 atob 및 Uint8Array API 사용
- 반응형 디자인: 데스크톱과 모바일 사용을 지원하며 휴대폰과 태블릿에서도 짧은 동영상을 정상적으로 디코딩하고 미리보기 가능
- 프라이버시 안전 보장: 동영상 데이터가 완전히 로컬 메모리에서 처리되며 페이지를 닫으면 데이터가 즉시 삭제되어 캐시나 기록이 남지 않음
자주 묻는 질문
Base64→동영상 변환 도구는 어떤 동영상 형식을 지원하나요?
브라우저가 네이티브로 재생 가능한 주요 동영상 형식을 지원합니다: MP4(video/mp4, H.264+AAC 인코딩), WebM(video/webm, VP8/VP9+Vorbis/Opus 인코딩), OGG(video/ogg, Theora+Vorbis 인코딩). 그 중 MP4 형식이 호환성이 가장 좋아 모든 현대 브라우저와 모바일 장치에서 지원되므로 우선 사용을 권장합니다. 동영상이 다른 형식(MOV, AVI, MKV 등)인 경우 먼저 FFmpeg로 MP4(H.264+AAC)로 트랜스코딩한 후 Base64 인코딩해야 합니다.
입력에 data:video/mp4;base64 접두사가 필요한가요?
필요하지 않습니다. 도구는 두 가지 입력 형식을 지원합니다: ①순수 Base64 문자열(접두사 없음); ②완전한 Data URL(data:video/xxx;base64, 접두사 포함). 도구는 입력에 접두사 포함 여부를 자동 감지하여 있으면 자동으로 Base64 콘텐츠를 추출하고 MIME 타입을 인식합니다. API가 반환하는 전체 내용을 그대로 복사하면 되며 수동으로 접두사를 처리할 필요가 없습니다.
디코딩 후 동영상을 브라우저에서 직접 재생할 수 있나요?
예, 가능합니다. 디코딩 완료 후 도구는 내장 HTML5 동영상 플레이어를 생성하여 재생/일시정지, 진행 바 조작, 볼륨 조절, 전체 화면 재생 등 완전한 기능을 지원합니다. 페이지에서 직접 동영상 콘텐츠를 미리보고 화면과 소리가 정상인지 확인한 후 로컬에 다운로드할지 결정할 수 있습니다.
대용량 Base64 동영상도 처리할 수 있나요? 크기 제한이 있나요?
도구 자체에는 엄격한 크기 제한이 없지만 브라우저에는 메모리와 성능 제한이 있습니다. Base64 인코딩은 동영상 크기를 약 33% 증가시키며 디코딩 중 브라우저는 Base64 문자열, 이진 문자열, Uint8Array, Blob 등 여러 복사본을 저장하기 위해 메모리를 할당해야 하여 피크 메모리 사용량은 원본 동영상 크기의 3-5배가 될 수 있습니다. 5MB 이내의 Base64(원본 동영상 약 3.7MB 해당)이면 비교적 원활하게 처리할 수 있지만 10MB를 초과하는 Base64는 페이지 프리징을 유발할 수 있습니다. 큰 동영상에는 Base64 방식은 권장되지 않으며 기존 파일 업로드와 URL 로드 방식을 권장합니다.
동영상 데이터가 서버에 업로드되나요? 프라이버시는 안전한가요?
모든 디코딩 작업은 완전히 귀하의 브라우저 로컬에서 JavaScript로 수행되며 동영상 데이터가 어떤 서버에도 업로드되지 않고 네트워크 요청도 전송되지 않습니다. 페이지를 닫으면 동영상 데이터는 브라우저 메모리에서 즉시 삭제되어 캐시나 기록이 남지 않습니다. 네트워크를 연결 해제한 상태에서도 본 도구를 사용할 수 있으며 디코딩 기능은 정상 작동합니다.
왜 Base64 인코딩 후 동영상이 원본 파일보다 1/3 커지나요?
이것은 Base64 인코딩 원리에 의한 것이지 도구의 문제가 아닙니다. Base64는 3바이트(24비트)의 이진 데이터를 4개의 ASCII 문자(각 문자는 1바이트 차지)로 다시 인코딩하므로 인코딩 후 크기는 원래의 4/3≈133%가 되어 크기가 약 33% 증가합니다. 원본 데이터 길이가 3의 배수가 아니면 끝에 = 기호로 패딩되므로 실제 크기 증가는 약 33%-37%입니다. 이 크기 증가는 모든 Base64 인코딩의 공통 특성이며 본 도구의 문제가 아닙니다.
왜 제 MP4 Base64는 디코딩 후 재생이 안 되나요?
MP4는 컨테이너 형식일 뿐 내부의 동영상 인코딩이 브라우저가 지원하는 형식이어야 재생할 수 있습니다. 99%의 경우는 동영상 인코딩이 H.264가 아니거나 오디오 인코딩이 AAC가 아니기 때문입니다. 예를 들어 MP4 안에 H.265(HEVC), AV1 등 인코딩이 담겨 있으면 브라우저가 재생하지 못할 수 있습니다. FFmpeg 명령 ffmpeg -i input.mp4로 인코딩 정보를 확인할 수 있습니다. H.264+AAC가 아니면 명령 ffmpeg -i input.mp4 -c:v libx264 -c:a aac -movflags +faststart output.mp4로 트랜스코딩한 후 Base64 인코딩하세요. 또한 MIME 타입이 video/mp4로 설정되어 있는지, Base64 데이터가 완전하고 잘리지 않았는지도 확인하세요.
제 동영상 인코딩이 브라우저 호환인지 확인하려면 어떻게 하나요?
FFmpeg 도구로 검증하는 것을 권장합니다: FFmpeg 설치 후 ffmpeg -i yourvideo.mp4를 실행하여 출력 정보의 Video 행과 Audio 행을 확인합니다. Video 행에는 h264(또는 avc)가 포함되고 Audio 행에는 aac가 포함되어야 합니다. 예: Stream #0:0(eng): Video: h264 (avc1/0x31637661...), Stream #0:1(eng): Audio: aac (mp4a/0x6134706D...). 이 두 인코딩이 아니면 트랜스코딩이 필요합니다. 또는 원본 동영상 파일을 Chrome 브라우저 창에 직접 드래그하여 직접 재생되면 인코딩이 브라우저 호환입니다.
디코딩 후 다운로드되는 동영상 파일 확장자는 무엇인가요?
도구는 귀하가 선택한(또는 자동 인식한) MIME 타입에 따라 올바른 파일 확장자를 자동으로 매칭합니다: video/mp4는 .mp4, video/webm는 .webm, video/ogg는 .ogv에 대응합니다. 수동으로 확장자를 변경할 필요가 없으며 다운로드한 파일은 시스템 기본 플레이어로 직접 열 수 있습니다.
Base64 문자열 내 줄바꿈과 공백은 디코딩에 영향을 주나요?
영향을 주지 않습니다. 도구는 Base64 문자열 내 줄바꿈(\n), 캐리지 리턴(\r), 공백, 탭 등 공백 문자를 자동으로 처리하여 디코딩 전에 이러한 문자를 제거합니다. 그래서 귀하의 Base64가 여러 줄 형식(76자마다 줄바꿈되는 MIME 형식 등)이어도, 복사 시 조판 공백이 섞여도 정상적으로 디코딩할 수 있습니다.
프론트엔드에서 JavaScript를 사용하여 Base64를 동영상으로 변환하려면 어떻게 하나요?
핵심 코드 로직은 다음과 같습니다: ①Data URL 접두사를 제거하여 순수 Base64 획득; ②atob(base64Str)로 이진 문자열로 디코딩; ③이진 문자열을 Uint8Array로 변환(각 문자를 순회하여 charCode 획득); ④new Blob([uint8Array], {type: 'video/mp4'})로 Blob 생성; ⑤URL.createObjectURL(blob)로 임시 URL 생성; ⑥video.src에 URL 설정. 사용 후에는 URL.revokeObjectURL(url)을 호출하여 메모리를 해제하여 메모리 누수를 피하세요.
Data URL 동영상과 Blob URL 동영상의 차이는 무엇인가요?
Data URL은 완전한 Base64 데이터를 URL 안에 직접 기술하며 형식은 data:video/mp4;base64,XXXX로 URL 자체에 모든 데이터가 포함됩니다; Blob URL은 URL.createObjectURL()로 생성되는 blob:// 형식의 임시 참조로 브라우저 메모리 내 Blob 객체를 가리키며 URL 자체는 짧고 데이터는 포함하지 않습니다. Data URL은 사용할 때마다 Base64 문자열 전체를 파싱해야 해서 성능이 떨어집니다; Blob URL은 더 효율적이며 재생과 재사용에 적합합니다. 본 도구는 내부적으로 Blob URL 방식을 사용하여 플레이어를 구현합니다.
어떤 시나리오가 Base64 인코딩 동영상에 적합하고 어떤 시나리오가 적합하지 않나요?
적합한 시나리오: ①수 MB 이내의 짧은 동영상(로딩 애니메이션, 가이드 힌트, 아이콘 애니메이션); ②동영상을 단일 HTML 파일에 삽입해야 하는 Demo/문서; ③이메일 삽입 작은 동영상; ④API 인터페이스 디버깅 시 임시로 작은 동영상을 전송하는 경우. 적합하지 않은 시나리오: ①5MB를 초과하는 동영상(크기가 33% 팽창하여 대역폭이 낭비됨); ②사용자가 업로드한 동영상(크기 제어 불가); ③스트리밍 로딩이나 시크가 필요한 긴 동영상; ④브라우저에 캐시되어 재사용되어야 하는 동영상(Data URL은 개별 캐시할 수 없음); ⑤프로덕션 환경의 최종 사용자 대상 동영상 콘텐츠(CDN과 외부 파일 URL을 사용해야 함).
왜 동영상 디코딩 후 Safari에서는 정상 재생되는데 Chrome에서는 재생이 안 되나요?
이 경우는 비교적 드물지만 보통 동영상 인코딩이 H.265(HEVC)이기 때문입니다——Safari는 macOS와 iOS에서 H.265 지원이 좋지만(하드웨어 가속 있음) Chrome과 Firefox의 H.265 지원은 제한적입니다(하드웨어와 라이선스 필요). 해결 방법은 H.264 인코딩으로 트랜스코딩하는 것입니다. 이것은 모든 브라우저가 지원하는 범용 인코딩입니다. 반대로 Chrome에서 재생되고 Safari에서 재생되지 않는 경우가 더 일반적이며 보통 인코딩 Profile/Level이 너무 높거나 moov atom이 파일 끝에 있기 때문입니다.
Base64 동영상과 동영상 파일 상호 변환 시 화질이 저하되나요?
화질은 저하되지 않습니다. Base64는 인코딩 방식일 뿐 압축이나 트랜스코딩이 아니라 이진 데이터와 텍스트 문자열을 1:1 매핑하는 변환일 뿐입니다. 동영상을 Base64로 변환한 후 디코딩하여 되돌리면 얻어지는 이진 데이터는 원본 동영상 파일과 완전히 일치하며(바이트 단위로 동일) 화질이나 음질 저하는 전혀 없습니다. 이것은 압축 변환이 아니라 파일 복사 붙여넣기와 비슷합니다. Base64 인코딩과 디코딩 과정이 올바르면 동영상 품질은 원본 파일과 완전히 동일합니다.
문제 해결
Base64 디코딩 후 동영상이 재생되지 않고 HTML5 video에 형식 미지원 또는 검은 화면이 표시됨
MIME 타입 설정 오류: MP4 동영상에 video/webm을 설정하는 등 일치하지 않는 타입 설정 동영상 인코딩이 브라우저가 지원하는 형식이 아님: 예를 들어 MP4 안이 H.264가 아니라 H.265 인코딩으로 되어 있음 Base64 데이터가 복사 중에 잘려 시작 또는 끝 부분이 누락되어 파일 손상 Data URL 접두사 처리 오류: 접두사도 Base64로 디코딩하고 있거나 접두사 제거 시 Base64 첫 문자를 실수로 삭제함 원본 동영상 자체가 손상되었거나 브라우저가 지원하지 않는 특수 형식임 동영상 해상도가 브라우저 제한을 초과하거나 브라우저가 지원하지 않는 픽셀 형식(10-bit YUV 등) 사용 동영상 파일 헤더(ftyp atom)가 손상되어 브라우저가 MP4 컨테이너 형식을 인식하지 못함
atob() 함수가 InvalidCharacterError를 발생시켜 디코딩 실패
Base64 문자열에 잘못된 문자 포함: Base64 표준 문자셋은 A-Z, a-z, 0-9, +, /, = 65개 문자뿐입니다 Data URL 접두사 data:video/mp4;base64,가 제거되지 않고 그대로 atob()에 전달됨 문자열에 줄바꿈\n, 캐리지 리턴\r, 공백, 탭 등 공백 문자가 섞여 있음 Word/웹 페이지 등에서 복사할 때 한글 문장 부호, 전각 문자 또는 보이지 않는 특수 문자가 유입됨 Base64 문자열이 URL 인코딩됨(더하기+가 %2B로, 슬래시/가 %2F로 됨)되어 먼저 URL 디코딩 필요 Base64 문자열 길이가 4의 배수가 아니고 패딩 문자=가 누락되어 atob 검증 실패 일부 백엔드 언어(Java, Python 등)의 Base64 인코더가 URL 안전 변형을 사용함(+와 / 대신 -와 _ 사용)
Chrome/Firefox에서는 동영상이 정상 재생되지만 Safari에서는 재생되지 않음
Safari의 H.264 인코딩 Profile과 Level 요구 사항이 더 엄격하여 High Profile Level 5.1 등 고급 설정은 지원되지 않을 수 있음 MP4 파일의 moov atom(메타데이터)이 파일 끝이 아니라 시작 부분에 있어 Safari가 모두 다운로드할 때까지 기다려야 재생 가능 오디오 인코딩이 AAC가 아니고 Safari가 MP4 컨테이너 내 MP3 등 다른 오디오 지원이 충분하지 않음 동영상 해상도 또는 비트레이트가 너무 높아 Safari(특히 iOS Safari)의 하드웨어 디코딩 능력 초과 Safari가 지원하지 않는 인코딩 기능(10-bit 색 심도, 일부 H.264 기능 등) 사용 iOS Safari에서는 동영상을 인라인 재생하려면 playsinline 속성 설정이 필요하며 그렇지 않으면 전체 화면이 되거나 재생되지 않음 Safari에는 오디오 트랙 샘플 레이트 요구 사항이 있어 비표준 샘플 레이트(44.1kHz/48kHz 외 등)는 재생 실패로 이어질 수 있음
대용량 Base64 동영상 디코딩 시 페이지가 프리징, 브라우저 크래시됨
JavaScript는 단일 스레드라 atob()와 Uint8Array 변환이 메인 스레드에서 실행되어 UI 렌더링을 블로킹 Base64 디코딩 중 여러 큰 문자열과 배열이 생성되어 메모리 사용량이 높아짐(10MB Base64 디코딩 시 피크 메모리는 수십 MB에 달할 수 있음) Blob과 Object URL 생성에도 메모리가 필요하여 큰 동영상은 브라우저 메모리 제한을 트리거하기 쉬움 모바일 장치는 메모리가 더 작아 OOM(메모리 부족) 크래시가 발생하기 쉬움 Web Worker를 사용하지 않아 모든 작업이 메인 스레드에서 수행되어 이벤트 루프를 블로킹 브라우저에는 단일 문자열 길이에 제한이 있어(V8 엔진은 약 512MB~1GB) 초장 Base64 문자열은 올바르게 파싱되지 않을 수 있음 디코딩 중 빈번한 가비지 컬렉션(GC)도 페이지 프리징과 응답 지연 유발
API 응답에서 복사한 Base64를 디코딩하면 동영상이 손상되어 재생되지 않음
백엔드가 Base64를 반환할 때 특수 문자를 자동 이스케이프함(+가 공백이 되는 등, JSON 이스케이프 문제 등) JSON 파싱 시 Base64 문자열 내 특수 문자가 올바르게 처리되지 않음 백엔드 Base64 인코딩 시 인코딩 오류가 발생하여 이진 데이터를 UTF-8 문자열로 처리함 gzip 압축 또는 HTTP 전송 중 데이터가 변조됨 Chrome DevTools에서 복사할 때 Network 패널 Response 미리보기가 긴 문자열을 자르거나 이스케이프할 수 있음 백엔드가 다른 Base64 변형(URL 안전 Base64, +와 / 대신 -와 _ 사용)을 사용하는데 프론트엔드에서 처리하지 않음 API 응답이 페이지네이션되거나 잘려 Base64 데이터가 불완전함
동영상 화면은 나오는데 소리가 안 나거나 소리와 화면이 동기화되지 않음
오디오 인코딩이 브라우저에서 지원되지 않음: 예를 들어 MP4 안에서 AAC가 아니라 MP3나 Opus를 사용함 동영상 트랜스코딩 시 오디오 매개변수 설정이 부적절하여 타임스탬프(PTS/DTS) 오류 발생 Base64 데이터가 불완전하여 오디오 트랙의 일부 데이터가 마침 잘림 동영상이 가변 프레임 레이트(VFR)로 일부 브라우저가 VFR 동영상 지원이 미흡하여 소리와 화면이 동기화되지 않음 원본 동영상 자체에 소리와 화면 동기화 문제가 있으며 Base64 디코딩으로 인한 것이 아님 오디오 샘플 레이트 또는 채널 수가 브라우저에서 지원되지 않아 오디오 트랙 디코딩 실패 동영상 컨테이너 내 오디오 트랙과 동영상 트랙의 타임베이스(timebase)가 일치하지 않아 재생 시 동기화 오프셋 발생
용어집
- Base64
- 64개의 인쇄 가능한 문자를 사용하여 이진 데이터를 표현하는 인코딩 방식으로, 3바이트의 이진 데이터를 4바이트의 ASCII 텍스트로 인코딩하여 크기를 약 33% 증가시킵니다. 텍스트 프로토콜에서 이진 데이터를 전송할 때 자주 사용됩니다.
- Data URL
- RFC 2397에 정의된 URI 체계로 형식은 data:[mediatype][;base64],data입니다. 작은 파일을 문서에 직접 삽입할 수 있어 추가 HTTP 요청이 필요 없습니다.
- MIME 타입
- 미디어 타입 식별자. 문서 또는 파일의 형식을 나타내는 데 사용되며 동영상 형식은 video/로 시작합니다. 예: video/mp4, video/webm, video/ogg. 브라우저는 MIME 타입에 따라 리소스 처리 방법을 결정합니다.
- Blob
- Binary Large Object(바이너리 라지 오브젝트). 브라우저에서 불변의 원시 이진 데이터를 나타내는 객체로 동영상, 이미지 등 파일 데이터를 저장하는 데 사용할 수 있습니다. URL.createObjectURL()로 접근 가능한 URL을 생성합니다.
- atob()
- 브라우저 내장 함수. Base64로 인코딩된 문자열을 이진 문자열로 디코딩합니다(ASCII to Binary). 해당 인코딩 함수는 btoa()(Binary to ASCII)입니다.
- btoa()
- 브라우저 내장 함수. 이진 문자열을 Base64 문자열로 인코딩합니다(Binary to ASCII). atob()의 역작업으로 동영상을 Base64로 변환할 때 사용합니다.
- Uint8Array
- JavaScript 타입이 있는 배열. 8비트 부호 없는 정수(0-255)를 저장하며 각 요소는 1바이트에 해당합니다. 이진 데이터를 처리하는 표준 방식이며 Base64 디코딩 후 Uint8Array로 변환한 다음 Blob을 생성해야 합니다.
- MP4
- MPEG-4 Part 14. 일반적인 멀티미디어 컨테이너 형식으로 보통 H.264 동영상 인코딩과 AAC 오디오 인코딩을 담습니다. 웹 호환성이 가장 좋으며 파일 확장자는 .mp4입니다.
- WebM
- Google이 출시한 오픈소스 로열티 프리 동영상 컨테이너 형식. 보통 VP8/VP9/AV1 동영상 인코딩과 Vorbis/Opus 오디오 인코딩을 사용하며 압축률은 MP4보다 우수합니다. Chrome/Firefox/Edge에서 잘 지원됩니다.
- OGG
- Xiph 재단이 개발한 오픈소스 멀티미디어 컨테이너 형식. 동영상은 보통 Theora로 인코딩되고 오디오는 Vorbis로 인코딩됩니다. 현재 점차 WebM으로 대체되고 있으며 파일 확장자는 .ogv입니다.
- H.264/AVC
- 현재 가장 널리 사용되는 동영상 인코딩 표준. AVC(Advanced Video Coding)라고도 하며 압축률과 품질의 균형이 우수하고 하드웨어 가속을 지원합니다. MP4 컨테이너의 표준 동영상 인코딩이며 모든 브라우저와 호환됩니다.
- AAC
- Advanced Audio Coding. 고급 오디오 인코딩. MP4 컨테이너의 표준 오디오 인코딩이며 MP3 형식의 후속입니다. 동일 품질에서 파일 크기가 더 작고 모든 현대 브라우저에서 지원됩니다.
- Object URL
- URL.createObjectURL(blob)로 생성되는 임시 URL. 형식은 blob://...이며 video/img 등 태그의 src 속성에 직접 사용할 수 있고 메모리 내 Blob 데이터를 가리킵니다. 사용 후에는 revokeObjectURL로 해제해야 합니다.
- FFmpeg
- 오픈소스 오디오/동영상 처리 도구. 동영상 트랜스코딩, 편집, 인코딩 정보 확인, 압축 등의 작업에 사용할 수 있으며 동영상 처리의 업계 표준 도구입니다. 동영상 인코딩 검증과 변환에 필수적입니다.
- moov atom
- MP4 파일 내의 메타데이터 원자. 동영상 길이, 해상도, 인코딩 정보, 디코딩 매개변수 등 중요한 데이터가 포함되어 있습니다. moov가 파일 시작 부분에 있어야 빠르게 재생할 수 있으므로 웹 동영상은 시작 부분에 배치하는 것이 좋습니다(faststart).
- 컨테이너 형식
- 동영상 스트림, 오디오 스트림, 자막, 메타데이터를 담는 파일 형식. 예: MP4, WebM, OGG, MKV. 컨테이너 형식은 인코딩 형식과 같지 않으며 같은 컨테이너에 다른 인코딩을 담을 수 있습니다.
- 동영상 인코딩
- 동영상 데이터를 압축하고 압축 해제하는 알고리즘. 일반적인 것에는 H.264, H.265(HEVC), VP8, VP9, AV1이 있습니다. 인코딩은 압축률과 화질을 결정하며 브라우저가 지원하는 인코딩에 따라 동영상 재생 여부가 결정됩니다.
- API 디버깅
- 프론트엔드/백엔드 인터페이스 개발 시 데이터 정확성을 검증하는 프로세스. 본 도구는 API가 반환하는 Base64 동영상 데이터가 올바른지 프론트엔드 디코딩 코드를 작성하지 않고 빠르게 미리보는 데 사용할 수 있습니다.
- Chrome DevTools
- Chrome 브라우저에 내장된 개발자 도구. Network 패널에서 API 요청과 응답을 확인할 수 있으며 거기서 Base64 동영상 데이터를 복사하여 디버깅에 사용할 수 있습니다.
- 패딩 문자 =
- Base64 인코딩 끝에 1개 또는 2개의 등호가 나타날 수 있으며 인코딩 결과 길이를 4의 배수로 패딩하는 데 사용됩니다. 디코딩 시 패딩이 누락되면 오류가 발생할 수 있지만 도구가 패딩 문제를 자동으로 복구할 수 있습니다.
웹 동영상 MIME 타입과 호환성 대조표
| MIME 타입 | 컨테이너 형식 | 일반적인 동영상 인코딩 | 일반적인 오디오 인코딩 | 브라우저 호환성 | 파일 확장자 |
|---|---|---|---|---|---|
| video/mp4 | MP4 (MPEG-4 Part 14) | H.264/AVC, H.265/HEVC, AV1 | AAC, MP3 | 모든 현대 브라우저(Chrome/Firefox/Safari/Edge/iOS/Android), H.264+AAC 조합은 100% 호환 | .mp4, .m4v |
| video/webm | WebM | VP8, VP9, AV1 | Vorbis, Opus | Chrome/Firefox/Edge/Opera 완전 지원, Safari 14.1+ 지원, iOS Safari 15+ 부분 지원 | .webm |
| video/ogg | Ogg | Theora | Vorbis | Firefox/구 버전 Chrome/Opera 지원, Safari 미지원, 현재 사용 적음 | .ogv, .ogg |
| video/quicktime | QuickTime (MOV) | ProRes, H.264 | AAC, PCM | 주로 Safari/macOS 지원, 다른 브라우저는 호환성 낮음 | .mov |
| video/x-matroska | Matroska | H.264, VP9, AV1, 등 | 다양한 인코딩 | 브라우저 네이티브 지원이 낮아 보통 서드파티 플레이어 필요, 웹 사용 비추천 | .mkv |
Base64 동영상 디코딩 일반 오류 코드와 해결책
| 오류 현상/오류 메시지 | 가능한 원인 | 해결 방향 | 해결책 |
|---|---|---|---|
| atob() 오류: InvalidCharacterError 또는 "not correctly encoded" | Base64 문자열에 잘못된 문자 포함; Data URL 접두사가 제거되지 않음; 공백 문자/줄바꿈 문자 존재 | 입력 문자열이 A-Za-z0-9+/=만 포함하는지 확인; data: 접두사를 제거했는지 확인 | data:video/...;base64, 접두사 제거; 모든 줄바꿈, 공백, 탭 제거; 한글이나 특수 문자가 섞여 있지 않은지 확인 |
| 디코딩 성공이지만 동영상이 재생되지 않고 "지원되지 않는 동영상 형식"이라고 표시됨 | MIME 타입 오류; 동영상 인코딩이 브라우저에서 지원되지 않음; 파일 헤더 손상 | MIME 타입이 동영상 실제 형식과 일치하는지 확인; FFmpeg로 인코딩 정보 확인 | 올바른 MIME 타입 선택(MP4는 video/mp4); FFmpeg로 H.264+AAC(MP4)로 트랜스코딩; Base64 시작과 끝이 완전한지 확인 |
| 동영상 화면은 나오는데 소리가 안 나거나 소리는 나는데 화면이 안 나옴 | 오디오 인코딩 또는 동영상 인코딩 중 하나가 브라우저에서 지원되지 않음; 오디오 트랙 또는 동영상 트랙 손상 | FFmpeg로 동영상에 포함된 스트림과 해당 인코딩 확인 | MP4는 H.264 동영상+AAC 오디오여야 함; WebM은 VP8/VP9+Vorbis/Opus 사용; 표준 호환 형식으로 다시 트랜스코딩 |
| 동영상 화면이 블록 노이즈, 그린 스크린, 모자이크가 됨 | Base64 데이터 불완전(잘림); 디코딩 중 데이터 손상; 키 프레임 누락 | 원본 Base64 길이와 비교하여 완전히 복사되었는지 확인 | 완전한 Base64 문자열 다시 복사; 전송 중 문자가 손실되지 않았는지 확인; 원본 동영상 파일 자체가 정상인지 검증 |
| 디코딩 후 동영상 크기가 원본 파일과 일치하지 않음 | Base64 패딩 문자= 처리 오류; 이진 문자열에서 Uint8Array로 변환 시 인코딩 문제 | 디코딩 로직이 패딩을 올바르게 처리하는지 확인; charCodeAt 범위가 0-255인지 확인 | Base64 끝의 = 기호가 올바르게 처리되었는지 확인; Uint8Array 변환 로직이 올바른지 확인 |
| 큰 동영상 디코딩 시 페이지가 프리징되어 응답하지 않음 | Base64 디코딩이 메인 스레드에서 실행되어 UI를 블로킹; 동영상이 너무 커서 메모리 제한 초과 | Base64 데이터 크기 확인. 10MB 이상 Base64(원본 동영상 약 7.5MB)는 프리징 가능성 있음 | 큰 동영상에는 Base64 사용하지 않음; Web Worker 백그라운드 디코딩 고려; 청크 처리; 파일 업로드 방식으로 변경 |
| Safari에서 디코딩은 되는데 재생이 안 되고 Chrome에서는 정상 | Safari의 동영상 인코딩 요구 사항이 더 엄격; moov atom이 파일 시작 부분에 없음; 인코딩 Profile/Level이 너무 높음 | FFmpeg로 H.264 Profile과 Level 확인; moov 위치 확인 | 트랜스코딩 시 -movflags +faststart 추가; H.264 Baseline/Main Profile, Level 4.1 이하 사용; AAC 오디오인지 확인 |
| Data URL을 직접 video src에 설정해도 재생되지 않음 | Data URL 형식 오류; MIME 타입 오타; Base64 부분 손상 | Data URL 형식이 data:video/xxx;base64,xxxx인지 확인 | MIME 타입이 올바른지 확인; 쉼표는 영문 쉼표; Base64 부분 완전; 일부 모바일은 Data URL 크기에 제한 있음 |
원본 동영상 크기와 Base64 인코딩 후 크기 비교표
| 원본 동영상 크기 | Base64 인코딩 후 크기(약) | 크기 증가 | Data URL 헤더 오버헤드 | 인라인 사용에 적합한지 | 대표적인 시나리오 |
|---|---|---|---|---|---|
| 100 KB | ~133 KB | +33% | 약 20바이트 | 권장 | 극소 아이콘 애니메이션, 수 초의 무음 로딩 애니메이션 |
| 500 KB | ~667 KB | +33% | 약 20바이트 | 권장 | 짧은 루프 애니메이션, 작업 힌트 짧은 동영상, 버튼 피드백 애니메이션 |
| 1 MB | ~1.33 MB | +33% | 약 20바이트 | 상황에 따라 | 5-10초 가이드 동영상, 저해상도 데모 애니메이션, 첫 화면 성능 주의 |
| 2 MB | ~2.67 MB | +33% | 약 20바이트 | 비권장 | 인라인 동영상 크기 상한에 가까워 페이지 로딩 시간 크게 증가 |
| 5 MB | ~6.67 MB | +33% | 약 20바이트 | 비권장 | 크기가 너무 커 Base64 인라인은 비권장, 외부 동영상 파일 사용 |
| 10 MB | ~13.3 MB | +33% | 약 20바이트 | 금지 | 페이지 로딩에 심각한 영향을 미치고 모바일에서 메모리 부족 크래시 유발 가능 |
| 50 MB | ~66.7 MB | +33% | 약 20바이트 | 금지 | 이 크기의 동영상을 Base64로 처리하는 것은 절대 피해야 하며 파일 업로드/로드 방식을 사용해야 함 |
- 텍스트 비교
- 바이너리 변환
- 시저 암호
- 모스 부호
- 16진수 변환
- 비디오를 Base64로 변환
- Base64를 동영상으로 변환
- 이미지를 Base64로 변환
- Base64 이미지 변환
- 텍스트를 Base64로 변환
- Base64 텍스트로 변환
- 파일 해시 검증
- File to Base64
- Base64 파일로 변환
- 오디오 → Base64
- Base64를 오디오로 변환
- AES 암호화 및 복호화
- DES 암호화/복호화
- Base32 인코더 디코더
- Base58 인코딩 및 디코딩
- Base64 인코딩
- Base64 디코드
- Base64 비교
- Base64 분할
- Base64 여러 줄 병합
- Base64 형식화
- Base64 형식 검사
- Base64 일괄 인코딩
- Base64 일괄 디코딩
- Base64 정리
- Base64 패딩 처리
- Base64 길이 통계
- Base64 16진수로 변환
- Base64 DataURL 변환
- Base64-Hex 양방향 변환
- Base85 인코딩/디코딩
- HMAC 생성 및 검증
- PBKDF2 키 파생
- MD5 해시값
- SHA-256 해시
- SHA1 해시
- SHA512 해시
- JWT 도구
- HTML 엔티티 인코딩/디코딩
- Unicode 이스케이프
- URL 인코딩
- URL Safe Base64
- MIME Base64
- Java 난독화
- JS 난독화
- PHP 난독화
- Python 난독화