Social & Media • 10 min read

Cómo descargar vídeos de Reddit con audio (solucionar el problema del MP4 silencioso)

Todos los descargadores genéricos de Reddit chocan contra el mismo muro: vídeo nítido de 1080p, sin sonido. Esa es la arquitectura DASH de Reddit haciendo su trabajo. Así es como funcionan las transmisiones divididas y cómo obtener un único MP4 con audio, completamente en tu navegador.

1. Por qué los vídeos de Reddit se descargan silenciosamente: la arquitectura DASH Split-Stream

El fenómeno del video silencioso de Reddit no es un error en el descargador, una peculiaridad del códec o una restricción regional: es la arquitectura de la plataforma que funciona exactamente como se diseñó. Cuando se carga un vídeo en Reddit, se aloja en v.redd.it y se codifica en formato MPEG-DASH: la pista de vídeo y la pista de audio se empaquetan como archivos completamente separados. Abra el manifiesto de cualquier publicación de video en la ruta v.redd.it/{post_id}/DASHPlaylist.mpd y podrá leer la división directamente en el XML: un AdaptationSet enumera representaciones de video nombradas por resolución: DASH_240.mp4, DASH_360.mp4, DASH_480.mp4, DASH_720.mp4, DASH_1080.mp4; cada una contiene cuadros de video y nada más, mientras que un audio separado AdaptationSet contiene DASH_AUDIO_128.mp4 o DASH_audio.mp4, con sonido y sin marcos. El reproductor web de Reddit los une en el momento de la reproducción usando extensiones MediaSource: dos instancias de SourceBuffer, una alimentada por la transmisión de video y otra por la transmisión de audio, sincronizadas en marcas de tiempo de presentación. El jugador presenta una experiencia unificada; el transporte subyacente nunca presenta un único archivo que contenga ambos. Entonces, cuando un descargador ingenuo toma 'el video', busca el DASH_*.mp4 más grande que puede encontrar y obtiene exactamente lo que es ese archivo: una película muda completa y bien formada. El audio nunca estuvo en él. Los sitios de descarga en línea enfrentan la misma división y papeleo en el lado del servidor al ejecutar ffmpeg en sus backends para mezclar las pistas, lo que funciona hasta que Reddit limita la velocidad de las IP de su centro de datos, la publicación es NSFW y requiere cookies de sesión que su servidor no tiene, o la cola ffmpeg del operador tiene una copia de seguridad y devuelve un 503. El enfoque local primero hace el mismo trabajo de mezcla, pero dentro de su navegador: recupera ambas transmisiones en paralelo con las cookies de su sesión, demux, alinea marcas de tiempo y escribe un MP4 nuevo. Sin proxy, sin cola, sin salida silenciosa.

2. Muxing del lado del cliente: cómo dos archivos se convierten en uno sin un servidor

