1. 움직임을 만들기 전에 정보형과 장식형을 구분합니다
실제 분석형 visualizer는 특정 시점의 오디오 값이 화면 변화에 영향을 주며, 같은 원본과 설정으로 다시 만들 수 있어야 합니다. 장식형은 음악과 함께 보이지만 실제 파형·스펙트럼·level을 나타내지 않는 animation입니다. 두 형식 모두 사용할 수 있지만 장식형을 실제 측정 화면처럼 설명해서는 안 됩니다.
정보형으로 정했다면 원본 파일, hash, duration, sample rate, channel layout과 분석 구현을 먼저 잠급니다. Web Audio의 AnalyserNode는 fftSize, min/max decibels와 smoothing 설정의 영향을 받고 시간 영역 분석 전에 입력을 mono로 downmix합니다. 별도 channel 처리가 없는 결과를 정확한 stereo 분석이라고 부르지 않습니다.
2. 권리 범위를 설명할 수 있는 source로 분석을 재현합니다
이 글의 fixture는 외부 곡 대신 FFmpeg 수학식으로 만든 6초 48 kHz stereo PCM입니다. 0–2초는 왼쪽 220 Hz·오른쪽 330 Hz, 2–4초는 440·660 Hz, 4–6초는 880·1320 Hz tone pair이며 source SHA-256과 생성 명령, FFmpeg 8.1.1 버전을 manifest에 기록했습니다. 제3자 음악·연주·음성·계정 자료는 포함하지 않습니다.
0.50·2.50·4.50초부터 각각 0.25초를 같은 astats 조건으로 읽었습니다. fixture 전용 zero-crossing 추정값은 왼쪽 220.01·439.99·880.01 Hz, 오른쪽 330.00·660.00·1320.00 Hz였고 목표 대비 오차는 모두 0.004% 이하였습니다. 이 계산은 한 channel에 사인파 하나만 있는 이번 검사용이며 복합음 pitch 분석법으로 사용하지 않습니다.
원본에서 최종 인코딩 검수까지 잇는 Visualizer pipeline
SOURCE · 0–6.00초
권리 범위를 설명할 수 있는 원본을 잠급니다
- 화면
- 수학식으로 만든 24-bit PCM, 48 kHz stereo source.wav와 SHA-256을 고정합니다.
- 음악
- 0–2초 220/330 Hz, 2–4초 440/660 Hz, 4–6초 880/1320 Hz의 L/R tone pair입니다.
- 검수
- 외부 음악·연주·음성·계정 자료가 없다는 rights note와 파일 hash를 함께 보존합니다.
ANALYZE · 0.50/2.50/4.50초
같은 길이의 창에서 실제 값을 기록합니다
- 화면
- 각 0.25초 창의 channel별 peak, RMS, zero-crossing rate와 fixture 전용 추정 주파수를 JSON에 남깁니다.
- 음악
- 실측 추정값은 220.01/330.00, 439.99/660.00, 880.01/1320.00 Hz였습니다.
- 검수
- 이 단순 tone 전용 추정법을 polyphonic pitch detector나 Web Audio 결과로 일반화하지 않습니다.
MAP · 30 fps
오디오 시각과 영상 프레임을 같은 시간축에 둡니다
- 화면
- 대표 창은 frame 15·75·135, tone pair 전환은 frame 60·120에 대응합니다.
- 음악
- 한 filter graph에서 source를 파형·스펙트럼·AAC 경로로 나누어 같은 timestamp를 유지합니다.
- 검수
- 전환 직후와 대표 구간의 최종 인코딩 keyframe을 다시 추출해 변화를 대조합니다.
RENDER · MP4
분석 조건과 전달 규격을 모두 기록합니다
- 화면
- showwaves와 2048-sample Blackman showfreqs를 1280×720, 30 fps H.264 영상으로 만듭니다.
- 음악
- 같은 source를 48 kHz stereo AAC로 mux합니다.
- 검수
- ffprobe로 codec, pixel format, frame rate, sample rate, channel, 길이와 faststart를 확인합니다.
VERIFY · 최종 파일
분석 원본이 아니라 인코딩된 결과를 다시 검사합니다
- 화면
- 6.00초·180 frame 전체를 decode해 luminance·saturated-red 변화와 keyframe 지표를 기록합니다.
- 음악
- 영상·오디오 duration 차이 0초와 tail RMS 차이 최대 0.004 dB 미만을 확인했습니다.
- 검수
- 내부 flash proxy 통과는 형식적 WCAG/PEAT 인증이나 개인별 광과민성 안전 보장이 아님을 함께 표시합니다.
3. 분석 시간과 영상 frame을 같은 기준으로 연결합니다
30 fps에서 대표 분석 창의 시작은 frame 15·75·135이고 tone pair 전환은 frame 60·120입니다. 이번 렌더는 하나의 filter graph에서 원본을 audio, showwaves, showfreqs 경로로 분기해 같은 timestamp를 사용했습니다. 전환 직후 2.05·4.05초와 대표 구간의 frame을 최종 MP4에서 다시 추출해 주파수 위치와 파형 밀도 변화가 예상 순서와 맞는지 확인했습니다.
다른 도구로 분석 데이터를 미리 만든다면 각 값의 sample 또는 timestamp를 frame time으로 바꾸는 규칙, interpolation, 지연 보정과 rounding을 기록해야 합니다. 장식용 반응을 더했다면 실제 분석 layer와 구분하고, smoothing이나 gain을 바꾼 뒤에는 같은 checkpoint를 다시 비교합니다.
4. Render와 mux가 끝난 최종 파일을 다시 검사합니다
실제 출력은 MP4 container, H.264 High·yuv420p 1280×720·30 fps 영상과 AAC stereo 48 kHz 오디오입니다. ffprobe에서 source, video, audio, container가 모두 6.000초였고 A/V duration 차이는 0초였습니다. 끝 0.25초의 encoded audio RMS는 source와 channel별 최대 0.0038 dB 차이였으며 moov가 mdat보다 앞선 faststart 구조도 확인했습니다.
플래시 검사는 source animation이 아니라 최종 인코딩 MP4의 180 frame 전체를 320×180 RGB proxy로 decode해 수행했습니다. 화면의 5% 이상에서 상대 휘도 0.1 이상이 바뀌는 frame과 saturated-red 변화를 보수적으로 세었고, 어떤 1초 창에서도 qualifying 일반·적색 transition은 0회였습니다. 이는 내부 회귀 scan 통과 기록이지 정식 WCAG/PEAT 인증이나 개인별 광과민성 안전 보장이 아닙니다.
Visualizer 공개 전 verification matrix
표 전체를 보려면 가로로 스크롤하세요.
| Gate | 검사 조건 | 증거 | 결과 | 해석 경계 |
|---|---|---|---|---|
| 원본·권리 | 로컬 수학식 tone pair, 제3자 media 없음 | source.wav SHA-256 + rights-note.md | PASS | 외부 곡의 권리 상태로 일반화하지 않음 |
| 분석 재현 | 0.25초 × 3개 stereo checkpoint | analysis-log.json, 목표 대비 오차 0.004% 이하 | PASS | zero-crossing 계산은 이 단순 tone fixture 전용 |
| 시간 매핑 | 30 fps, frame 15·60·75·120·135 | 한 filter graph + 최종 keyframe 5장 | PASS | 별도 Web Audio 구현이면 fftSize·smoothing·dB 범위를 새로 기록 |
| Container·stream | MP4, H.264 High/yuv420p, AAC stereo 48 kHz | render.ffprobe.json, ftyp→moov→mdat | PASS | YouTube 권장값이며 모든 플랫폼의 영구 강제 규격이 아님 |
| 길이·tail | source·video·audio·container 모두 6.000초 | A/V duration 차이 0초, tail RMS 최대 차이 0.0038 dB | PASS | 업로드 뒤 플랫폼 재인코딩 결과는 미검증 |
| 플래시·적색 | 최종 MP4 180 frame, 320×180 full-duration proxy | 1초 최대 일반·적색 qualifying transition 각 0 | PASS | 내부 보수적 scan이며 정식 WCAG/PEAT 인증이 아님 |
| 대체 설명 | 정보형 visualizer로 분류 | 구간·tone pair·분석 조건·결과를 본문과 표로 제공 | PASS | 영상만으로 전달되는 새 정보가 생기면 설명도 함께 갱신 |
5. 대체 설명과 해석 경계를 함께 공개합니다
이번 visualizer는 오디오에 따라 파형과 spectrum 위치가 바뀌므로 정보형으로 분류했습니다. 영상 없이도 같은 핵심 정보를 얻을 수 있도록 세 시간 구간의 L/R tone pair, 분석 창과 설정, frame mapping, stream·길이·tail·flash 결과를 본문과 표에 제공합니다. 새로운 분석 지표를 영상에 추가하면 대체 설명도 같은 release에서 갱신합니다.
YouTube 공식 인코딩 문서는 MP4, H.264, 4:2:0, AAC-LC 또는 Opus, 원본 frame rate 같은 권장값을 안내하지만 모든 플랫폼의 영구 강제 규격으로 일반화하지 않습니다. 이 fixture는 YouTube 업로드·재인코딩·계정 eligibility를 시험하지 않았고 외부 곡의 권리 판단이나 외부 인간 오디오·플랫폼·접근성·법률 전문가 감수를 주장하지 않습니다.
- 정보형 또는 장식형을 먼저 표시하고 실제 분석이 아닌 움직임을 측정값처럼 부르지 않습니다.
- 원본 hash·권리 근거·sample rate·channel과 분석 tool/version/options를 함께 남깁니다.
- 대표 분석 시점·주요 전환과 영상 frame을 대조합니다.
- 최종 인코딩본에서 stream·duration·sync·tail·flash를 다시 검사합니다.
- 검증하지 않은 플랫폼 결과·외부 곡 권리·정식 접근성 인증을 분명히 제외합니다.
ORIGINAL MATERIALS
이 글의 직접 제작 자료
- 합성 오디오 분석·프레임 매핑·렌더 재현 pipeline
로컬에서 만든 6초 stereo tone fixture의 hash, 세 분석 창, 두 전환 frame, 실제 H.264/AAC 렌더와 final-file 검사를 연결한 직접 재현 자료입니다.
- 원본·분석·stream·tail·flash 검증표
실제 fixture 수치와 증거 파일, 통과 여부, 플랫폼·권리·접근성 해석 경계를 한 표에 분리한 직접 제작 자료입니다.
SOURCE NOTES
출처와 검토일
- World Wide Web Consortium — Web Audio API 1.1 — AnalyserNode 확인일 2026-08-23
- FFmpeg Project — FFmpeg Filters Documentation 확인일 2026-08-23
- YouTube Help — YouTube recommended upload encoding settings 확인일 2026-08-23
- World Wide Web Consortium — WCAG 2.2 — Three Flashes or Below Threshold 확인일 2026-08-23
- World Wide Web Consortium — WCAG 2.2 Technique G19 확인일 2026-08-23
- World Wide Web Consortium — WCAG 2.2 — Audio Description or Media Alternative 확인일 2026-08-23
갱신 이력
최초 공개 / 2026-08-23
합성 stereo fixture, 분석 checkpoint, frame mapping, 실제 H.264/AAC render와 최종 파일 stream·tail·flash 검수를 연결한 Visualizer 가이드를 처음 공개했습니다.
KEEP EXPLORING



