Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿FFmpeg concat avisa de DTS no monótonos? Audita los tiempos antes de aceptar la unión

Una unión por copia de flujos puede conservar cada fotograma decodificado y comprimir el tiempo de reproducción. Compara parámetros, duración de segmentos y ambos tipos de marcas antes de reparar.

Diagrama original de parámetros, límites de paquetes y verificaciones separadas de contenido y tiempo
Ilustración conceptual original: compara flujos correspondientes, inspecciona ambas marcas temporales y valida contenido decodificado y reproducción por separado. Watch at Ease

El aviso de DTS no monótonos de FFmpeg no demuestra por sí solo que se hayan eliminado fotogramas. Tampoco es prueba de corrección que el comando termine correctamente. Una concatenación puede conservar las imágenes decodificadas mientras les asigna una línea temporal de reproducción equivocada.

Conserva primero las entradas, la lista concat, el comando completo y el registro. Comprueba el flujo señalado en el aviso y distingue parámetros incompatibles, duración de segmento incorrecta y marcas temporales realmente ausentes. Valida contenido y tiempo como resultados separados antes de sustituir la copia de trabajo.

Conserva las pruebas e identifica el flujo real

Deja intactos los clips originales y escribe las pruebas con nombres de salida nuevos. Guarda la versión completa de FFmpeg, lista concat, comando, stderr y asignación de flujos. El índice de salida del aviso sigue esa asignación: no supongas que 0:1 siempre es audio ni investigues únicamente el primer vídeo.

Ejecuta ffprobe -v error -show_streams -show_format -of json input.mp4 para cada entrada, sustituyendo la ruta. Compara cantidad y tipo de flujos correspondientes, códecs, time_base, geometría, formato de píxel, frecuencia de muestreo y distribución de canales. Conserva deliberadamente audio adicional, subtítulos o datos. Un comando exitoso con selección automática no prueba que estén todos los flujos necesarios.

Encuentra el límite antes de añadir opciones

Para el vídeo afectado, ejecuta ffprobe -v error -select_streams v:0 -show_packets -show_entries packet=pts_time,dts_time,duration_time -of json input.mp4; inspecciona a:0 o el flujo correspondiente aparte. JSON puede omitir valores no disponibles. Regístralos como desconocidos, no cero, y compara campos expresados en tiempo, no los contadores brutos de bases temporales distintas.

Comprueba los últimos paquetes pertinentes y las directivas duration, inpoint u outpoint de concat. El demultiplexor desplaza archivos posteriores usando la duración; un valor supuesto puede adelantar el siguiente segmento incluso con parámetros compatibles. Los cortes con compresión entre fotogramas pueden emitir paquetes alrededor del límite solicitado. La duración nominal del contenedor no equivale necesariamente a un corte editorial exacto.

Distingue marcas ausentes y una línea temporal errónea

La referencia actual define +genpts como generación de marcas de presentación ausentes cuando hay marcas de decodificación disponibles. Inspecciona PTS y DTS independientemente. Un informe que solo muestra DTS como N/A no demuestra ausencia de PTS. Ni un campo ausente ni un salto hacia atrás proporcionan un comando universal de reparación.

Del mismo modo, avoid_negative_ts desplaza las marcas; no establece compatibilidad de bases temporales ni una duración correcta de unión. Ocultar avisos bajando el nivel del registro cambia su visibilidad. Si pruebas una opción, conserva el registro original y compara tiempos de paquetes, duración y contenido necesario con la referencia.

Aplica una reparación medida y comprueba su alcance

Si la medición demuestra que solo es incorrecta la duración de concat, prueba una duration corregida sobre copias; no inventes un número para eliminar el aviso. Con flujos incompatibles, prepara copias compatibles o utiliza el filtro concat decodificado y vuelve a codificar. Exige flujos correspondientes y marcas de inicio cero, y hay que normalizar explícitamente la resolución.

Mantén juntos vídeo y audio sincronizados. El filtro usa la duración del flujo más largo de cada segmento no final y puede rellenar audio más corto con silencio. Distintas frecuencias de fotogramas pueden producir salida de frecuencia variable. Elige conscientemente el resultado. El éxito histórico de un usuario con MKV prueba ese caso, no que cambiar contenedor repare todas las entradas.

Valida contenido y tiempo de reproducción por separado

Probamos cuatro casos aislados de vídeo sin audio con Ubuntu FFmpeg 6.1.1. Dos clips H.264 de dos segundos se unieron correctamente en cuatro. Fijar la primera duration en 0,5 segundos produjo 37 avisos y una salida de 2,5 segundos; añadir +genpts no cambió el resultado. Otro caso con bases temporales diferentes produjo 50 avisos y 1,967031 segundos. Todos terminaron con código cero y conservaron la misma secuencia de hashes de 100 fotogramas decodificados.

Estas pruebas sintéticas no reproducen tus clips, audio ni un fallo de contenido perdido. SWGDE describe hashes de fotogramas y muestras decodificados como comprobación del contenido; las columnas temporales requieren otra comparación. Revisa uniones, contenido inicial y final reconocible, sincronización y duración total prevista en el resultado real. Coincidir en hashes o codificar sin avisos no certifica por sí solo los tiempos ni restaura bytes ausentes de la fuente.

Diagrama original de unión sintética con hashes de fotogramas iguales y duraciones diferentes
Ilustración conceptual original: la prueba de vídeo Ubuntu FFmpeg 6.1.1 conservó 100 fotogramas, pero redujo cuatro segundos a 2,5; genpts no corrigió la duración errónea. Watch at Ease