Hoy me di cuenta de que cuando uso ffmpeg 4.0 estable para decodificar algunos archivos TS en y4m o ffv1, ocasionalmente se saltan algunos cuadros. Mi archivo de entrada tiene todos los fotogramas grabados en la imagen y estoy extrayendo algunos fotogramas a intervalos regulares. A veces funciona bien sin ningún cuadro saltado, pero a veces salta uno o dos cuadros. Estoy usando el siguiente comando para decodificar mi entrada:
ffmpeg -i input.ts -vsync 0 output.y4m
y estoy extrayendo los marcos usando:
ffmpeg -ss xxx -i output.y4m -vframes 1 xxx.png
Estoy sustituyendo xxx con 0, 100, 200, etc. y, a veces, veo que se pierden 1-2-3 fotogramas, lo que es muy molesto porque estoy tratando de evaluar el PSNR después y esto estropea toda la evaluación del PSNR/SSIM.
[EDITAR] He ejecutado el comando que sugirió @Gyan:
ffmpeg -v 99 -loglevel 99 -i test.ts \
-c:v rawvideo -vsync 0 \
-enc_time_base 1/1000 output.nut &> test.log
Y aquí está el archivo de registro test.log
Y4M no tiene marcas de tiempo, solo velocidad de fotogramas en su encabezado. Entonces, si su fuente tiene alguna variabilidad en su velocidad de fotogramas, verá un cambio en la marca de tiempo aparente en el Y4M.
p.ej
n src y4m
0 0 0
1 0.04 0.04
2 0.07 0.08
3 0.12 0.12
4 0.21 0.16
5 0.24 0.20
6 0.27 0.24
...
Durante un largo período, estas perturbaciones pueden sumarse. Aquí, el marco #6 en src está en TS de src #5 en Y4M.
Editar : el archivo TS de muestra tiene marcas de tiempo VFR.
Usar -c:v rawvideo -vsync 0 -vf setpts=N/FRAME_RATE/TB -an
y guardar en .nut
.
Georgi Stoyanov
ffmpeg -i input.ts -c:v rawvideo -vsync 0 -enc_time_base 1/1000 output.nut
pero desafortunadamente pierdo un cuadro cada ~ 1000 cuadros y esta es una pérdida bastante constante. Intenté agregar-an
, eliminar-enc-time-base
pero siempre deja caer un cuadro cada ~ 1000 cuadros. De hecho, ffmpeg 3.2.4 funciona mejor en este sentido y no pierde fotogramas con la misma entrada.gian
Georgi Stoyanov
gian
Georgi Stoyanov
gian
Georgi Stoyanov
gian
ffmpeg -i input.ts -vsync 0 output.y4m
y luegoffmpeg -ss xxx -i output.y4m -vframes 1 xxx.png
yffmpeg -ss xxx -i input.ts -vframes 1 xxx-ts.png
para comparar. Obtengo el mismo marco para 5-6 valores que probé. ¿Puedes identificar algunosss
valores que muestren el problema?Georgi Stoyanov
ffmpeg -i test.ts -c:v rawvideo -vsync 0 -enc_time_base 1/1000 output.nut
Obtengo aproximadamente una caída de fotogramas cada 1000 fotogramas. Puede intentar extraer los fotogramas cada 3000 fotogramas (60 segundos). Creo que la duración total es de 5 minutos, por lo que puede usar -ss 0 - para obtener el primer cuadro de la secuencia y luego -ss 60, -ss 120, -ss 180, -ss 240, -ss 300. Conffmpeg -i input.ts -vsync 0 output.y4m
estoy obteniendo más caídas aleatorias, a veces es solo un cuadro durante toda la duración, a veces más. Tenga en cuenta que en realidad el archivo está en bucle y hay un marco omitido: 14998.Georgi Stoyanov
gian
Georgi Stoyanov
ffmpeg -i input.ts -vsync 0 output.y4m
comando a veces saltaba uno o dos fotogramas o, a veces, funcionaba perfectamente bien. ¿Cómo comprobó también el archivo para VFR y CFR? ¿Hay un comando en ffprobe para verificarlo?gian
VFR:0.400005 (15185/22777) min: 1801 max: 3604)
. El 40% de los fotogramas tienen una duración no estándar. Todos deberían tener 1800 unidades en este archivo.Georgi Stoyanov
detvfr
filtro y me mostró la desviación. Me pregunto por qué el archivo TS tiene VFR, ya que lo grabé con ffmpeg y estoy bastante seguro de que la entrada tiene CFR. ¿Debo usar-re
el comando de grabación en este caso para preservar la velocidad de fotogramas de entrada (duración)? ¿Puede sugerir también un comando de grabación que no corte el relleno nulo (relleno) del TS?gian
-vsync cfr
y también-r
si ese valor es diferente de los fps de entrada nominales.Georgi Stoyanov
gian
Georgi Stoyanov
gian
Georgi Stoyanov