Creando Videos Programáticamente en React

Rate this content
Bookmark

Introducción a ReMotion, una nueva biblioteca con la que podemos convertir código React en videos MP4, crear nuestros gráficos en movimiento de forma programática y renderizarlos en el servidor. Daré una visión general de los principios, la filosofía y, por supuesto, vamos a codificar un video.

34 min
14 May, 2021

Video Summary and Transcription

La charla discute el uso de ReMotion, una biblioteca que permite la creación de videos declarativos en React. Cubre el proceso de creación de videos, animación de elementos y renderización de múltiples composiciones. La charla también menciona las características de ReMotion, como el soporte de audio y la renderización en el servidor. ReMotion 2.0 introduce soporte de audio y la posibilidad de transmisión en vivo. La charla concluye destacando la frustración con las herramientas de edición de video existentes y la integración de videos existentes en proyectos de ReMotion.

Available in English

1. Introducción y Conferencia Remota

Short description:

¡Hola a todos! Soy Jonny Burger, uniéndome desde Zurich, Suiza. Aprovechemos al máximo esta conferencia remota. Los videos pregrabados, como el discurso de apertura de Apple, son más dinámicos y agradables de ver.

¡Hola a todos y bienvenidos! Mi nombre es Jonny Burger y estoy conectando desde la hermosa Zurich, Suiza. Desafortunadamente, solo podemos hacer esta conferencia de forma remota, lo que significa que estoy en casa y ustedes también están en casa, y no me ven personalmente, sino solo un video. Pero no es tan malo. Puedo hacer un video más interesante, puedo elegir diferentes ángulos y puedo editar todos los errores que cometo. ¿Han visto el discurso de apertura de Apple recientemente? Ahora que graban todo de antemano, sus videos son mucho más dinámicos y mucho más agradables de ver.

2. Writing Videos Declaratively in React

Short description:

Quiero reutilizar elementos en mi video y parametrizarlos como lo hago con los componentes de React. Hice una biblioteca llamada Remotion que te permite escribir videos mp4 reales de forma declarativa en React. Hacer un video en React suena como algo mágico, pero en realidad no lo es y no es una caja negra. Para usar ReMotion correctamente, necesitamos saber cómo funciona. Comenzamos en un proyecto de React y definimos una composición. Debemos pasar el ancho, la altura, la duración y la velocidad de fotogramas del video, y qué componente se utilizará para renderizar el video. Una vez que hemos escrito nuestro video, entramos en un proceso de renderizado de tres etapas. Abrimos varias pestañas y tomamos capturas de pantalla al mismo tiempo.

De todos modos, cómo editamos normalmente estos videos son programas gráficos como Adobe Premiere, iMovie, After Effects, DaVinci Resolve. Pero para mí, como desarrollador, siempre ha faltado algo. Quiero reutilizar elementos en mi video y parametrizarlos como lo hago con los componentes de React. Quiero algo que sea más dinámico que simplemente copiar y pegar capas y deshacer y rehacer mis acciones. Quiero algo que sea más declarativo.

También el control de versiones es horrible para los videos. Si guardo mi proyecto, cierro el programa y lo vuelvo a abrir, básicamente toda mi historia desaparece y solo tengo una instantánea del tiempo actual a menos que haga copias de mi archivo con extensiones de archivo v1, v2 y a veces el programa simplemente se bloqueará y todo mi progreso se habrá ido. Espero que vean a dónde voy con esto. Quiero escribir videos programáticamente.

Hice una biblioteca llamada Remotion que te permite escribir videos mp4 reales de forma declarativa en React. Creo tanto en ella que este video en sí mismo fue editado en React usando Remotion, al menos todos los videos que estoy presentando en React Summit. Este también es un video de código abierto, por lo que pueden ir al enlace de GitHub que ven a la derecha en este momento y visitar el código fuente del video, todas las imágenes están allí y todas las ediciones y diapositivas están escritas en React.

