Agregar información de código de tiempo al archivo

Estoy escribiendo un programa que interpreta las marcas de tiempo LTC de los canales de audio en archivos de video. El objetivo es eliminar la pista LTC y reemplazarla con algún tipo de marcas de tiempo nativas directamente en el archivo de video, de manera que los NLE posteriores puedan interpretar correctamente, por ejemplo, para líneas de tiempo de múltiples cámaras.

He hecho el análisis de LTC, por lo que para cada cuadro del video, puedo decir cuál es su marca de tiempo. ¿Cómo codifico eso en contenedores como .MP4 y .MOV? Sería más simple si pudiera hacerlo con ffmpeg.

¿Cuál es la velocidad de fotogramas?
LTC se fija en 24 fps; la velocidad de fotogramas del video puede variar entre 23,9 y 60. Es curioso cómo afecta esto al problema.
Como simplificación, y haciendo algunas suposiciones sobre las bases de tiempo, solo estoy usando LTC para calcular el código de tiempo para el primer cuadro de video. Para cada otro cuadro en el archivo, simplemente agrego el desplazamiento del cuadro desde el principio del archivo al código de tiempo del primer cuadro.
Los MP4 y MOV almacenan solo el TC del primer fotograma, como un recuento de fotogramas literal, junto con la velocidad de fotogramas. La aplicación consumidora vuelve a convertir ese recuento de fotogramas en una cadena TC utilizando la velocidad de fotogramas. Para TC drop-frame, ffmpeg solo admite 30 y 60 fps. Agregaré 24/48 cuando tenga tiempo y una referencia SMPTE que pueda consultar. Para TC sin caída, cualquier fps está bien. Agregar -timecode HH:MM:SS:FFa su cmd. Úselo ;para el separador final si TC es drop frame.
¡Esto es genial! En esta etapa del proyecto, esto es suficiente. Si pone esto como respuesta, me gustaría aceptarlo para cerrar la pregunta original. Pero su respuesta genera más preguntas :=) 1) Deduzco de su respuesta que tanto MP4 como MOV almacenan el indicador DF/NDF junto con la velocidad de fotogramas. 2) Pensé que DF solo existía por 29,98 (y, por extensión, por 59,94). He estado usando esta referencia para mi código LTC: itu.int/dms_pubrec/itu-r/rec/br/… 3) Deduzco de su respuesta que usted es un mantenedor de ffmpeg. ¿En qué partes trabajas?
4) ¿Qué otros contenedores comunes admiten -timecode? 5) Leyendo -timecodeen el manual, veo el -timestampparámetro. ¿Cuál es la relación entre estos? ¿Se -timestamprefiere al primer cuadro o al último (es decir, cuando el archivo terminó de escribirse)? Si estos dos parámetros escriben campos diferentes en un archivo, ¿los NLE los interpretan de manera diferente?
@iter, te sugiero que crees nuevas preguntas para todas las que preguntaste en los comentarios. Obtendrá más exposición de esa manera. Los comentarios no son realmente para hacer nuevas preguntas o discusiones extensas. Si necesita continuar la discusión, muévalo al chat.

Respuestas (1)

@Gyan da la respuesta en los comentarios:

Los MP4 y MOV almacenan solo el TC del primer fotograma, como un recuento de fotogramas literal, junto con la velocidad de fotogramas. La aplicación consumidora vuelve a convertir ese recuento de fotogramas en una cadena TC utilizando la velocidad de fotogramas. Para TC drop-frame, ffmpeg solo admite 30 y 60 fps. Agregaré 24/48 cuando tenga tiempo y una referencia SMPTE que pueda consultar. Para TC sin caída, cualquier fps está bien. Agregue -timecode HH:MM:SS:FF a su cmd. Utilizar ; para el separador final si TC es drop frame.