Fusionar un vídeo DASH silencioso con su pista de audio separada suena como un trabajo para ffmpeg en un servidor, y durante años lo fue. Pero el formato de contenedor MP4 (formalmente ISOBMFF, ISO/IEC 14496-12) es una jerarquía de cajas estructurada, y JavaScript puede reconstruirla tan bien como cualquier herramienta nativa dadas las secuencias sin formato. Eso es lo que sucede dentro de Video Downloader Bundle cuando maneja una publicación de Reddit, usando mp4box.js y un muxer local en Web Workers. La secuencia es así. Ambas transmisiones se obtienen en paralelo en ArrayBuffers: la mejor reproducción de video (DASH_1080.mp4 cuando esté disponible) y la mejor pista de audio, generalmente el archivo AAC de 128 kbps. mp4box.js analiza el árbol de cuadros de cada búfer: el ftyp que identifica la compatibilidad del contenedor, el moov que transporta metadatos de la pista y, dentro de los cuadros de pista, las tablas de muestra (stts para sincronización, stsc y stsz para diseño de fragmentos, stco para compensaciones) que describen cada cuadro y paquete de audio. Los datos privados del códec salen con ellos: la caja avcC que contiene conjuntos de parámetros H.264 de la pista de video, el esds que describe la configuración AAC del audio. Entonces los dos relojes se reconcilian. El vídeo y el audio se codificaron con diferentes escalas de tiempo (comúnmente 90.000 ticks por segundo para la pista de vídeo frente a 44.100 o 48.000 para el audio), por lo que las marcas de tiempo de la presentación se recalculan en una línea de tiempo unificada para mantener la sincronización labial exacta. Se sintetiza un nuevo MP4: ftyp nuevo, un solo moov que contiene las tablas de muestra de ambas pistas y las cargas útiles de ambas transmisiones consolidadas en un mdat. El muxer escribe el moov antes del mdat (el diseño de inicio rápido), por lo que el archivo comienza a reproducirse antes de que termine de cargarse y los reproductores no escanean hasta el final en busca de metadatos. Todo el ensamblaje se completa en unos pocos segundos para una publicación típica y produce un MP4 estándar que se reproduce en cualquier lugar, con sonido, que se puede arrastrar a Premiere o a la galería de un teléfono como cualquier otro video.

3. Obtener el MP4 Muxed: el flujo de trabajo real

Con Video Downloader Bundle instalado, Reddit es la plataforma donde la diferencia con las herramientas genéricas es más visible, porque el resultado es un único archivo terminado en lugar de un archivo huérfano silencioso o un hermano de solo audio. Navegue por Reddit normalmente: el detector de la extensión cubre old.reddit, new.reddit, sh.reddit y las páginas de detalles de publicaciones para el contenido v.redd.it. Las publicaciones de video obtienen el botón de descarga en su reproductor, al igual que cualquier otra plataforma del paquete. Haz clic en él. Debajo del capó, el adaptador resuelve los medios de la publicación: lee el JSON de la publicación al que su sesión ya puede acceder, recorre el manifiesto DASH para ver las representaciones disponibles y elige la transmisión de video más alta más la mejor pista de audio. Ambos se recuperan en paralelo desde su pestaña con sus cookies adjuntas, lo que resuelve silenciosamente el caso NSFW que interrumpe todos los descargadores de la nube: los videos en cuarentena y subreddit para mayores de 18 años requieren su reddit_session, y su navegador la tiene, mientras que algunos servidores en Ohio no. El mux se ejecuta en trabajadores y el MP4 combinado se guarda en la carpeta de descargas que lleva el nombre del título de la publicación. El tiempo es importante en Reddit más que en otras plataformas porque el contenido se agita mucho. Los moderadores eliminan publicaciones, los usuarios eliminan los suyos propios en los argumentos y los automodifican los feeds en tiempo real. Si está guardando un vídeo como referencia (un clip de reparación mecánica, un clip de noticias antes de volver a alojarlo, una receta), tomarlo en el momento en que lo está viendo es realmente diferente a planear volver mañana. El diseño del botón está ahí refleja esa realidad. Una nota sobre lo que obtienes en el extremo superior: la calidad de la fuente de Reddit se limita a lo que proporcionó quien subió el contenido, y la escalera DASH alcanza un máximo de 1080p. El audio es uniformemente AAC a 64-128 kbps porque eso es todo lo que codifica Reddit. El muxer conserva esas transmisiones con la calidad de origen: agrega sincronización, no fidelidad.

4. Casos extremos: publicaciones cruzadas, GIF, publicaciones eliminadas y hosts alternativos