Hacer un video en React suena como algo mágico, pero en realidad no lo es y no es una caja negra. Para usar ReMotion correctamente, necesitamos saber cómo funciona. Así que echemos un vistazo general a cómo ReMotion convierte el código en un video. Comenzamos en un proyecto de React y definimos una composición. Una composición es básicamente un video, pero tiene metadatos que debemos definir. Debemos pasar el ancho, la altura, la duración y la velocidad de fotogramas del video, y qué componente se utilizará para renderizar el video. Dentro de ese componente, necesitamos llamar al gancho UseCurrentFrame para obtener el tiempo actual y, en función de ese tiempo, que se expresa como el fotograma actual, que es un número entero, debemos renderizar cualquier cosa que queramos usando nuestras tecnologías web favoritas. Es importante que usemos esta variable de fotograma para impulsar nuestra animación en lugar de algo más como una transición CSS. Más sobre eso más adelante. Entonces, una vez que hemos escrito nuestro video, entramos en un proceso de renderizado de tres etapas. El primer paso es empaquetar el video usando webpack, al igual que cualquier otra aplicación web. En el segundo paso, abrimos una instancia de Chromium sin cabeza y abrimos la página web en ella y luego tomamos una captura de pantalla para cada fotograma del video. Para que este proceso sea eficiente y rápido, debemos paralelizarlo. Así que en realidad abrimos varias pestañas. El número depende del número de núcleos de su CPU, o también puede personalizarlo, pero desea tener algún tipo de paralelismo si puede permitírselo. Abrimos varias pestañas y tomamos múltiples capturas de pantalla al mismo tiempo. Esta es la razón por la que es muy importante que usemos el gancho UseCurrentFrame para impulsar todas nuestras animaciones. Porque si usas algo como una transición CSS o un RequestAnimationFrame, o intentas incluir un GIF, no funcionará porque durante el renderizado abrimos múltiples instancias de tu animación. Prácticamente solo funciona si te doy un fotograma, debes devolver una imagen estática que no tenga ningún

3. Creando Videos con ReMotion

Short description:

Para crear un video usando ReMotion, debemos asegurarnos de que los efectos secundarios estén sincronizados con el tiempo actual. Después de recopilar todos los fotogramas, los unimos usando ffmpeg. En la demostración, abrimos la terminal, instalamos las dependencias necesarias y abrimos el servidor de desarrollo para previsualizar el video. Definimos una línea de tiempo compositiva en ReMotion y podemos tener múltiples composiciones. Una idea para un proyecto de video implica crear gráficos para cada orador en React Summit importando la lista de oradores y animándolos.

efectos secundarios. Si tienes algún efecto secundario donde las cosas se animarán sin el tiempo actual que ReMotion dice que está cambiando, entonces el video tendrá algunos artefactos o retrasos. Suponiendo que no te tropieces con la piedra, podemos tomar todos los fotogramas, recopilarlos en el tercer paso y unirlos usando ffmpeg y ¡tada! tenemos un video real que luego podemos publicar en las redes sociales, por ejemplo. Por supuesto, hay mucho más en esto, como cómo agregar audio, pero creo que este es el concepto más importante en ReMotion que debes conocer. Es hora de una demostración rápida. Creemos nuestro primer video juntos. Para comenzar, simplemente abrimos la terminal y escribimos yarn create video. Y la instalación ha terminado. Entonces, ingresamos a nuestro video y lo abrimos en VS Code. Además, una vez que hayamos hecho eso, ejecutamos npm start para abrir el servidor de desarrollo. Y verás que obtendremos una vista previa visual del video. Esperemos un momento hasta que termine de cargar. Y ahí vamos. Como puedes ver, hay un proyecto Hello World incluido en Reemotion. También hay una línea de tiempo con la que puedes controlar el fotograma actual. Así que hice un corte rápido para ajustar mi proyecto un poco. Eliminé todo el contenido de Hello World y lo reemplacé con un lienzo negro. También actualicé la versión de Reemotion a una versión que estará disponible para cuando veas este video, pero no estaba disponible en el momento en que lo estaba grabando. De todos modos, así es como definimos una línea de tiempo compositiva en este archivo de entrada de Reemotion y definimos el ID, el ancho, la altura, la duración y la velocidad de fotogramas de un video, así como el componente como mencioné anteriormente. También podemos tener múltiples composiciones, deben tener diferentes IDs y luego puedes cambiar entre ellas en la barra lateral izquierda.

Entonces, he reemplazado esto con un lienzo negro. Y ahora quiero contarte mi idea de qué tipo de video podemos hacer juntos. Vi en Twitter que React Summit está creando un gráfico para cada orador y publicándolo, tiene la foto de perfil, el nombre de la charla y todo sobre cada orador en él. También noté que hay un archivo JSON en el código fuente del sitio web de React Summit que contiene a todos los oradores. Así que pensé que sería divertido crear todos estos gráficos de una vez y también animarlos para que sean un video, no una imagen. Esto es lo que he hecho. He importado la lista de todos los oradores de React en este proyecto. Para comenzar, no tenemos mucho tiempo, así que voy a codificar algo muy rápido. Nos vemos en un segundo. Lo que he creado rápidamente es, básicamente, un marcado normal de React y CSS. Como puedes ver, no he utilizado ninguna biblioteca.

