¿Cómo puedo extraer clips de una fuente de transmisión de video casi en tiempo real?

Un cliente quiere que escriba un software, tal vez ffmpeg envuelto en secuencias de comandos, que monitoreará una transmisión de video y copiará clips casi en tiempo real, entregándolos como archivos de video independientes. No es aceptable que espere a que finalice la transmisión y que el video se almacene completamente como un archivo local antes de copiar los clips. Por otro lado, puedo tomar, digamos, decenas de segundos después de la hora de finalización del clip antes de entregarlo. ¿Puedo hacer esto sin construir una suite de procesamiento de video desde cero? ¿Debo exigir que la transmisión de video en tiempo real tenga un formato determinado?

Digamos que la transmisión de video es de un evento en vivo de 1 hora. En algún momento, tal vez 5 minutos después, mi software puede recibir el comando "recortar de 4 minutos 30 segundos a 6 minutos 0 segundos, guardar como archivo X.mpg". Tengo que aprovechar la fuente de video, copiar 90 segundos de video y almacenarlo como archivo X.mpg, aproximadamente 7 minutos después. Los tiempos reales son más flexibles, solo quiero enfatizar que debo poder aprovechar la fuente de transmisión en progreso, no puedo esperar por un archivo de video estático.

Ni siquiera sé si los formatos de transmisión de video permiten este tipo de operación. Si un receptor escribe la fuente en el disco, ¿será el comienzo del archivo una sintaxis legal que una herramienta normal como ffmpeg puede analizar?

No conozco los detalles de los formatos de codificación, pero entiendo que almacenan fotogramas clave cada cierto tiempo, y los fotogramas de video intermedios se almacenan como diferencias con el fotograma clave y/o los fotogramas anteriores. ¿Es importante saber cuándo se añaden los fotogramas clave? ¿Pueden las herramientas normales analizar el video más allá del cuadro clave más reciente al cuadro que se acaba de escribir, o los datos en el archivo almacenado aún estarían en algún estado temporal y, por lo tanto, aún no se pueden analizar?

O, ¿copiar clips de video de la transmisión de video es una tarea difícil que requiere un software más sofisticado que ffmpeg o similar, envuelto con scripts?

Se agradecen los consejos sobre formatos específicos y las cadenas de herramientas que lo hacen posible.

Respuestas (1)

Esto es bastante sencillo si guarda en un formato de transmisión como Flash Video (FLV) o MPEG-Transport Stream (MPEG-TS) .

Digamos que este es su comando de captura de feed completo

ffmpeg -i source {-transcoding options} localfile.flv

A continuación, puede ejecutar

ffmpeg -ss 6:12 -i localfile.flv -t 1:05 -c copy extract.mp4

Idealmente, la transmisión debería estar pasada las 7:17 o cerca de ella cuando ejecute el último comando. Tenga en cuenta que dado que el segundo comando no se transcodifica, la búsqueda en el punto de entrada no es precisa. La extracción comenzará desde el fotograma clave más cercano anterior al punto de entrada especificado.