¿Metraje de 120 fps 720p con reproducción en tiempo real en Ubuntu? + edición?

Tengo una computadora portátil con una CPU i7, 1,73 GHz, 8 GB de RAM, Ubuntu 10.04 con una tarjeta gráfica "ATI Mobility Radeon HD 5800 Series". Tengo compiz habilitado (que puede ser uno de los culpables del problema a continuación).

Grabé algunos videos cortos en una resolución de 720p a 120 fps (GoPro Hero 3), almacenados en mi HD local. Los videos mp4 varían de 30 MB a 500 MB, por lo que son bastante pequeños.

Probé una variedad de reproductores, ninguno de los cuales parece responder en tiempo real. De hecho, el tiempo de respuesta es tan malo que obtengo algunos cuadros bastante rápido al principio, pero luego solo el cuadro impar cada segundo a 5 segundos y el sonido parece empalmado. Uno de mis 8 núcleos choca contra el suelo (100 %), los demás están esencialmente sin usar, con el proceso del reproductor de video funcionando al 98 %. Entonces, obviamente, este es mi factor limitante (¿no se pueden subprocesos múltiples?).

(mplayer, xine ambos intentan reproducir en tiempo real pero pierden muchos cuadros; vlc reproduce el sonido, pero muestra una representación impresionista y luego se atasca en un cuadro desde el principio; avidemux reproduce todos los cuadros pero aproximadamente 1/6 de la velocidad en tiempo real ; cinelerra reproduce solo algunos de los fotogramas y con bastante lentitud; kdenlive no me permite crear un proyecto de 120 fps; Kino convierte y reduce las muestras; Lives no puede seguir; OpenShot reproduce el sonido Ok, pero se atasca en el primer fotograma)

La reproducción de material de archivo estándar de 1080p a 30 fps utiliza aproximadamente el 65 % de un núcleo. Esperaba que jugar a 120 fps dejara caer fotogramas, pero no en la medida en que solo veo uno cada pocos segundos. De hecho, pensé que jugaría aproximadamente 1 de cada 4, lo que sería excelente para mi propósito.

Así que realmente agradecería si alguno de ustedes tuviera alguna pista sobre cómo debo configurar mi tarjeta de video, sistema o lo que sea para obtener una mejor capacidad de reproducción, es decir, reproducción en tiempo real con mi metraje sin procesar (sin conversión o reducción de muestreo antes de visita).

Esto también afecta mi capacidad para editar los videos, ya que no puedo saber lo que estoy viendo en tiempo real, lo cual es muy inconveniente al editar. No quiero reducir la muestra para la primera etapa de edición, ya que primero quiero tener una idea del video completo y elegir qué secciones reducir la velocidad para la cámara lenta y qué secciones reducir la muestra para la reproducción normal en tiempo real. .

¿Ha echado un vistazo a lo que está haciendo su máquina, por ejemplo, ejecutar arriba para ver la carga? Debe averiguar dónde está el cuello de botella: si es IO, CPU o algo más.

Respuestas (4)

Si bien es cierto que el video de 720p solo tiene aproximadamente la mitad de los datos de una fuente de 1080p, la otra cosa que debe tener en cuenta es que cuando empuja el sistema más allá de su límite, puede pasar mucho tiempo tratando de procesar cuadros que no puede. no termine a tiempo. Dependiendo de cómo esté configurado el reproductor, puede darse por vencido e intentar ponerse al día en lugar de terminar de renderizar el cuadro y atrasarse más.

Debido a esto, tan pronto como se atrasa, ahora puede terminar encontrando que es mucho más difícil que lo alcance. También tiene problemas para mantener el flujo de datos lo suficientemente rápido, ya que el nivel de compresión parece ser más alto (más difícil de decodificar) y la CPU está tan ocupada que no puede estar trabajando en mover datos para estar listos para leer.

Probablemente debería transcodificar el video a una velocidad de fotogramas más baja y trabajar con la copia transcodificada para tomar decisiones de edición y luego cambiar el video de alta velocidad de fotogramas solo al final. Después de todo, la única diferencia que hará el video de 120 fps en la salida final es en cualquier lugar donde termine haciendo un efecto de cámara lenta, ya que no tendrá ninguna pantalla (incluida la pantalla de su computadora) que realmente pueda cargar 120 cuadros por segundo en el búfer de imagen. Incluso las pantallas de 240 Hz no muestran tantos fotogramas de una fuente.

Hay algunas cosas a considerar. La especificación MP4 no fue diseñada para la reproducción de archivos de alta velocidad de fotogramas, porque los archivos están muy comprimidos y se limitan al uso de un solo núcleo para la descompresión. Incluso si tuviera 12 núcleos, el archivo no se descomprimiría más rápido.

La forma más fácil de resolver su problema es codificar el MP4 en otro códec, o editar y rebotar muestras según sea necesario.

Como @mivk dijo anteriormente, si esto es principalmente para fines de cámara lenta, puede codificar el MP4 en un códec de animación, Photo-JPEG o Cineform. Estos códecs tienen una mejor oportunidad de reproducir el archivo más cerca del tiempo real, pero incluso entonces, seguirán teniendo dificultades.