4. Animando Elementos con ReMotion

Short description:

Puedes usar cualquier biblioteca que desees. En lugar de una etiqueta de imagen en minúsculas, utilicé el componente de imagen de ReMotion. Funciona de la misma manera que el elemento de imagen nativo, pero con un cargador que espera a que la imagen se cargue antes de renderizarla. Agregué círculos usando SVG. Ahora, vamos a animarlo. Usamos el gancho UseCurrentFrame para impulsar las animaciones. Podemos animar la foto de perfil escalándola utilizando la función interpolateHelper. Aplicamos la escala usando CSS. Para una animación más suave, utiliza la función spring y pasa el fotograma y los fotogramas por segundo. ¡Probémoslo!

Puedes usar cualquier biblioteca que desees. Pero aquí lo hice con un marcado normal y CSS. Solo una cosa a tener en cuenta. En lugar de una etiqueta de imagen en minúsculas, utilicé el componente de imagen de ReMotion. Funciona prácticamente de la misma manera que el elemento de imagen nativo. Excepto que está envuelto en un cargador que esperará hasta que la imagen se cargue antes de renderizar el fotograma. Así que tu video no contendrá una imagen que no esté completamente cargada. También he agregado algunos círculos aquí en el fondo usando SVG, lo cual también es genial.

De todos modos, ahora que tenemos esta configuración básica, que no expliqué en detalle completo porque probablemente ya conozcas un poco de React al menos. Vamos a animarlo. Necesitamos impulsar todas nuestras animaciones utilizando el gancho UseCurrentFrame. Voy a decir const frame = UseCurrentFrame y ahora necesitamos animar las cosas con el tiempo.

Digamos que queremos animar la foto de perfil para que se amplíe. Para eso, podemos usar la función interpolateHelper en ReMotion. Voy a decir escala y voy a interpolar la escala a lo largo del tiempo. Lo que quiero decir con eso es que paso lo que impulsa la animación, el fotograma, y digo un rango de entrada. Digo de 0 a 30, lo que básicamente significa que la duración de la animación es de 30 fotogramas. Solo voy a decir que se escalará de 0 a 1. Ahora solo aplico este estilo utilizando CSS normal a la imagen. Y como puedes ver, mi imagen se está escalando durante una duración de 1 segundo. No se ve tan suave. Por eso prefiero usar una animación de resorte. Así que deshagámonos de eso y digamos const scale = spring. Para eso, necesitamos pasar el fotograma y los fotogramas por segundo actuales. Esta es la información necesaria que la función de resorte necesita saber para calcular el video. ¡Sí, probémoslo y ahí vamos! ¡Se está animando! También pasemos esta escala a nuestros círculos en el fondo. Bien, ¿se ve bastante bien, verdad? Deslicemos también el título. Podemos decir const title, title.translation por ejemplo. Y me encanta usar animaciones de resorte para todo. Pasemos fps y frame, pero esta vez hagámoslo un poco más avanzado.

5. Animando Elementos y Creando Múltiples Videos

Short description:

Podemos ajustar los parámetros físicos de la animación de resorte, como aumentar el amortiguamiento para evitar la sobrecompensación. Al engañar a la función de resorte sobre el fotograma actual, podemos retrasar la transición. También necesitamos interpolar el rango de 0 a 1 a algo como 0 a 1000. Después de corregir un pequeño error, animamos de 1000 a 0 y aplicamos la traducción a todos los elementos. Ahora, creemos animaciones para cada orador en React Summit utilizando un archivo JSON y la función .map.

Podemos jugar con los parámetros físicos de nuestra animación de resorte. Me gusta aumentar el amortiguamiento para que no se sobrecompense. Como puedes ver aquí, se sobrecompensa y luego vuelve a ser más pequeño. Quiero retrasar esta transición para que la animación no comience de inmediato.

Para eso, simplemente engaño a la función de resorte, diciéndole en qué fotograma se encuentra actualmente. Y digo, en realidad, está 20 fotogramas antes de lo que crees que está. Ahora el valor va de 0 a 1, como cualquier animación de resorte. En realidad, también necesitamos interpolarlo, para que el rango no sea entre 0 y 1, sino algo como 0 y 1000. Entonces aquí, el rango de entrada es 0 y 1 y decimos, 0 a 1000. Voy a pasar una transformación.

