Dudas sobre framerates recomendados: 24fps? 30fps? pueden usarse valores no enteros?

Guillermo Luijk

Fujista Habitual
En ocasiones construyo vídeos a partir de frames individuales (son vídeos cortos de un par de minutos, pero pueden requerir 2000-3000 imágenes o frames totales). Con ellos genero un archivo de vídeo MP4 en el cual incrusto una pista de audio en formato WAV. Lo hago con la utilidad FFMpeg usando un comando del tipo:

ffmpeg -framerate 150 -i img%4d.png -i secretspectrogram.wav -c:v libx264 -crf 18 -pix_fmt yuv420p secretspectrogram.mp4
ffmpeg -framerate 30.8775 -i img%5d.png -i secretspectrogramSTARWARS.wav -c:v libx264 -crf 18 -pix_fmt yuv420p secretspectrogramSTARWARS.mp4

La pregunta es: para asegurar una reproducción suave sin saltos, tanto en un PC como desde un móvil, hay unos framerate recomendables/obligatorios? se me está yendo la pinza con un framerate de 150fps (primer vídeo)? o por meter decimales en los 30.8775fps (segundo vídeo)? de qué depende que la reproducción sea suave, de la potencia del dispositivo donde se ve el vídeo o hay algo más?

El primer vídeo lo hice a 150fps para tener un scroll suave y se reproduce perfectamente en mi portátil. En cambio en el móvil da algún que otro saltito casi imperceptible:


El segundo vídeo es mucho menos exigente, pero tiene un framerate que no es entero: 30.8775fps


Éste se me reproduce con algunos saltos tanto en el portátil como en el móvil, curioso cuando demanda unas 5 veces menos fps que el otro vídeo.

El audio de ambos vídeos se reproduce 100% bien en cualquier dispositivo.

Quizá deba cambiar los parámetros de mmpeg, siempre uso los mismos que puse arriba. Tengo anotado este significado:

-c:v libx264: codec H.264 (AVC=Advanced Video Coding). Interframe codec (codifica los cambios de un frame al siguiente)
-crf: calidad (constant bit rate), defecto=23, sin pérdida=0, no mejora por debajo de 18
-pix_fmt yuv420p: should be used to enable 4:2:0 downsampling for the PNG input, which usually isn't downsampled at all
(4:4:4, as observed in your output) and often contains an Alpha channel. YouTube won't handle this correctly.

Por cierto los vídeos que he enlazado representan el espectro del sonido que reproducen, con mensajes ocultos en él. De ahí que salgan letras e imágenes.

Salu2!
 
No he visto los vídeos que has creado.
Pero tienes que entender que cada dispositivo de salida (pantalla, proyector,) trabaja a unos ciertos hz (herzios) (o la cantidad de veces que el monitor/proyector refresca la imagen) y estos están muy ligados a cómo reproduzcan los vídeos. Aparte los sistemas operativos de estos dispositivos también trabajan a ciertos hz, que de nuevo te condicionan el visionado de tus vídeos. Luego también los programas usan otros hz a veces.
No se como puesto estás sobre los hz y su correlación con los distintos frame rates, es un tema bastante complejo para escribir en un post.
Para acortar todo lo que sería una explicación densa y larga, el problema viene cuando los hz de tu dispositivo y el frame rate están descompensados.
Es decir, que no trabajan conjuntamente y se producen descompensaciones. Esas descompensaciones es lo que produce los saltos que mencionas.
Tu monitor (y SO) refresca a 60hz y tú le pones un vídeo a 45fps. La subdivisión no es perfecta y cada cierto tiempo hay un salto en la imagen para compensarlo.
Si tu monitor refresca a 60hz y le pones un video de 30fps, lo único que hay que hacer es repetir cada imagen 2 veces y tienes una reproducción perfecta.
Eso sería la explicación más básica.