Sin embargo, eso podría brindarle suficiente reproducción en tiempo real para poder pasar a su editor, hacer sus efectos de cámara lenta y luego exportar el archivo a 24/30/60 FPS, que no debería tener problemas para reproducir en su máquina.

Si disparó a 120 fps, presumiblemente es para obtener un efecto de cámara lenta. Entonces, la reproducción en realidad debe estar a su velocidad normal de 24/25/30 fps para obtener el efecto.

No existe tal cosa como la reproducción de 120 fps. El máximo que conozco sería 60p.

¿Qué informan ffmpeg o mediainfo como la velocidad de fotogramas de estos videos? Si informan 120 fps o algún otro valor extraño, entonces probablemente podría volver a envolver los videos en un contenedor que anuncie los fps correctos. Algo ffmpeg -r 30 -i INFILE .... -r 30 OUTFILEcomo

Actualización para aclarar después de ver los comentarios:

No hay transformación ni pérdida al ver imágenes en cámara lenta. (Podría decirse que es todo lo contrario, ya que tiene más posibilidades de ver todos y cada uno de los fotogramas).

Un cuadro es un cuadro, sea cual sea la velocidad de reproducción.

Las transformaciones solo entran en juego una vez que decide eliminar fotogramas para lograr una velocidad más rápida (no tan lenta), o duplicar algunos fotogramas para aumentar aún más el efecto de cámara lenta. Su material de archivo de 120 fps está diseñado para reproducirse a la velocidad normal de su película (24p, 60i, ... cualquier velocidad que sea adecuada para su medio), o para ser procesado duplicando/eliminando fotogramas para lograr la velocidad exacta que desea. desear.

Hizo lo correcto al disparar a una velocidad muy alta para lograr un efecto de cámara lenta, mientras tenía suficientes fotogramas para ajustar la velocidad final con mayor precisión si fuera necesario.

Tu reproductor hace lo correcto al mostrarte el efecto de cámara lenta que filmaste, exactamente como lo filmaste.

Durante mucho tiempo (desde finales de la década de 1920), solía haber solo 1 velocidad de reproducción posible: 24 fps y nada más. Más tarde, con la televisión, se agregaron algunas velocidades más por conveniencia de ingeniería: 25/50i y 30/60i (para países de 50 Hz y 60 Hz). Ahora, eso se ha extendido a 48p, 50p y 60p, pero eso es todo. No existe tal cosa como la reproducción de 120 fps.

Creo que es "normal" que un grabador de video con un anuncio de 120 fps intente reproducir a 120 fps. No es muy útil (ya que a menudo las pantallas se actualizan 60 veces por segundo), pero ese no es el punto. Sería extraño que un vídeo grabado a una determinada velocidad de fotogramas intentara reproducirse a otra. Si el OP quiere cámara lenta, debe pasar los 120 fps a través de algún programa de edición donde se interprete como 30 fps. Sin embargo, eso es material para otra pregunta.
@Bart y todo, exactamente. Pensé que eso es lo que expliqué en mi publicación original. Todo el propósito es editar el metraje en bruto para efectos de cámara lenta o reducción de resolución. Pero para elegir cual necesito poder verlo primero sin transformaciones para no perder calidad.

Si leo bien, desea ver sus videos de 120 fps a 0,25 de su velocidad real, viendo cada fotograma pero a 30 fps. Eso es lo que hago (GoPro 3+, 720p, 120fps) pero es un poco complicado.

Yo uso el editor de secuencias de video Blender. No es intuitivo, pero un buen tutorial puede marcar la diferencia en el mundo, lo aprendí con el tutorial de Mikeycal Meyers:

Una vez que haya pasado por los conceptos básicos, es tan simple como

  • agrega tu MP4 directamente desde la GoPro
  • eliminar la pista de audio (inútil en este punto)
  • configure "Rango de fotogramas" para que termine en el último fotograma de su video
  • establezca "Resolución" en 1280x720
  • establezca "Frecuencia de fotogramas" en 30 fps o 29,97 fps según su cámara (la mía usa 29,97, no tengo idea de por qué)
  • establezca "Salida" en // (escribirá un archivo como 00000-59829.???) elija la configuración de "Codificación" que prefiera (consulte el tutorial)
  • presione Animación y espere un momento, el video de salida será en cámara lenta a 30 fps

Además, para editar la velocidad de la vida real, uso HandBrake para volver a muestrear los videos, porque no encontré cómo decirle a Blender que lo haga. Aquí hay un script que usé para hacer esto con todos los videos en un directorio:

time for f in *.MP4; do HandBrakeCLI -i $f -o ${f}_30.mkv -f mkv -q 4 -r 29.97 --cfr; HandBrakeCLI -i $f -o ${f}_60.mkv -f mkv -q 4 -r 59.940 --cfr; HandBrakeCLI -i $f -o ${f}_120.mkv -f mkv -q 4 -r 119.88 --cfr; done

EDITAR : encontré una forma más rápida, usando ffmpeg como se describe en https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video

ffmpeg -i GOPR0604.MP4_120.mkv -q 4 -filter:v "setpts=4.0*PTS" GOPR0604.MP4_120_slowmo.mkv