Bueno, cometí un pequeño error allí. Animé accidentalmente mi nombre en lugar del título de la charla y también va hacia abajo en lugar de hacia arriba. Pero, por supuesto, con la actualización rápida, podemos solucionar fácilmente estas cosas. En realidad, queremos animar de 1000 a 0. Echemos un vistazo a cómo se ve eso. ¡Muy bien! También apliquemos esta traducción rápidamente a todos los demás elementos para que creo que se verá bien. Solo voy a copiar y pegar esto aquí. Tal vez encuentres una forma más ingeniosa de hacerlo. Pero creo que esto hace el trabajo rápidamente. Así es como se ve nuestro video ahora. ¡Genial!

Ahora viene la parte más divertida, en mi opinión. Convirtamos un video en docenas de videos. Creemos una de estas animaciones para cada uno de los oradores que aparecen en React Summit. Para esto, ya he importado, como se mostró antes, un archivo JSON en el proyecto. Donde están todos los metadatos. Y simplemente voy a usar .map para iterar sobre cada orador y devolver una composición para ellos. Podría verse algo así. Démonos a cada uno una clave única. Y también es muy útil que haya una propiedad de Slack en cada orador.

6. Composición Dinámica y Renderizado de Video

Short description:

Hagamos que la composición sea dinámica al alinear los componentes para tomar props como el nombre del orador, la empresa, la URL del avatar y el título de la charla. Podemos definir props predeterminados para cada composición y luego sobrescribirlos en la línea de comandos. Ahora, creemos un video mp4 utilizando un ID de composición específico y ejecutemos el comando de construcción para renderizar el video.

Sí, ahí vamos. Y ahora, como puedes ver, todos los oradores están en la barra lateral izquierda. Entonces, ahora, hagamos que la composición también sea dinámica al alinear los componentes para tomar algunas props. Digamos que el nombre del orador debe ser una cadena, la empresa debe ser una cadena, la URL del avatar también puede ser una cadena y ¿qué más falta? El título de la charla. Solo voy a aceptar estos. Y el nombre del orador y los llenaré, en mi video. Aquí tengo un pequeño conflicto de nombres con un estilo, así que voy a hacer esto. Vamos a poner esto como el título de la charla. Este es el orador. Lo siento, otro conflicto de nombres. Espero que esto lo resuelva ahora. De acuerdo, era solo un problema de sangría. No importa, no importa. Aquí, pongamos la URL del avatar. Aquí podemos definir algunas props predeterminadas para cada composición, y digo predeterminadas porque estas props pueden sobrescribirse más tarde en la línea de comandos. Pero para la vista previa aquí en el navegador, vamos a poner algunas props predeterminadas. La URL del avatar será speaker.avatar.company, speaker.company, speakerName, speaker.name, y el tagName speaker.game. Hagamos speaker.activities.tags, 0.title. Creo que eso será todo. Y convirtámoslo en una cadena. ¡Listo!

Así que aquí tenemos uno para Brandon Bayer. Aquí tenemos la etiqueta de Brent Watney. La de Lee Robinson. Ahora hagamos un mp4 video con esto. Tomemos el video de KentzC. Solo voy a copiar el ID de composición de su etiqueta. Y lo voy a poner en mi comando de construcción, que puedes ejecutar usando npm run build como una forma abreviada, o puedes escribir todo esto. Así que escribamos esto en kent.mp4 y ejecutemos npm run build. Y sí, esto tomará unos segundos. Puedes tener una idea de cuánto tiempo tarda en renderizarse un video de dos segundos.

QnA

Características y Código Abierto

Short description:

Aquí podemos ver la concurrencia 8x y se ha creado el video. ReMotion ofrece características como secuencias, soporte de audio y renderizado en el lado del servidor. Consulta la documentación en reemotion.dev para obtener más información. La charla es de código abierto y puedes encontrar el enlace al video editado en la pantalla. Gracias por escuchar y disfruta de la sesión de preguntas y respuestas. ReMotion es increíble y, a pesar de algunas características faltantes, es de código abierto para que cualquiera pueda contribuir.

Aquí podemos ver, en mi computadora muestra la concurrencia 8x. Por lo tanto, toma ocho capturas de pantalla al mismo tiempo. Y se ha creado el video. Echemos un vistazo.

