

# Prepará transcripciones de YouTube para RAG con marcas de tiempo de la fuente

Conservá las líneas de subtítulos con sus tiempos, agrupá cada afirmación con su condición y probá los fragmentos con preguntas conocidas. Una línea de subtítulo es una línea de texto con tiempos asignados. Un fragmento es un pasaje almacenado que una búsqueda puede devolver. Una condición limita cuándo es verdadera una afirmación. Conservá cada ejemplo y cada contraste junto con esa afirmación. RAG significa generación aumentada por recuperación. La recuperación encuentra texto guardado antes de que un modelo responda. Semántico significa basado en el significado. No hay una cantidad fija de segundos que sea la mejor para todos los videos. No hay una cantidad fija de palabras que sea la mejor para todos los videos. La prueba determina la agrupación. Empezá con 1 video. Conservá la fila original y editá una copia de trabajo. Eliminá una repetición solo si la reproducción muestra una única línea hablada. Conservá todos los números originales de las líneas de subtítulos. Usá preguntas conocidas y agregá 1 que el video no pueda responder. Un embedding es una lista de números que permite representar textos similares. Una base de datos es opcional. Este método tiene una limitación clara. La puntuación que aparece más abajo corresponde a una comparación manual inventada. No es una prueba de búsqueda medida. No demuestra una mejora general. Una extracción de subtítulos no demuestra que las palabras coincidan con lo que se dice. Tampoco demuestra que los subtítulos vayan a seguir disponibles más adelante. Si los subtítulos no contienen el dato, indicá que la fuente no puede responder.