En cuanto a los hz de reproducción de cada dispositivo pues varía. Lo más común en móviles y monitores es 60hz. Los iPhones pro e imagino que algunos android tope de gama van a 120hz, que es muy interesante porque es 5 veces más que 24, que es el frame rate del cine. Luego las TV en España, suelen ir a 60hz o 50hz (se adaptan), cosa buena porque las emisiones de TV van a 25fps. El fútbol y deporte suele ir a 50/60fps. Algunas TV y monitores tienen modos 24hz para películas.
Pero uno de mis portátiles va a 90hz y un monitor que tengo en casa va a 240hz. Hay mucha variedad ahí fuera.
Luego está el tema personal, como humanos percibimos la fluidez de la imagen de manera distinta. A unos 24fps les parece suficiente para ver una fluidez de movimiento y a otros 24 no es suficiente. También no todos podemos percibir los distintos frames igual. Mi pareja no diferencia nada pasados 40/50fps y yo hasta 100fps puede notarlo, y si le preguntas a un adolescente gamer son capaces de decirte si algo va a menos de 200fps.
De nuevo, todo esto es bastante complejo pero con estos detalles si quieres investigar tienes por donde meterle mano.
Un saludo.
 
Tengo claro que generar un video a 150fps no garantiza que la pantalla vaya a reproducirlos, lo normal será que se descarten frames en función del refresco del monitor. Lo que no entiendo es cómo el video generado a 150fps se reproduce bien (lo cual no me extraña en realidad porque tiene frames de sobra para elegir o descartar los que quiera de forma equiespaciada) y en cambio el otro mucho menos exigente, aunque siguiendo una cifra "extraña" por poco estándar, genera saltos visibles. Éste es el que no entiendo salvo que lo de elegir una cifra decimal de fps no sea recomendable.

Aunque sólo sea por hacer la prueba voy a generar el segundo video a 30 fps exactos a ver lo cómo se ve.

Salu2!
 
XC 35 F2 en Amazon
Tengo claro que generar un video a 150fps no garantiza que la pantalla vaya a reproducirlos, lo normal será que se descarten frames en función del refresco del monitor. Lo que no entiendo es cómo el video generado a 150fps se reproduce bien (lo cual no me extraña en realidad porque tiene frames de sobra para elegir o descartar los que quiera de forma equiespaciada) y en cambio el otro mucho menos exigente, aunque siguiendo una cifra "extraña" por poco estándar, genera saltos visibles. Éste es el que no entiendo salvo que lo de elegir una cifra decimal de fps no sea recomendable.

Aunque sólo sea por hacer la prueba voy a generar el segundo video a 30 fps exactos a ver lo cómo se ve.

Salu2!
Que usas para reproducir el vídeo?
Supongamos que lo reproduces a 60hz, tu SO o App quita frames al archivo de vídeo y estás viendo 60fps en un monitor de 60hz. Se ve perfecto.
No es una cuestión de exigencia de equipo o potencia. Quitar frames es un cálculo básico para los equipos de hoy en día.
30 coma algo frames no es divisible en un monitor de 50/60hz, por eso ves saltos, ves la descompensación. Por eso no es aconsejable. Pero no tiene que ver con decimales, porque realmente los videos de 30fps suelen ser 29.97 reales.
Que luego tú SO o App sea capaz de ser más o menos hábil para corregir eso es también otra conversación aparte.
 
Pues he generado dos veces más el vídeo, una a 30fps y otra a 24fps:
  • Ambos se ven sin saltos en el ordenador (W10 con la gráfica configurada a 60Hz). Obviamente van menos suaves (el de 24) y no sirven porque la música se desincroniza con el vídeo terminando antes, pero ya no se "comen" frames.
  • En cambio en el móvil la versión de 30fps sigue produciendo saltos cada cierto número de frames, hay que ir a la versión de 24fps para que se vea sin saltos. Esto no me extraña porque en su día rebajé a bajo consumo el refresco de la pantalla para gastar menos batería así que debe ser eso.

En adelante generaré los frames ya con 30fps exactos en mente y no al revés (calcular los fps a posteriori).

Otro motivo por el que se note tanto, es que me parece que es un vídeo especialmente criminal con los saltos al consistir en letras haciendo scroll y canta mucho que de repente avancen el doble de lo que debieran. Probablemente en los vídeos normales de imagen ni se noten esos frames que se "pierden".

img00098.png


Salu2!
 
Atrás
Arriba