La superficie mediática de Reddit tiene un puñado de casos extremos que separan las herramientas mantenidas de las abandonadas, y vale la pena ser explícito sobre cómo se comporta cada una. Las publicaciones cruzadas son las primeras: un video cruzado apunta al medio de la publicación original en v.redd.it, por lo que el adaptador resuelve a través de la cadena de publicaciones cruzadas hasta el medio de origen en lugar de fallar en la publicación contenedora. Haces clic en descargar en la publicación cruzada que estás viendo y obtienes el video original: las mismas pistas, el mismo mux. En los subreddits r/ que se distribuyen mucho, esta es la mayor parte del tráfico. Los GIF son el segundo, y la sorpresa es que no hay ningún canal de video involucrado: Reddit ofrece cargas de GIF reales como archivos .gif directos en i.redd.it, por lo que la descarga es una única búsqueda del archivo en sí, sin mezclas ni representaciones. Algunas cargas heredadas también exponen una conversión MP4 para una reproducción más fluida; cuando ambos existen, el adaptador prefiere el MP4 porque es un orden de magnitud más pequeño para el mismo contenido. Las publicaciones eliminadas y eliminadas son la verdadera limitación: una vez que Reddit deja de ofrecer medios a su sesión, las URL de DASH mueren con él y ninguna herramienta puede resucitar el contenido que la plataforma le ha retirado. Cualquier cosa que afirme recuperar videos eliminados de Reddit le está vendiendo una copia en caché de algún lugar, posiblemente sin el conocimiento del autor original, lo cual es su propio problema ético. El hosting alternativo es el último detalle: Reddit también expone un conjunto de representaciones alternativas (las variantes source=fallback en los hosts redd.it) que algunos clientes utilizan cuando falla la negociación DASH. El adaptador los trata exactamente como lo que son, un recurso alternativo de menor preferencia, y solo los utiliza cuando el manifiesto principal no está disponible. El resultado en todos estos casos es consistente: lo que su sesión puede ver se puede descargar, mezclar y guardar; lo que no puede ver está fuera del alcance de todas las herramientas, incluida ésta.

5. Archivar videos de Reddit con contexto y hacerlo sin ser marcado

Los vídeos de Reddit rara vez viven aislados: el valor de un clip suele ser el título de la publicación, el comentario principal que lo explica o el contexto del subreddit que lo fecha. Los archiveros e investigadores que utilizan los medios de Reddit para un uso serio (seguimiento de información errónea, documentación de incidentes, investigación de tendencias) necesitan que los metadatos viajen con el archivo, o el archivo se degrada en cientos de clips no identificables en cuestión de meses. El patrón práctico que funciona: los nombres de la extensión se descargan desde el título de la publicación y mantienen un historial local en chrome.storage.local; combinarlo con un esquema de carpetas por subreddit y fecha reconstruye el contexto completo más adelante. Si necesita contexto para comentar, guarde el JSON de la publicación junto con el video mientras esté en la página; son los datos de su sesión, uno los copia y pega y congela la discusión que podría eliminarse la próxima semana. A la pregunta sobre el límite de frecuencia, la respuesta honesta de la ingeniería es que el ritmo es importante. Los puntos finales públicos de Reddit toleran la navegación normal desde IP residenciales y desafían patrones que parecen raspado. El descargador por lotes acelera su cola deliberadamente (tiempo de solicitud medido con reintentos y retrocesos) porque una herramienta que activa cientos de solicitudes en segundos hace que se marque la sesión del usuario, y una sesión marcada degrada la experiencia de todo lo demás que se hace en el sitio. Más lento por diseño es más rápido en total cuando la alternativa es un bloqueo temporal. El marco de privacidad es el mismo que el de todas las plataformas de este paquete, con un detalle específico de Reddit: lo que navega en Reddit suele ser sensible por asociación: subreddits de salud, asesoramiento legal, comunidades de apoyo. Un descargador en la nube registra cada URL de publicación que guarda con su IP. La extracción local lo registra en chrome.storage.local en su propio disco, donde permanece hasta que lo borre. Para cualquiera que archive a título profesional, esa distinción es fundamental. Descargue lo que pueda ver, manténgalo local, dé crédito a los creadores cuando lo comparta y la era silenciosa del MP4 de su archivo de Reddit habrá terminado.