Y aquí tenemos un anuncio de la charla de Kent CDOT, una charla informal con Kent CDOT. Solo he podido tocar ligeramente la superficie de lo que ReMotion puede hacer. Algunas cosas que podrías explorar a continuación. La primera cosa son las secuencias, que es una construcción que te permite desplazar el tiempo. Lo cual es realmente útil si tienes varias escenas en las que quieres trabajar individualmente y luego quieres unirlas para que se reproduzcan una tras otra. Lo cual realmente te ayuda a organizar tu código y la organización, reutilización y encapsulación son clave para escalar la producción de tu video. Otra cosa es el soporte de audio. En el momento en que estés viendo esto, habremos lanzado el soporte de audio. Podrás hacer cosas como tener tantas pistas como desees, podrás cambiar el volumen en cada fotograma y podrás cortar y recortar audio. Otro tema importante es el renderizado en el lado del servidor. ¿Cómo renderizar un video basado en una llamada a la API? Para todas estas cosas, te recomendaría que consultes la documentación en reemotion.dev donde explicaremos todos los temas y también tenemos algunos tutoriales en video para ayudarte a comprender los entresijos de Reemotion. También recuerda que esta charla es de código abierto y con eso no me refiero solo a las diapositivas, sino a todo el video, todo lo que viste fue editado usando Reemotion y puedes consultarlo con el enlace que está en la pantalla ahora.

Sí, eso es todo. Muchas gracias por escucharme. Estaré en vivo para una sesión de preguntas y respuestas justo después de esta charla y espero que también disfrutes de las otras charlas de esta noche.

Hola, bien. Gracias por tenerme aquí. Sí, es un placer tenerte aquí. También te he estado siguiendo en Twitter durante un tiempo y publicas cosas increíbles, pero este Remotion está en otro nivel, tengo que decirlo directamente. Es increíble lo que has hecho solo con React.

Genial. Sí, gracias. Parece que la audiencia no está de acuerdo, aparentemente no quieren usarlo. Por el momento, creo que aún faltan algunas características, ¿verdad?, pero estás trabajando en ello. También es de código abierto, por lo que cualquiera puede contribuir en eso.

Reomotion 2.0 y Transmisión en Vivo

Short description:

Entonces, no veo la razón por la cual en un futuro cercano, tal vez el próximo año, todos crearán videos usando Reomotion. La característica más importante en Reomotion 2.0 es el soporte de audio. Reomotion creará un filtro FF MPEG tan complejo como sea necesario para convertir tu marcado de React en una pista de audio real de un archivo mp4. Es asombroso. No es el caso de uso previsto utilizarlo para transmisión en vivo, pero diría que es genérico de tal manera que podría prever que suceda. Simplemente puedes reproducir el video en un navegador y pronto haré que puedas incrustarlo en tu propia página web y luego cambiar las props de la composición en vivo.

Entonces, no veo la razón por la cual en un futuro cercano, tal vez el próximo año, todos crearán videos usando Reomotion.

Entonces parece que la GUI tiene un 53%. Casi está empatado, ¿verdad? Podríamos decir que es una encuesta equilibrada aquí.

Sí, eso está bastante bien. Quiero decir, si la mitad de las personas quieren escribir en React, eso sigue siendo una gran parte. Así que, en realidad, no está tan mal.

Veamos si tenemos alguna pregunta. Iré ahora al chat. Veamos.

De acuerdo. Parece que no tenemos muchas preguntas. Si tienes alguna, solo envíalas en la sección de preguntas y respuestas de Basecamp. Tengo algunas preguntas propias.

Entonces, Johnny, vi que anunciaste recientemente Reomotion 2.0, que es un gran avance. ¿Cuáles fueron las mejoras que hiciste? ¿Cuáles son las nuevas características que has agregado? Si puedes agregar solo un poco allí.

Claro. Así que hay una nueva versión de Reomotion que salió hace solo dos horas. Y la razón por la cual es justo ahora es porque lo mencioné en mi charla. Y luego, así que estaba realmente motivado para lanzarlo porque lo anuncié aquí.

Lo hice justo a tiempo. La característica más importante en Reomotion 2.0 es el soporte de audio. Creo que es realmente genial que puedas simplemente poner estas etiquetas de audio de manera declarativa, cortar y recortar, ponerlas en cualquier posición, poner múltiples pistas de audio e incluso cambiar el volumen por fotograma, crear efectos de desvanecimiento, desvanecerlo en ciertos momentos. Reomotion creará un filtro FF MPEG tan complejo como sea necesario para convertir tu marcado de React en una pista de audio real de un archivo mp4. Eso es realmente poderoso, porque vi en YouTube, por ejemplo, que muchos canales están utilizando este tipo de ecualizador como Soundwave para todos los videos.

