1. Reddit 비디오가 무음으로 다운로드되는 이유: DASH 분할 스트림 아키텍처
무음 Reddit 비디오 현상은 다운로더 버그, 코덱 문제 또는 지역 제한이 아니라 설계된 대로 정확히 작동하는 플랫폼 아키텍처입니다. 비디오가 Reddit에 업로드되면 v.redd.it에서 호스팅되고 MPEG-DASH 형식으로 인코딩됩니다. 비디오 트랙과 오디오 트랙은 완전히 별도의 파일로 패키지됩니다. v.redd.it/{post_id}/DASHPlaylist.mpd 경로에서 비디오 게시물의 매니페스트를 열고 XML에서 직접 분할을 읽을 수 있습니다. 하나의 AdaptationSet는 해상도별로 이름이 지정된 비디오 표현(DASH_240.mp4, DASH_360.mp4, DASH_480.mp4, DASH_720.mp4, DASH_1080.mp4)을 열거합니다. 각각은 비디오 프레임과 별도의 오디오 AdaptationSet에는 DASH_AUDIO_128.mp4 또는 DASH_audio.mp4가 포함되어 있으며 프레임은 없고 사운드만 전달됩니다.
Reddit의 웹 플레이어는 MediaSource 확장을 사용하여 재생 시 이러한 인스턴스를 함께 연결합니다. 두 개의 SourceBuffer 인스턴스(하나는 비디오 스트림에 의해 공급되고 다른 하나는 오디오 스트림에 의해 제공되며 프레젠테이션 타임스탬프에 동기화됨). 플레이어는 통일된 경험을 제공합니다. 기본 전송은 두 가지를 모두 포함하는 단일 파일을 제공하지 않습니다.
따라서 순진한 다운로더가 '비디오'를 가져오면 찾을 수 있는 가장 큰 DASH_*.mp4를 가져오고 해당 파일이 정확히 무엇인지, 즉 완전하고 올바른 형식의 무성 영화를 가져옵니다. 오디오는 거기에 없었습니다. 온라인 다운로더 사이트는 백엔드에서 ffmpeg를 실행하여 트랙을 함께 다중화함으로써 서버 측에서 동일한 분할 및 종이를 처리합니다. 이는 Reddit이 데이터 센터 IP의 속도를 제한하거나 게시물이 NSFW이고 서버에 없는 세션 쿠키가 필요하거나 운영자의 ffmpeg 대기열이 백업되어 503을 반환할 때까지 작동합니다.
로컬 우선 접근 방식은 동일한 다중화 작업을 수행하지만 브라우저 내부에서는 세션의 쿠키와 병렬로 두 스트림을 모두 가져오고, 다중화를 해제하고, 타임스탬프를 정렬하고, 새로운 MP4를 작성합니다. 프록시 없음, 대기열 없음, 자동 출력 없음.
2. 클라이언트 측 다중화: 서버 없이 두 파일이 하나가 되는 방법
무성 DASH 비디오를 분리된 오디오 트랙과 병합하는 것은 서버에서 ffmpeg를 위한 작업처럼 들리며 수년 동안 그랬습니다. 그러나 MP4 컨테이너 형식(공식적으로 ISOBMFF, ISO/IEC 14496-12)은 구조화된 상자 계층 구조이며 JavaScript는 원시 스트림이 제공되는 모든 기본 도구뿐만 아니라 이를 다시 빌드할 수 있습니다. 이것이 mp4box.js와 Web Workers의 로컬 muxer를 사용하여 Reddit 게시물을 처리할 때 Video Downloader Bundle 내에서 일어나는 일입니다.
순서는 이렇게 진행됩니다. 두 스트림 모두 ArrayBuffers로 병렬로 가져옵니다. 최상위 비디오 변환(사용 가능한 경우 DASH_1080.mp4)과 최상의 오디오 트랙(일반적으로 128kbps AAC 파일)입니다. mp4box.js는 각 버퍼의 박스 트리를 구문 분석합니다. 즉, 컨테이너 호환성을 식별하는 ftyp, 트랙 메타데이터를 전달하는 moov, 그리고 트랙 상자 내부에 모든 프레임과 오디오 패킷을 설명하는 샘플 테이블(타이밍용 stts, 청크 레이아웃용 stsc 및 stsz, 오프셋용 stco)이 있습니다. 코덱 개인 데이터는 비디오 트랙의 H.264 매개변수 세트를 포함하는 avcC 상자, 오디오의 AAC 구성을 설명하는 esd와 함께 제공됩니다.
그런 다음 두 시계가 조정됩니다. 비디오와 오디오는 서로 다른 시간 단위로 인코딩되었습니다(보통 비디오 트랙의 경우 초당 90,000틱, 오디오의 경우 44,100 또는 48,000틱). 따라서 프레젠테이션 타임스탬프는 립싱크를 정확하게 유지하기 위해 통합 타임라인으로 다시 계산됩니다. 새로운 MP4가 합성됩니다. 신선한 ftyp, 두 트랙의 샘플 테이블을 모두 포함하는 단일 moov, 두 스트림의 페이로드가 하나의 mdat로 통합됩니다. 멀티플렉서는 빠른 시작 레이아웃인 mdat 앞에 moov를 작성하므로 파일 로드가 끝나기 전에 재생이 시작되고 플레이어는 메타데이터를 끝까지 스캔하지 않습니다.
일반적인 게시물의 경우 전체 어셈블리가 몇 초 안에 완료되며 다른 비디오처럼 Premiere 또는 휴대폰 갤러리로 드래그하여 사운드와 함께 어디에서나 재생할 수 있는 표준 MP4를 생성합니다.
3. 다중화된 MP4 가져오기: 실제 작업 흐름
비디오 다운로더 번들이 설치된 Reddit은 일반 도구와의 차이가 가장 잘 드러나는 플랫폼입니다. 출력은 조용한 고아 또는 오디오 전용 형제 대신 하나의 완성된 파일이기 때문입니다. 일반적으로 Reddit 탐색 - 확장 프로그램의 탐지기는 old.reddit, new.reddit, sh.reddit 및 v.redd.it 콘텐츠에 대한 게시물 세부 정보 페이지를 다룹니다. 동영상 게시물은 번들의 다른 모든 플랫폼과 동일하게 플레이어를 통해 다운로드 버튼을 받습니다.
클릭하세요. 내부적으로 어댑터는 게시물의 미디어를 확인합니다. 즉, 세션에서 이미 액세스할 수 있는 게시물 JSON을 읽고, 사용 가능한 변환에 대해 DASH 매니페스트를 살펴보고, 가장 높은 비디오 스트림과 가장 좋은 오디오 트랙을 선택합니다. 두 가지 모두 쿠키가 첨부된 탭에서 병렬로 가져옵니다. 이는 모든 클라우드 다운로더를 중단시키는 NSFW 사례를 조용히 해결합니다. 격리된 비디오와 18개 이상의 하위 레딧 비디오에는 reddit_session이 필요하며 브라우저에는 reddit_session이 필요하지만 오하이오의 일부 서버에는 그렇지 않습니다. Mux는 작업자에서 실행되며 결합된 MP4는 게시물 제목의 이름을 딴 다운로드 폴더에 저장됩니다.
콘텐츠 변동이 심하기 때문에 Reddit에서는 다른 플랫폼보다 타이밍이 더 중요합니다. 중재자는 게시물을 삭제하고, 사용자는 자신의 주장을 삭제하며, automod는 실시간으로 피드를 핵폭탄 처리합니다. 참고용으로 비디오(기계 수리 클립, 재호스팅 전 뉴스 클립, 레시피)를 저장하는 경우 시청하는 순간 잡는 것은 내일 다시 돌아올 계획과 완전히 다릅니다. 버튼이 바로 거기에 있는 디자인은 이러한 현실을 반영합니다.
최고 수준에서 얻을 수 있는 사항에 대한 참고 사항: Reddit의 소스 품질은 업로더가 제공한 모든 수준으로 제한되며 DASH 래더의 최고 품질은 1080p입니다. 오디오는 모두 Reddit에서 인코딩하기 때문에 64-128kbps에서 균일하게 AAC입니다. 멀티플렉서는 해당 스트림을 소스 품질로 유지합니다. 충실도가 아닌 동기화를 추가합니다.
4. 극단적인 사례: 크로스포스트, GIF, 삭제된 포스트, 대체 호스트
Reddit의 미디어 표면에는 유지 관리되는 도구와 폐기된 도구를 구분하는 소수의 엣지 케이스가 있으며, 각각의 작동 방식을 명시적으로 설명할 가치가 있습니다. 크로스포스트가 첫 번째입니다. 크로스포스트된 비디오는 v.redd.it에 있는 원본 포스트의 미디어를 다시 가리키므로 어댑터는 래퍼 포스트에서 실패하는 대신 크로스포스트 체인을 통해 소스 미디어로 확인됩니다. 보고 있는 크로스포스트에서 다운로드를 클릭하면 원본 비디오(동일한 트랙, 동일한 다중화기)를 얻을 수 있습니다. 신디케이트가 많은 r/ 하위 레딧에서는 이것이 트래픽의 대부분입니다.
GIF는 두 번째이며, 관련된 비디오 파이프라인이 없다는 것이 놀랍습니다. Reddit은 i.redd.it에서 실제 GIF 업로드를 직접 .gif 파일로 제공하므로 다운로드는 파일 자체의 단일 가져오기이며, 다중화나 변환은 없습니다. 일부 레거시 업로드는 보다 원활한 재생을 위해 MP4 변환도 제공합니다. 둘 다 존재하는 경우 어댑터는 동일한 콘텐츠에 대해 크기가 훨씬 더 작기 때문에 MP4를 선호합니다.
삭제 및 제거된 게시물은 정직한 제한 사항입니다. Reddit이 귀하의 세션에 대한 미디어 제공을 중단하면 DASH URL도 함께 죽고 플랫폼이 귀하에게서 철회한 콘텐츠를 어떤 도구도 부활시킬 수 없습니다. 삭제된 Reddit 비디오를 복구한다고 주장하는 것은 어딘가에서 캐시된 복사본을 판매하는 것입니다. 아마도 원본 게시자가 모르는 상태에서 윤리적인 문제가 발생할 수 있습니다.
폴백 호스팅은 마지막 주름입니다. Reddit은 또한 DASH 협상이 실패할 때 일부 클라이언트가 재생하는 폴백 변환 세트(redd.it 호스트의 source=fallback 변형)를 노출합니다. 어댑터는 이를 정확하게 낮은 선호도의 폴백으로 처리하고 기본 매니페스트를 사용할 수 없는 경우에만 도달합니다. 이러한 모든 경우에 대한 결과는 일관됩니다. 세션에서 볼 수 있는 내용은 다운로드 가능하고, 다중화되고, 저장됩니다. 볼 수 없는 것은 이 도구를 포함한 모든 도구의 손이 닿지 않는 곳에 있습니다.
5. 상황에 맞게 Reddit 비디오를 보관하고 플래그를 지정하지 않고 수행하기
Reddit 비디오는 단독으로 존재하는 경우가 거의 없습니다. 클립의 가치는 종종 게시물의 제목, 이를 설명하는 상단 댓글 또는 해당 날짜를 나타내는 하위 Reddit 컨텍스트입니다. 잘못된 정보 추적, 사건 문서화, 추세 연구 등 심각한 용도로 Reddit 미디어를 가져오는 기록 보관자와 연구원은 파일과 함께 이동할 메타데이터가 필요합니다. 그렇지 않으면 아카이브가 몇 달 내에 식별할 수 없는 수백 개의 클립으로 저하됩니다. 작동하는 실제 패턴: 확장 프로그램 이름은 게시물 제목에서 다운로드되고 chrome.storage.local에 로컬 기록을 유지합니다. 이를 하위 레딧 및 날짜별로 폴더 구성표와 결합하면 나중에 전체 컨텍스트가 재구성됩니다. 댓글 컨텍스트가 필요한 경우 페이지에 있는 동안 동영상과 함께 게시물 JSON을 저장하세요. 이는 세션의 데이터이며 한 번 복사하여 붙여넣으면 다음 주에 삭제될 수 있는 토론이 정지됩니다.
속도 제한 질문에 대한 정직한 엔지니어링 답변은 속도가 중요하다는 것입니다. Reddit의 공개 엔드포인트는 주거용 IP의 일반적인 검색과 스크래핑처럼 보이는 챌린지 패턴을 허용합니다. 일괄 다운로더는 재시도 및 백오프를 통해 요청 타이밍을 측정하여 의도적으로 대기열의 속도를 조정합니다. 왜냐하면 몇 초 안에 수백 개의 요청을 실행하는 도구는 사용자 세션에 플래그를 지정하고 플래그가 지정된 세션은 사이트에서 수행하는 다른 모든 작업에 대한 경험을 저하시키기 때문입니다. 대안이 임시 블록인 경우 설계상 느리게 설계된 것이 전체적으로 더 빠릅니다.
개인 정보 보호 프레임은 이 번들의 모든 플랫폼과 동일하며 Reddit에 특정한 주름이 하나 있습니다. Reddit에서 검색하는 내용은 건강 하위 레딧, 법적 조언, 지원 커뮤니티 등 연관성에 따라 민감한 경우가 많습니다. 클라우드 다운로더는 IP에 대해 저장한 모든 게시물 URL을 기록합니다. 로컬 추출은 이를 사용자 디스크의 chrome.storage.local에 기록하며, 지울 때까지 유지됩니다. 전문적인 역량으로 아카이빙하는 사람에게는 이러한 구별이 전체 야구 경기의 전부입니다.
볼 수 있는 것을 다운로드하고, 로컬에 보관하고, 다시 공유할 때 작성자에게 크레딧을 제공하세요. Reddit 아카이브의 자동 MP4 시대는 끝났습니다.