¿Existe un contenedor de video que pueda manejar segmentos de video de diferente calidad (o incluso tamaño)?

Supongamos que tengo un video de 10 minutos de duración. Y quiero reducir su tamaño teniendo algunas partes con una tasa de bits alta, mientras que otras partes menos importantes pueden tener una tasa de bits baja. Para esto cortaría el original en segmentos. Dejar las importantes como están, mientras se transcodifican las partes sin importancia a una calidad inferior.

ingrese la descripción de la imagen aquí

Ahora bien, ¿existe algún formato de contenedor de video que pueda "pegar" estas diferentes partes en un solo archivo ? ¿Con un buen soporte en los reproductores, el confiable mplayer reproducirá el video como si fuera un archivo ordinario? ¿Y de una manera estandarizada/anotada/deshacer para que un simple comando cli desenredara los segmentos en partes/archivos separados nuevamente?

Tenía la impresión de que Matroska podría hacer esto, a través de capítulos, donde cada uno de mis segmentos sería un capítulo. (Lo he leído en alguna parte donde se discutió la fusión de videos sin transcodificación). Pero cuando leo los documentos de mkv reales, parece que los capítulos de mkv son más como un índice textual que apunta a otra secuencia (de video) de un archivo .mkv, y no un tipo de índice de bloque de datos de bajo nivel que me ayudaría con mi idea. Entonces mkv parece un callejón sin salida.

La simple edición o fusión (que es posible sin pérdida, con algo de remuxing) no me ofrecería tener diferentes cualidades en diferentes secciones del video, ¿verdad?

Lo que busco es calidad adaptada a la región de interés , algo que ofrecen formatos de imagen como JPEG2000 para áreas espaciales, solo que aquí se aplica al video a lo largo del tiempo.

¿Alguna sugerencia o idea?

La respuesta aceptada sugiere usar las capacidades VBR de un formato como mp4. Mientras esto funciona, deje una respuesta si conoce una forma diferente de lograr el resultado deseado.

Respuestas (3)

Si la única diferencia es la tasa de bits, entonces cualquier contenedor que acepte transmisiones de tasa de bits variable cumplirá con sus requisitos, por ejemplo, MP4, MKV, etc.

El paso 1 es codificar sus segmentos, idealmente usando el mismo codificador, a diferentes tasas de bits con todos los demás parámetros iguales, por ejemplo, a través de ffmpeg ,

ffmpeg -ss 0 -t 5 -i input.mp4 -b:v 1000k seg1.mp4

ffmpeg -ss 5 -t 7 -i input.mp4 -b:v 3000k seg2.mp4

ffmpeg -ss 12 -i input.mp4 -b:v 500k seg3.mp4

El paso 2 es usar ffmpeg para concatenar los segmentos codificados en modo de copia, usando el demuxer concat.

Preparar un archivo de texto

file 'seg1.mp4'
file 'seg2.mp4'
file 'seg3.mp4'

y luego

ffmpeg -f concat -i list.txt -c copy joined.mp4

Los clips con diferentes propiedades, como la resolución, también se pueden unir en un MP4, pero la compatibilidad entre los reproductores multimedia es dudosa , y ffmpeg no lo hará de manera confiable en la actualidad, de todos modos.