Así que simplemente agregar un video sin pasar por una aplicación de terceros y simplemente directamente en el navegador, tal vez, o simplemente abrir la terminal y escribir algo y pasar el mp4 mp3 y tener un mp4 como salida. Es asombroso.

Ahora, me pregunto, ¿es posible hacerlo en vivo, como alimentar un mp3 o una sesión de transmisión en vivo, digamos audio, y tenerlo ahí fuera?

Sí, interesante. Diría que no es el caso de uso previsto utilizarlo para transmisión en vivo, pero diría que es genérico de tal manera que podría prever que suceda.

Entonces, quiero decir, en este momento, como viste, simplemente puedes reproducir el video en un navegador y pronto haré que puedas incrustarlo en tu propia página web y luego cambiar las props de la composición en vivo.

Lumotion Inspiración e Integración

Short description:

Si lo scripteas de manera inteligente, puedes transmitirlo. La inspiración original para crear Lumotion fue la frustración con las herramientas existentes de edición de video. Remotion no crea videos a partir de transiciones CSS. En cambio, requiere crear imágenes estáticas para cada fotograma. La integración de videos existentes en un proyecto se realiza utilizando una etiqueta de video HTML5 y un componente de video en ReMotion que se sincroniza con el tiempo actual.

Entonces, sí, quiero decir, si lo scripteas de manera inteligente y luego lo transmites, ¿por qué no? Tenemos una pregunta de Afro Dev Girl que dice, ¿cuál fue la inspiración original para crear Lumotion? La inspiración original. Bueno, diría que fue más como una frustración con las herramientas existentes de edición de video. Sí, quiero decir, me faltaban estas características a las que estoy acostumbrado como desarrollador. Me gusta tener este historial de versiones, poder importar datos de APIs. Hacer cosas con una llamada de API de forma programática. Con los programas de edición de video, solo tendría que abrirlo. Y no hay una buena herramienta de abstracción excepto copiar y pegar. Todas estas cosas me llevaron eventualmente a crear mi propio programa de edición de video.

Genial. Puedo entender esa frustración. Yo también la tengo. Otra pregunta de Vadik. ¿Remotion crea videos solo a partir de transiciones CSS? ¿Si los crea solo a partir de transiciones CSS? No, para nada. Creo que mencioné esto en el video, que las transiciones CSS en realidad no funcionan en absoluto. La razón es que se supone que debes crear un montón de imágenes estáticas en React. Si te doy un número de fotograma, creas una imagen estática. Y estas imágenes estáticas juntas hacen una animación. Mientras que una transición CSS, no es tanto una animación derivada del número de fotograma. Simplemente lo pones en tu archivo CSS y se mueve sin que hagas nada más. Así que en lugar de usar una transición CSS, simplemente calcularías la posición, calcularías el valor de la propiedad para cada fotograma y luego lo renderizarías. Y sí, eso es una limitación, pero también muy necesaria. Y una vez que le tomas la mano, es bastante bueno porque luego puedes simplemente tomar el cursor de la línea de tiempo y moverlo hacia adelante y hacia atrás, pausar tu animación y eso no puedes hacerlo con una transición CSS.

Genial. Otra pregunta de jrock94, ¿cómo integras videos existentes en un proyecto? No estoy seguro si se refiere a MP4s o proyectos de ReMotion. Eso funciona bastante bien. Simplemente usas una etiqueta de video HTML5, y cargas tu video usando una declaración de importación como lo harías en Webpack, y lo pasas como fuente de una etiqueta de video. Como dije, normalmente, esto no sería controlado por el fotograma que ReMotion piensa que es. Pero hemos creado un componente de video que sincronizará el video con el tiempo actual. Así que eso funciona bastante bien. De hecho, todas las grabaciones de pantalla que has visto en el lado derecho de la pantalla mientras codificaba, eran solo un video importado en ReMotion y reproducido.

Conclusion and Q&A

Short description:

Fue un proyecto fluido y agradable. Desafortunadamente, nos quedamos sin tiempo. Gracias, Johnny, por compartir otra forma de crear videos usando código, especialmente React. Llegan más preguntas y Johnny estará disponible en Spatial chat para responderlas en breve.