Un modelo es el programa que escribe la respuesta. La generación es ese paso de escritura. La recuperación encuentra el texto primero. El modelo debe escribir a partir de ese texto encontrado. El [artículo original sobre RAG](https://arxiv.org/abs/2005.11401) respalda la combinación de recuperación y generación. No determina un tamaño de fragmento para videos. Tampoco respalda el recuento ficticio que aparece más abajo.

Algunos desarrolladores preguntan si conviene agrupar por tiempo o por significado los subtítulos que se repiten y dan saltos. Ninguna de estas agrupaciones es la mejor para todos los videos. Hacé la prueba con tu propio video.

## Obtené 1 transcripción con marcas de tiempo

JSON es un formato de datos de texto. Representa datos estructurados como texto. El índice de una línea de subtítulo es una etiqueta que asigna el lector a una posición original del arreglo segments. Los índices de las líneas de subtítulos no son un campo de salida garantizado del Actor. Las tablas didácticas numeran las posiciones a partir de 1. La primera posición es 1. Conservá la fila original sin cambios. Guardá estas etiquetas y su trazabilidad en la copia de trabajo.

Un Actor es un programa de recopilación de datos que se ejecuta en línea por vos. Una Task es una configuración de entrada guardada para un Actor. Podés seguir este método sin el Actor si ya tenés subtítulos. Si todavía necesitás subtítulos, seguí la guía de [extracción de subtítulos de YouTube](https://chronometrica.com/es/articles/extraccion-de-subtitulos-de-youtube/). Esta página no repite ese trabajo.

El programa de recopilación pública verificado el 13 de octubre de 2026 correspondía a la compilación 0.1.43 del Actor. Cuando logra leer los subtítulos, esa compilación entrega segmentos con marcas de tiempo. Un segmento es una línea de subtítulo en json. Una compilación posterior puede ser diferente. La fecha de verificación es la fecha de observación. No es la fecha de publicación del video. La página del Actor es [YouTube Transcript Scraper](https://apify.com/chronometrica/youtube-transcript-scraper). La Task guardada es [YouTube Transcripts for RAG Pipelines](https://apify.com/chronometrica/youtube-transcript-scraper/examples/youtube-transcripts-for-rag).

Este es el alcance. La granularidad indica qué representa cada fila. La granularidad de salida del Actor es 1 video único procesado con éxito por cada fila del conjunto de datos. Una fila del conjunto de datos es 1 registro guardado. La granularidad de la tabla de fragmentos creada por el lector es 1 fila por fragmento. Un fragmento no es una fila del conjunto de datos. Todas las columnas de fragmentos las crea el lector. El Actor recibe la URL directa de un video o un ID de video que ya conocés. No busca videos por vos. La Task devuelve json, text y llm. Usá json para las citas. Una cita identifica el video y el intervalo de tiempo que respalda una afirmación. El resultado llm es llmText. llmText es texto listo para usar en un prompt. Un prompt es el mensaje que enviás a un modelo. llmText no reemplaza los tiempos de los segmentos.

El Actor no crea fragmentos. No crea embeddings. No construye un índice. Un índice es una estructura almacenada para hacer búsquedas. El Actor no recupera pasajes. No responde preguntas. No puntúa respuestas. Vos hacés la limpieza, la agrupación y las pruebas de forma manual.

Conservá estos campos de la fuente en la fila sin modificar.

| campo | qué conservar |
| --- | --- |
| videoId | el ID del video |
| videoUrl | la URL directa del video |
| transcriptLanguageCode | el código de idioma de los subtítulos |
| isAutoGenerated | si la pista está marcada como automática |
| segments | la lista de líneas de subtítulos |
| scrapedAt | cuándo se recopiló esta fila |
| status | el estado que devolvió la ejecución |

Una pista es una versión de los subtítulos en un idioma. Conservá estos campos en cada segmento.

| campo | qué conservar |
| --- | --- |
| startSeconds | cuándo empieza la línea de subtítulo, en segundos |
| endSeconds | cuándo termina la línea de subtítulo, en segundos |
| durationSeconds | la duración de la línea de subtítulo en segundos |
| text | las palabras de la línea de subtítulo |

Si preferredLanguages está vacío, la ejecución selecciona una pista de subtítulos disponible. Revisá transcriptLanguageCode. Una lista vacía no significa que hayas elegido el idioma. Definí una regla de idioma antes de agregar un segundo video. Conservá isAutoGenerated junto con la fila. Automática significa que la pista está marcada como generada por una máquina. Los subtítulos generados por una máquina pueden repetir líneas. Esa marca por sí sola no demuestra que las palabras sean incorrectas.

Los detalles de las entradas que fallaron están en OUTPUT. Configurá includeFailedInputDetails para que esos detalles sigan visibles. Una entrada que falló no es una transcripción con 0 líneas de subtítulos. No escribas 0 para un tiempo desconocido. Una línea de subtítulo real puede empezar en 0 segundos. Desconocido y cero no son lo mismo. scrapedAt indica cuándo recopilaste la fila. No indica cuándo se publicó el video.

Una verificación de subtítulos no demuestra que las palabras coincidan con lo que se dice. Tampoco demuestra que los subtítulos vayan a seguir disponibles más adelante. La Task verificada es solo un punto de partida. Incluye videos de ejemplo. Reemplazalos por 1 video público que hayas elegido. La Task no hace limpieza, agrupación ni pruebas.

## Seguí estas 7 acciones

Hacé las acciones en orden. Si agrupás antes de limpiar, una repetición puede parecer 2 hechos. Si puntuás antes de escribir las preguntas, podés favorecer una agrupación demasiado pronto. Escribí las preguntas primero. Después usá esas mismas preguntas con ambas agrupaciones.

1. Guardá la fila sin procesar del programa de recopilación tal como llegó. No edites esa fila. No modifiques la fuente sin procesar. Creá una copia de trabajo para la limpieza y la agrupación. Guardá en esa copia las etiquetas que asignaste a las posiciones originales del arreglo. Conservá el ID del video, la URL del video, el código de idioma y scrapedAt. Conservá status e isAutoGenerated.
2. Leé las líneas de subtítulos contiguas cuando sus tiempos se superpongan. Las mismas palabras pueden corresponder a un subtítulo progresivo. Un subtítulo progresivo vuelve a escribir una misma línea hablada en la siguiente línea de subtítulo. Eliminá la línea adicional solo cuando los subtítulos y la reproducción muestren una única emisión hablada. Reproducí ese momento en un video real con la función de [navegación por líneas de subtítulos de YouTube](https://support.google.com/youtube/answer/15930243?hl=en). Las palabras iguales por sí solas no son prueba suficiente. Conservá el énfasis que se volvió a expresar en voz alta. Conservá una instrucción repetida. No elimines todas las oraciones idénticas del video. Registrá los números originales de las líneas de subtítulos asociados al cambio.
3. Colocá cada afirmación junto con su condición. Colocá cada ejemplo junto con la afirmación que ilustra. Colocá cada contraste junto con la afirmación cuyo alcance limita. Conservá cada pregunta junto con su respuesta. Preferí un pasaje breve y completo. No cortes según una cantidad arbitraria de segundos. No cortes según una cantidad arbitraria de palabras. Podés dividir un pasaje muy largo donde haya un cambio real de tema. Después verificá que no haya quedado afuera una limitación necesaria.
4. Creá 1 fila por fragmento. Las columnas son chunk_id, source_video_id, source_url, language, start_seconds, end_seconds, original_cue_indices, text y cleaned_text_version. start_seconds es el inicio más temprano de las líneas de subtítulos del fragmento. end_seconds es el final más tardío de esas líneas. Llamá a ese par intervalo del pasaje. El intervalo de un pasaje puede incluir silencios o pausas. Una pausa no significa que se haya hablado durante cada segundo. Si superponés fragmentos para conservar el contexto, registrá esa superposición. Contá la evidencia repetida 1 sola vez.
5. Antes de hacer cualquier búsqueda, escribí de 3 a 5 preguntas. Escribí una respuesta respaldada por la fuente para cada pregunta. Marcá cada proposición que necesita la respuesta. Una proposición es una parte necesaria de la respuesta. No alcanza con compartir una palabra clave. Incluí 1 pregunta para la que no haya evidencia en los subtítulos.
6. Usá las mismas preguntas con ambas agrupaciones. Anotá la cantidad de fragmentos que vas a seleccionar antes de examinarlos. Usá esa misma cantidad para ambas agrupaciones. Este ejemplo didáctico usa 1 fragmento. Registrá el ID del fragmento que seleccionás. Registrá si ese fragmento contiene la respuesta completa y sus condiciones. Registrá si la cita señala el pasaje correcto. Una persona puede hacer esto mediante la lectura. No afirmes que se ejecutó una búsqueda con embeddings si solo leíste.
7. Conservá la agrupación más simple que mantenga el contexto necesario. También debe conservar tiempos claros. Un fragmento más corto no es mejor si le falta una proposición necesaria. No informes una mejora general a partir de un conjunto muy pequeño. Si la fuente no contiene evidencia, indicá que no puede responder. No completes lo que falta con una explicación probable.

## Aplicá las acciones a líneas de subtítulos ficticias

Las líneas de subtítulos de esta sección son texto didáctico ficticio. VID-DEMO-01 no es un ID real de YouTube. No lo busques. Las líneas originales están en inglés, por eso la celda de idioma dice en. Los textos de ejemplo de las líneas de subtítulos y los fragmentos se muestran traducidos al español. El código en corresponde al original en inglés. Una fila real debe copiar transcriptLanguageCode de la fuente. No hay una URL real ni una fecha de publicación.

| línea de subtítulo | start_seconds | end_seconds | text |
| --- | --- | --- | --- |
| 1 | 0 | 6 | Guardá los documentos según el ID de su fuente. |
| 2 | 5 | 9 | Guardá los documentos según el ID de su fuente. |
| 3 | 9 | 15 | Conservá una versión cuando cambie la fuente. |
| 4 | 15 | 22 | Una versión nueva no es una fuente nueva. |
| 5 | 22 | 29 | Eliminá una importación repetida idéntica solo cuando coincidan el ID de la fuente y la versión. |
| 6 | 29 | 36 | Conservá las distintas versiones porque el texto puede cambiar. |

La línea de subtítulo 1 va de 0 a 6 segundos. Ese 0 es un inicio real. No reemplaza un valor desconocido. La línea de subtítulo 2 va de 5 a 9 segundos. Los 2 intervalos se superponen. Las palabras coinciden. Aun así, la coincidencia de palabras no demuestra que haya una única emisión hablada. En este ejemplo inventado, una revisión de la reproducción sí lo demuestra. La línea de subtítulo 2 repite la misma línea hablada que la línea de subtítulo 1. Eliminá la línea de subtítulo 2 del texto de trabajo. Conservá los números 1 y 2 de las líneas de subtítulos asociados a ese cambio. Dejá las 6 líneas de subtítulos en la fila de la fuente sin modificar.

La línea de subtítulo 6 no corresponde a la misma emisión que la línea de subtítulo 2. La línea de subtítulo 6 da una razón para conservar distintas versiones. Se conserva. No borres todas las ideas repetidas del video.

Las 2 agrupaciones que aparecen más abajo usan esa copia de trabajo. La limpieza es la misma para ambas. La comparación trata sobre los límites de los fragmentos, no sobre 2 reglas de limpieza. cleaned_text_version es una etiqueta propia. No es un campo del Actor. En este caso, la etiqueta es clean-1. La línea de subtítulo 2 permanece en la lista de números de líneas donde quede incluido su intervalo original. Su oración no se vuelve a escribir.

La agrupación por tiempo hace los cortes en los límites de las líneas breves de subtítulos.

T1 abarca las líneas de subtítulos 1, 2 y 3, de 0 a 15 segundos. Su texto limpio es: "Guardá los documentos según el ID de su fuente. Conservá una versión cuando cambie la fuente."

T2 es la línea de subtítulo 4, de 15 a 22 segundos. Su texto es: "Una versión nueva no es una fuente nueva."

T3 es la línea de subtítulo 5, de 22 a 29 segundos. Su texto es: "Eliminá una importación repetida idéntica solo cuando coincidan el ID de la fuente y la versión."

T4 es la línea de subtítulo 6, de 29 a 36 segundos. Su texto es: "Conservá las distintas versiones porque el texto puede cambiar."

La agrupación por significado conserva cada afirmación junto con su limitación. M1 trata sobre qué identifica un documento y qué significa un cambio. M2 trata sobre cuándo se puede eliminar una importación repetida. Ese es un cambio real de tema.

M1 abarca las líneas de subtítulos 1, 2, 3 y 4, de 0 a 22 segundos. La línea de subtítulo 2 se conserva solo para mantener la trazabilidad. Las oraciones conservadas son: "Guardá los documentos según el ID de su fuente. Conservá una versión cuando cambie la fuente. Una versión nueva no es una fuente nueva."

M2 abarca las líneas de subtítulos 5 y 6, de 22 a 36 segundos. Las oraciones conservadas son: "Eliminá una importación repetida idéntica solo cuando coincidan el ID de la fuente y la versión. Conservá las distintas versiones porque el texto puede cambiar."

El intervalo de 0 a 22 segundos es el intervalo de un pasaje. Usa el inicio más temprano y el final más tardío. No significa que se haya hablado durante cada segundo. M1 termina en 22 segundos. M2 empieza en 22 segundos. Comparten un límite. No comparten una oración. Si más adelante superponés fragmentos a propósito, registrá esa superposición. Contá la evidencia repetida 1 sola vez.

Estas 2 filas agrupadas por significado forman la tabla de fragmentos que supera la prueba ficticia de abajo.

| chunk_id | source_video_id | source_url | language | start_seconds | end_seconds | original_cue_indices | text | cleaned_text_version |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| M1 | VID-DEMO-01 | ninguna, ficticio | en | 0 | 22 | 1, 2, 3, 4 | Guardá los documentos según el ID de su fuente. Conservá una versión cuando cambie la fuente. Una versión nueva no es una fuente nueva. | clean-1 |
| M2 | VID-DEMO-01 | ninguna, ficticio | en | 22 | 36 | 5, 6 | Eliminá una importación repetida idéntica solo cuando coincidan el ID de la fuente y la versión. Conservá las distintas versiones porque el texto puede cambiar. | clean-1 |

Las filas agrupadas por tiempo forman el conjunto de comparación. No son la tabla seleccionada.

| chunk_id | source_video_id | source_url | language | start_seconds | end_seconds | original_cue_indices | text | cleaned_text_version |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| T1 | VID-DEMO-01 | ninguna, ficticio | en | 0 | 15 | 1, 2, 3 | Guardá los documentos según el ID de su fuente. Conservá una versión cuando cambie la fuente. | clean-1 |
| T2 | VID-DEMO-01 | ninguna, ficticio | en | 15 | 22 | 4 | Una versión nueva no es una fuente nueva. | clean-1 |
| T3 | VID-DEMO-01 | ninguna, ficticio | en | 22 | 29 | 5 | Eliminá una importación repetida idéntica solo cuando coincidan el ID de la fuente y la versión. | clean-1 |
| T4 | VID-DEMO-01 | ninguna, ficticio | en | 29 | 36 | 6 | Conservá las distintas versiones porque el texto puede cambiar. | clean-1 |

Las preguntas se fijaron antes de evaluar cualquiera de las agrupaciones. También se fijó la cantidad de fragmentos seleccionados. Es 1 fragmento. La selección es manual. No se ejecutó ninguna búsqueda con embeddings. No se utilizó ninguna base de datos.

Pregunta 1: ¿Qué identifica un documento y qué ocurre cuando cambia? La respuesta necesita 3 proposiciones. El documento está vinculado a un ID de fuente. Un cambio implica conservar una versión. Una versión nueva no es una fuente nueva.

Pregunta 2: ¿Cuándo se puede eliminar una importación repetida y por qué se deben conservar otras versiones? La respuesta necesita 2 proposiciones. Eliminala solo cuando coincidan el ID de la fuente y la versión. Conservá otras versiones porque el texto puede cambiar.

Pregunta 3: ¿Cuántos dólares cuesta el almacenamiento? Ninguna línea de subtítulo indica un costo en dólares. La fuente no puede responder.

La selección manual inventada para la pregunta 1 es T1 en la agrupación por tiempo y M1 en la agrupación por significado. T1 contiene el ID de la fuente y la proposición sobre conservar una versión. T1 termina en 15 segundos, por lo que le falta la línea de subtítulo 4. Sin la línea de subtítulo 4, una versión nueva se puede interpretar por error como un documento nuevo. Ese contraste es la condición. M1 conserva las 3 proposiciones. La línea de subtítulo 4 por sí sola tampoco serviría, porque le faltan el ID de la fuente y la proposición sobre conservar una versión. Ningún fragmento individual de la agrupación por tiempo contiene las 3. Unir T1 y T2 volvería a reunir las proposiciones, pero eso supone una regla de 2 fragmentos. Esta prueba no usa una regla de 2 fragmentos.

La selección manual inventada para la pregunta 2 es T3 en la agrupación por tiempo y M2 en la agrupación por significado. T3 contiene la regla de eliminación. Le falta la razón. La razón es que el texto puede cambiar. Sin esa razón, la regla de eliminación parece tener un alcance más amplio que el de la lección. T4 contiene la razón y le falta la regla de coincidencia. Ningún fragmento individual de la agrupación por tiempo contiene ambas proposiciones. M2 contiene las 2.

Ningún fragmento contiene una proposición que respalde una respuesta a la pregunta 3. Que un fragmento mencione el almacenamiento no significa que indique un precio. Ambas agrupaciones deben marcarse como sin respaldo. La respuesta indica que la fuente no puede responder.

| pregunta | se puede responder | proposiciones necesarias | fragmento por tiempo seleccionado | fragmento por tiempo completo | fragmento por significado seleccionado | fragmento por significado completo | segundos de la cita |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Q1 | sí | ID de la fuente; conservar una versión cuando cambie la fuente; una versión nueva no es una fuente nueva | T1 | no | M1 | sí | 0-22 |
| Q2 | sí | coincidencia del ID de la fuente y la versión; el texto puede cambiar | T3 | no | M2 | sí | 22-36 |
| Q3 | no | ninguna línea de subtítulo indica un costo en dólares | ninguno | sin respaldo | ninguno | sin respaldo | ninguno |

Esos intervalos de cita incluyen momentos distintos.

| pregunta | segundos | línea de subtítulo | función |
| --- | --- | --- | --- |
| Q1 | 0-6 | 1 | ID de la fuente, conservado en el texto |
| Q1 | 5-9 | 2 | misma línea hablada, texto eliminado, número de línea de subtítulo conservado |
| Q1 | 9-15 | 3 | conservar una versión cuando cambie la fuente |
| Q1 | 15-22 | 4 | una versión nueva no es una fuente nueva |
| Q2 | 22-29 | 5 | eliminar una repetición solo cuando coincidan el ID de la fuente y la versión |
| Q2 | 29-36 | 6 | conservar otras versiones porque el texto puede cambiar |

La puntuación aquí es un recuento de verificaciones superadas. El respaldo completo usa solo las preguntas que se pueden responder.

Respaldo completo = preguntas que se pueden responder cuyo fragmento seleccionado contiene todas las proposiciones necesarias / preguntas que se pueden responder

Agrupación por tiempo = 0/2

Agrupación por significado = 2/2

Abstenerse significa no responder. El recuento de abstenciones usa solo la pregunta para la que no hay evidencia en los subtítulos.

Abstención = negativas correctas a responder / preguntas sin respaldo = 1/1

No sumes 1/1 al 2. La verificación de la pregunta sin respaldo se hace por separado.

Estas fracciones corresponden solo a esta comparación manual inventada. No son una evaluación comparativa de embeddings. Una evaluación comparativa daría una puntuación medida en una prueba. Tampoco representan una mejora medida de la calidad. Una mejora de la calidad sería un avance demostrado en búsquedas reales. No deduzcas una mejora para otros videos. En otro video, un fragmento breve agrupado por tiempo podría contener ya todas las proposiciones. En ese caso, la agrupación más simple que supere la prueba podría ser la agrupación por tiempo.

Una respuesta ficticia debe citar un momento dentro del intervalo conservado. Un revisor posterior verifica la reproducción. VID-DEMO-01 no tiene una página real, así que el paso de reproducción también es ficticio. En un video real, usá la función de [navegación por líneas de subtítulos de YouTube](https://support.google.com/youtube/answer/15930243?hl=en).

Respuesta ficticia a la pregunta 1: "El ID de la fuente identifica el documento. Cuando cambie la fuente, conservá una versión. Una versión nueva no es una fuente nueva." Cita: VID-DEMO-01, 0-22 segundos, líneas de subtítulos 1, 2, 3 y 4. Las proposiciones habladas están en las líneas de subtítulos 1, 3 y 4. La línea de subtítulo 2 es solo el registro de eliminación.

Respuesta ficticia a la pregunta 2: "Eliminá una importación repetida idéntica solo cuando coincidan el ID de la fuente y la versión. Conservá las distintas versiones porque el texto puede cambiar." Cita: VID-DEMO-01, 22-36 segundos, líneas de subtítulos 5 y 6.

Respuesta ficticia a la pregunta 3: "La fuente no puede responder. Ninguna línea de subtítulo indica un costo de almacenamiento en dólares." No hay un intervalo de cita.

Con la regla de 1 fragmento, la agrupación por significado es la que contiene el contexto necesario. Cada respuesta cabe en 1 fragmento y los tiempos siguen siendo claros. La agrupación por tiempo tiene fragmentos más cortos, pero deja afuera una proposición. Para este caso inventado, conservá M1 y M2. No tomes esa elección como una regla para todos los videos. Aplicá las mismas 7 acciones a tu propio archivo [antes de agregar más videos](/es/articles/crear-corpus-transcripciones-youtube/).

## Próxima acción

Elegí 1 video que ya conozcas. Usá [YouTube Transcript Scraper](https://apify.com/chronometrica/youtube-transcript-scraper) y la Task [YouTube Transcripts for RAG Pipelines](https://apify.com/chronometrica/youtube-transcript-scraper/examples/youtube-transcripts-for-rag). Conservá el JSON con marcas de tiempo. Creá 2 conjuntos de fragmentos. Probá con preguntas conocidas antes de agregar más videos.

## Fuentes y lecturas adicionales

- [Artículo original sobre RAG](https://arxiv.org/abs/2005.11401)
- [Navegación por líneas de subtítulos de YouTube](https://support.google.com/youtube/answer/15930243?hl=en)
- [Extracción de subtítulos de YouTube](https://chronometrica.com/es/articles/extraccion-de-subtitulos-de-youtube/)
- [YouTube Transcript Scraper](https://apify.com/chronometrica/youtube-transcript-scraper)
- [YouTube Transcripts for RAG Pipelines](https://apify.com/chronometrica/youtube-transcript-scraper/examples/youtube-transcripts-for-rag)