¡Interesante! Siempre he tenido otra concepción de lo que es y hace VBR, en términos de "granularidad". Intentaré eso. Además, esperaré un poco más hasta que probablemente marque tu respuesta como la aceptada.
Después de probarlo y encontrar que funciona (tanto en vbr como en tamaño variable), encontré un problema menor: cuando edito un segmento "tal cual" con "-vcodec copy", el concat informará 1 . "Filtro de flujo de bits de inserción automática h264_mp4toannexb" (parece estar bien), 2. "DTS no monótono en el flujo de salida" (arg!!) para ese segmento. ¿Hay alguna manera de hacer una copia de transmisión (sin volver a codificar), pero eliminando las marcas de tiempo? Según tengo entendido, filtrar la salida/este segmento de tal manera corregiría este error de DTS (aunque el video se reproduce de todos modos).
ffmpeg, de manera predeterminada, genera nuevas marcas de tiempo, a menos que use los muxers de segmento o proporcione una marca como copyts. ¿Con qué comando te da el error?
Command es lo que sugirió: ffmpeg -f concat -i list.txt -c copy joined.mp4, y los comandos de segmento de ejemplo, solo el del medio se modificó para ser ... -i input.mp4 -vcodec copy seg2.mp4. Probado con ffmpeg 2.8.1, mi Ubuntu avconv aún no sabe acerca de concat.
ah Con la copia de transmisión, el corte no es exacto. Tendrá que insertar -avoid_negative_ts make_zero, pero es probable que se repita con el segmento anterior.
¿En el paso de segmentación o concatenación? Intenté ambos. Una variante incluso me dio un error adicional de "Paquete con duración no válida". Lo siento por esto aquí convirtiéndose en un hilo... Además, make_zeroes el valor para el -avoid_negative_tscambio, a la derecha. ¿Dónde están los documentos para ello?
Tuve un éxito limitado al agregar -copyts -start_at_zerocada segmentación, no más advertencias de DTS en concat, pero el video no se reprodujo correctamente.
Si está volviendo a codificar, no necesita esas banderas. Si no lo eres, esos dos no ayudarán. ¿Tiene la intención de segmentar todo el archivo?
Ahora mismo estoy pegando comandos para reproducir, en el chat.

El formato de creación avanzado (AAF) y algunos patrones operativos MXF (OP-2a, 2b, 3a y 3b) deberían poder combinar velocidades de bits. Digo "debería" porque no tengo ninguna buena forma de probar en este momento y no conozco ningún sistema comercial que esté haciendo un uso intensivo de esos MXF OP.

Bueno, no puedo decir que sepa cómo se haría; pero RED (www.red.com), su formato de video R3D utiliza un proceso de debate.

Soy dueño de un RED Epic. Dispara hasta 5K 100 FPS.

Cuando está en el campo y quiere ver el video en, por ejemplo, una computadora portátil, el rendimiento de 3:1 5K sin comprimir (o casi) es enorme.

Entonces, RED usa un proceso de debayer; donde los píxeles se asignan básicamente en un patrón de cuadrícula en términos de cómo se codifican y decodifican.

Así que esto elimina la necesidad de archivos "proxy", archivos que se reducen para su edición porque su sistema simplemente no puede reproducir el archivo en tiempo real.

El Debayer es de 8 niveles. Y el reproductor RED (así como el software que lo admite, como PPro/After Effects), le permite reproducir al 100 %, 50 %, 25 %, 12,5 %, etc.

El aspecto único con RED es que cuando su computadora hace esto, en realidad no está bajando la calidad, solo está mostrando la calidad x/100 que desea.

Entonces, quizás mi respuesta sea un poco retrógrada al pensar: pero esencialmente con los archivos RED, tiene una versión de 1K, 2K, 3K, 4K, 5K, todo envuelto en 1 archivo.

Espero que esto ayude un poco, aunque no es una respuesta a la pregunta real.

Esta "respuesta" en realidad no es la pregunta que se hizo. No aborda cómo manejar el problema en general (uno no puede transcodificar desde cualquier formato de video aleatorio a RED RAW). Y que yo sepa, uno no puede cambiar los parámetros de compresión/debayer de RED sobre la marcha como una propiedad dinámica de los medios de RED.
Más bien un ex-curso sobre formatos de archivo, pero de todos modos gracias por el esfuerzo.
Creo que dije claramente que no estaba cambiando los parámetros de "debayer/compression"; meramente la reproducción de tales. También especifiqué que la respuesta no se relaciona directamente con la pregunta, más aún con el "concepto".