Fue tan fluido que creo que no era posible ver que no solo envié el video tal como estaba. Sí, es prácticamente una incepción, ¿verdad? Simplemente grabándote a ti mismo dentro de la grabación. Es como dirigirte a ti mismo dentro de la grabación. Muy bueno. Es un proyecto divertido.

Desafortunadamente, nos quedamos sin tiempo. Y muchas gracias, Johnny, por tomarte tu tiempo y mostrarnos otra forma de crear videos usando código. Especialmente React.

¿Estás disponible para otras preguntas? Porque veo que están llegando ahora. ¿Estás en Spatial chat y la gente puede encontrarte allí? Sí, absolutamente. Sí, lo tengo marcado en mi calendario. Ahora me pasaré a Spatial chat. Y es genial ver que llegan más preguntas. Estoy muy feliz de responderlas en unos minutos allí. Muchas gracias, Johnny. Una vez más, fue un placer tenerte aquí. Disfruta el resto del día. Gracias. Adiós. Gracias. Adiós. Disfruta de la conferencia. Gracias.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

React Advanced Conference 2022React Advanced Conference 2022
25 min
A Guide to React Rendering Behavior
Top Content
React is a library for "rendering" UI from components, but many users find themselves confused about how React rendering actually works. What do terms like "rendering", "reconciliation", "Fibers", and "committing" actually mean? When do renders happen? How does Context affect rendering, and how do libraries like Redux cause updates? In this talk, we'll clear up the confusion and provide a solid foundation for understanding when, why, and how React renders. We'll look at: - What "rendering" actually is - How React queues renders and the standard rendering behavior - How keys and component types are used in rendering - Techniques for optimizing render performance - How context usage affects rendering behavior| - How external libraries tie into React rendering
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Building Better Websites with Remix
Top Content
Remix is a new web framework from the creators of React Router that helps you build better, faster websites through a solid understanding of web fundamentals. Remix takes care of the heavy lifting like server rendering, code splitting, prefetching, and navigation and leaves you with the fun part: building something awesome!
React Advanced Conference 2023React Advanced Conference 2023
33 min
React Compiler - Understanding Idiomatic React (React Forget)
Top Content
React provides a contract to developers- uphold certain rules, and React can efficiently and correctly update the UI. In this talk we'll explore these rules in depth, understanding the reasoning behind them and how they unlock new directions such as automatic memoization. 
React Advanced Conference 2022React Advanced Conference 2022
30 min
Using useEffect Effectively
Top Content
Can useEffect affect your codebase negatively? From fetching data to fighting with imperative APIs, side effects are one of the biggest sources of frustration in web app development. And let’s be honest, putting everything in useEffect hooks doesn’t help much. In this talk, we'll demystify the useEffect hook and get a better understanding of when (and when not) to use it, as well as discover how declarative effects can make effect management more maintainable in even the most complex React apps.
React Summit 2022React Summit 2022
20 min
Routing in React 18 and Beyond
Top Content
Concurrent React and Server Components are changing the way we think about routing, rendering, and fetching in web applications. Next.js recently shared part of its vision to help developers adopt these new React features and take advantage of the benefits they unlock.In this talk, we’ll explore the past, present and future of routing in front-end applications and discuss how new features in React and Next.js can help us architect more performant and feature-rich applications.
React Advanced Conference 2021React Advanced Conference 2021
27 min
(Easier) Interactive Data Visualization in React
Top Content
If you’re building a dashboard, analytics platform, or any web app where you need to give your users insight into their data, you need beautiful, custom, interactive data visualizations in your React app. But building visualizations hand with a low-level library like D3 can be a huge headache, involving lots of wheel-reinventing. In this talk, we’ll see how data viz development can get so much easier thanks to tools like Plot, a high-level dataviz library for quick & easy charting, and Observable, a reactive dataviz prototyping environment, both from the creator of D3. Through live coding examples we’ll explore how React refs let us delegate DOM manipulation for our data visualizations, and how Observable’s embedding functionality lets us easily repurpose community-built visualizations for our own data & use cases. By the end of this talk we’ll know how to get a beautiful, customized, interactive data visualization into our apps with a fraction of the time & effort!

Workshops on related topic

React Summit 2023React Summit 2023
170 min
React Performance Debugging Masterclass
Top Content
Featured WorkshopFree
Ivan’s first attempts at performance debugging were chaotic. He would see a slow interaction, try a random optimization, see that it didn't help, and keep trying other optimizations until he found the right one (or gave up).
Back then, Ivan didn’t know how to use performance devtools well. He would do a recording in Chrome DevTools or React Profiler, poke around it, try clicking random things, and then close it in frustration a few minutes later. Now, Ivan knows exactly where and what to look for. And in this workshop, Ivan will teach you that too.
Here’s how this is going to work. We’ll take a slow app → debug it (using tools like Chrome DevTools, React Profiler, and why-did-you-render) → pinpoint the bottleneck → and then repeat, several times more. We won’t talk about the solutions (in 90% of the cases, it’s just the ol’ regular useMemo() or memo()). But we’ll talk about everything that comes before – and learn how to analyze any React performance problem, step by step.
(Note: This workshop is best suited for engineers who are already familiar with how useMemo() and memo() work – but want to get better at using the performance tools around React. Also, we’ll be covering interaction performance, not load speed, so you won’t hear a word about Lighthouse 🤐)
React Advanced Conference 2021React Advanced Conference 2021
132 min
Concurrent Rendering Adventures in React 18
Top Content
Featured WorkshopFree
With the release of React 18 we finally get the long awaited concurrent rendering. But how is that going to affect your application? What are the benefits of concurrent rendering in React? What do you need to do to switch to concurrent rendering when you upgrade to React 18? And what if you don’t want or can’t use concurrent rendering yet?

There are some behavior changes you need to be aware of! In this workshop we will cover all of those subjects and more.

Join me with your laptop in this interactive workshop. You will see how easy it is to switch to concurrent rendering in your React application. You will learn all about concurrent rendering, SuspenseList, the startTransition API and more.
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
React Hooks Tips Only the Pros Know
Top Content
Featured Workshop
The addition of the hooks API to React was quite a major change. Before hooks most components had to be class based. Now, with hooks, these are often much simpler functional components. Hooks can be really simple to use. Almost deceptively simple. Because there are still plenty of ways you can mess up with hooks. And it often turns out there are many ways where you can improve your components a better understanding of how each React hook can be used.You will learn all about the pros and cons of the various hooks. You will learn when to use useState() versus useReducer(). We will look at using useContext() efficiently. You will see when to use useLayoutEffect() and when useEffect() is better.
React Advanced Conference 2021React Advanced Conference 2021
174 min
React, TypeScript, and TDD
Top Content
Featured WorkshopFree
ReactJS is wildly popular and thus wildly supported. TypeScript is increasingly popular, and thus increasingly supported.

The two together? Not as much. Given that they both change quickly, it's hard to find accurate learning materials.

React+TypeScript, with JetBrains IDEs? That three-part combination is the topic of this series. We'll show a little about a lot. Meaning, the key steps to getting productive, in the IDE, for React projects using TypeScript. Along the way we'll show test-driven development and emphasize tips-and-tricks in the IDE.
React Advanced Conference 2021React Advanced Conference 2021
145 min
Web3 Workshop - Building Your First Dapp
Top Content
Featured WorkshopFree
In this workshop, you'll learn how to build your first full stack dapp on the Ethereum blockchain, reading and writing data to the network, and connecting a front end application to the contract you've deployed. By the end of the workshop, you'll understand how to set up a full stack development environment, run a local node, and interact with any smart contract using React, HardHat, and Ethers.js.
React Summit 2023React Summit 2023
151 min
Designing Effective Tests With React Testing Library
Top Content
Featured Workshop
React Testing Library is a great framework for React component tests because there are a lot of questions it answers for you, so you don’t need to worry about those questions. But that doesn’t mean testing is easy. There are still a lot of questions you have to figure out for yourself: How many component tests should you write vs end-to-end tests or lower-level unit tests? How can you test a certain line of code that is tricky to test? And what in the world are you supposed to do about that persistent act() warning?
In this three-hour workshop we’ll introduce React Testing Library along with a mental model for how to think about designing your component tests. This mental model will help you see how to test each bit of logic, whether or not to mock dependencies, and will help improve the design of your components. You’ll walk away with the tools, techniques, and principles you need to implement low-cost, high-value component tests.
Table of contents- The different kinds of React application tests, and where component tests fit in- A mental model for thinking about the inputs and outputs of the components you test- Options for selecting DOM elements to verify and interact with them- The value of mocks and why they shouldn’t be avoided- The challenges with asynchrony in RTL tests and how to handle them
Prerequisites- Familiarity with building applications with React- Basic experience writing automated tests with Jest or another unit testing framework- You do not need any experience with React Testing Library- Machine setup: Node LTS, Yarn