Creando Videos Programáticamente en React

This ad is not shown to multipass and full ticket holders
React Summit US
React Summit US 2025
November 18 - 21, 2025
New York, US & Online
The biggest React conference in the US
Learn More
In partnership with Focus Reactive
Upcoming event
React Summit US 2025
React Summit US 2025
November 18 - 21, 2025. New York, US & Online
Learn more
Bookmark
Rate this content

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.

This talk has been presented at React Summit Remote Edition 2021, check out the latest edition of this React Conference.

FAQ

Remotion es una biblioteca que permite escribir videos mp4 de forma declarativa utilizando React. Se utiliza para crear videos dinámicos donde se pueden reutilizar componentes y parametrizar elementos, facilitando la edición y control de versiones de proyectos de video.

El proceso de renderizado en Remotion consta de tres pasos: primero se empaqueta el video usando webpack, luego se abre una instancia de Chromium sin cabeza para tomar capturas de pantalla de cada fotograma del video, y finalmente, se recopilan todos los fotogramas y se unen usando ffmpeg para crear el video final.

Una composición en Remotion es básicamente un video que incluye metadatos como el ancho, la altura, la duración y la velocidad de fotogramas. También se define qué componente React se utilizará para renderizar el video.

El gancho UseCurrentFrame en Remotion se utiliza para obtener el tiempo actual en el video, expresado como el fotograma actual. Este gancho es crucial para impulsar las animaciones dentro del componente de video, asegurando que cada fotograma se renderice correctamente durante el proceso de creación del video.

Para animar un elemento en Remotion, se utiliza el gancho UseCurrentFrame para obtener el fotograma actual y luego se usan funciones como interpolateHelper o spring para definir cómo cambian las propiedades del elemento a lo largo del tiempo, aplicando estos cambios mediante CSS normal.

La versión 2.0 de Remotion incluye soporte de audio, permitiendo agregar etiquetas de audio de manera declarativa, cortar y recortar pistas de audio, y ajustar el volumín por fotograma, entre otras funciones para manipular el audio directamente dentro de los proyectos de video en Remotion.

Remotion aborda problemas como la falta de control de versiones efectivo, la dificultad para reutilizar y parametrizar elementos en los videos, y los desafíos en la edición y manipulación de componentes de video de manera declarativa, ofreciendo una solución más integrada y flexible para desarrolladores.

Jonny Burger
Jonny Burger
34 min
14 May, 2021

Comments

Sign in or register to post your comment.
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.

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

Una Guía del Comportamiento de Renderizado de React
React Advanced 2022React Advanced 2022
25 min
Una Guía del Comportamiento de Renderizado de React
Top Content
This transcription provides a brief guide to React rendering behavior. It explains the process of rendering, comparing new and old elements, and the importance of pure rendering without side effects. It also covers topics such as batching and double rendering, optimizing rendering and using context and Redux in React. Overall, it offers valuable insights for developers looking to understand and optimize React rendering.
Construyendo Mejores Sitios Web con Remix
React Summit Remote Edition 2021React Summit Remote Edition 2021
33 min
Construyendo Mejores Sitios Web con Remix
Top Content
Remix is a web framework built on React Router that focuses on web fundamentals, accessibility, performance, and flexibility. It delivers real HTML and SEO benefits, and allows for automatic updating of meta tags and styles. It provides features like login functionality, session management, and error handling. Remix is a server-rendered framework that can enhance sites with JavaScript but doesn't require it for basic functionality. It aims to create quality HTML-driven documents and is flexible for use with different web technologies and stacks.
Compilador React Forget - Entendiendo React Idiomático
React Advanced 2023React Advanced 2023
33 min
Compilador React Forget - Entendiendo React Idiomático
Top Content
Joe Savona
Mofei Zhang
2 authors
The Talk discusses React Forget, a compiler built at Meta that aims to optimize client-side React development. It explores the use of memoization to improve performance and the vision of Forget to automatically determine dependencies at build time. Forget is named with an F-word pun and has the potential to optimize server builds and enable dead code elimination. The team plans to make Forget open-source and is focused on ensuring its quality before release.
Uso efectivo de useEffect
React Advanced 2022React Advanced 2022
30 min
Uso efectivo de useEffect
Top Content
Today's Talk explores the use of the useEffect hook in React development, covering topics such as fetching data, handling race conditions and cleanup, and optimizing performance. It also discusses the correct use of useEffect in React 18, the distinction between Activity Effects and Action Effects, and the potential misuse of useEffect. The Talk highlights the benefits of using useQuery or SWR for data fetching, the problems with using useEffect for initializing global singletons, and the use of state machines for handling effects. The speaker also recommends exploring the beta React docs and using tools like the stately.ai editor for visualizing state machines.
Enrutamiento en React 18 y más allá
React Summit 2022React Summit 2022
20 min
Enrutamiento en React 18 y más allá
Top Content
Routing in React 18 brings a native app-like user experience and allows applications to transition between different environments. React Router and Next.js have different approaches to routing, with React Router using component-based routing and Next.js using file system-based routing. React server components provide the primitives to address the disadvantages of multipage applications while maintaining the same user experience. Improving navigation and routing in React involves including loading UI, pre-rendering parts of the screen, and using server components for more performant experiences. Next.js and Remix are moving towards a converging solution by combining component-based routing with file system routing.
Concurrencia en React, Explicada
React Summit 2023React Summit 2023
23 min
Concurrencia en React, Explicada
Top Content
React 18's concurrent rendering, specifically the useTransition hook, optimizes app performance by allowing non-urgent updates to be processed without freezing the UI. However, there are drawbacks such as longer processing time for non-urgent updates and increased CPU usage. The useTransition hook works similarly to throttling or bouncing, making it useful for addressing performance issues caused by multiple small components. Libraries like React Query may require the use of alternative APIs to handle urgent and non-urgent updates effectively.

Workshops on related topic

Masterclass de Depuración de Rendimiento de React
React Summit 2023React Summit 2023
170 min
Masterclass de Depuración de Rendimiento de React
Top Content
Featured Workshop
Ivan Akulov
Ivan Akulov
Los primeros intentos de Ivan en la depuración de rendimiento fueron caóticos. Vería una interacción lenta, intentaría una optimización aleatoria, vería que no ayudaba, y seguiría intentando otras optimizaciones hasta que encontraba la correcta (o se rendía).
En aquel entonces, Ivan no sabía cómo usar bien las herramientas de rendimiento. Haría una grabación en Chrome DevTools o React Profiler, la examinaría, intentaría hacer clic en cosas aleatorias, y luego la cerraría frustrado unos minutos después. Ahora, Ivan sabe exactamente dónde y qué buscar. Y en esta masterclass, Ivan te enseñará eso también.
Así es como va a funcionar. Tomaremos una aplicación lenta → la depuraremos (usando herramientas como Chrome DevTools, React Profiler, y why-did-you-render) → identificaremos el cuello de botella → y luego repetiremos, varias veces más. No hablaremos de las soluciones (en el 90% de los casos, es simplemente el viejo y regular useMemo() o memo()). Pero hablaremos de todo lo que viene antes - y aprenderemos a analizar cualquier problema de rendimiento de React, paso a paso.
(Nota: Esta masterclass es más adecuada para ingenieros que ya están familiarizados con cómo funcionan useMemo() y memo() - pero quieren mejorar en el uso de las herramientas de rendimiento alrededor de React. Además, estaremos cubriendo el rendimiento de la interacción, no la velocidad de carga, por lo que no escucharás una palabra sobre Lighthouse 🤐)
Next.js para Desarrolladores de React.js
React Day Berlin 2023React Day Berlin 2023
157 min
Next.js para Desarrolladores de React.js
Top Content
Featured WorkshopFree
Adrian Hajdin
Adrian Hajdin
En esta avanzada masterclass de Next.js, profundizaremos en conceptos clave y técnicas que permiten a los desarrolladores de React.js aprovechar al máximo Next.js. Exploraremos temas avanzados y prácticas prácticas, equipándote con las habilidades necesarias para construir aplicaciones web de alto rendimiento y tomar decisiones arquitectónicas informadas.
Al final de esta masterclass, serás capaz de:1. Comprender los beneficios de los Componentes del Servidor React y su papel en la construcción de aplicaciones React interactivas, renderizadas por el servidor.2. Diferenciar entre el tiempo de ejecución de Edge y Node.js en Next.js y saber cuándo usar cada uno en función de los requisitos de tu proyecto.3. Explorar técnicas avanzadas de Renderizado del Lado del Servidor (SSR), incluyendo streaming, fetching paralelo vs. secuencial, y sincronización de datos.4. Implementar estrategias de caché para mejorar el rendimiento y reducir la carga del servidor en las aplicaciones Next.js.5. Utilizar Acciones React para manejar la mutación compleja del servidor.6. Optimizar tus aplicaciones Next.js para SEO, compartir en redes sociales, y rendimiento general para mejorar la descubrabilidad y la participación del usuario.
Aventuras de Renderizado Concurrente en React 18
React Advanced 2021React Advanced 2021
132 min
Aventuras de Renderizado Concurrente en React 18
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
Con el lanzamiento de React 18 finalmente obtenemos el tan esperado renderizado concurrente. Pero, ¿cómo va a afectar eso a tu aplicación? ¿Cuáles son los beneficios del renderizado concurrente en React? ¿Qué necesitas hacer para cambiar al renderizado concurrente cuando actualices a React 18? ¿Y qué pasa si no quieres o no puedes usar el renderizado concurrente todavía?

¡Hay algunos cambios de comportamiento de los que debes estar al tanto! En esta masterclass cubriremos todos esos temas y más.

Acompáñame con tu portátil en esta masterclass interactiva. Verás lo fácil que es cambiar al renderizado concurrente en tu aplicación React. Aprenderás todo sobre el renderizado concurrente, SuspenseList, la API startTransition y más.
Consejos sobre React Hooks que solo los profesionales conocen
React Summit Remote Edition 2021React Summit Remote Edition 2021
177 min
Consejos sobre React Hooks que solo los profesionales conocen
Top Content
Featured Workshop
Maurice de Beijer
Maurice de Beijer
La adición de la API de hooks a React fue un cambio bastante importante. Antes de los hooks, la mayoría de los componentos tenían que ser basados en clases. Ahora, con los hooks, estos son a menudo componentes funcionales mucho más simples. Los hooks pueden ser realmente simples de usar. Casi engañosamente simples. Porque todavía hay muchas formas en las que puedes equivocarte con los hooks. Y a menudo resulta que hay muchas formas en las que puedes mejorar tus componentes con una mejor comprensión de cómo se puede usar cada hook de React.Aprenderás todo sobre los pros y los contras de los diversos hooks. Aprenderás cuándo usar useState() versus useReducer(). Veremos cómo usar useContext() de manera eficiente. Verás cuándo usar useLayoutEffect() y cuándo useEffect() es mejor.
Presentando FlashList: Construyamos juntos una lista performante en React Native
React Advanced 2022React Advanced 2022
81 min
Presentando FlashList: Construyamos juntos una lista performante en React Native
Top Content
Featured Workshop
David Cortés Fulla
Marek Fořt
Talha Naqvi
3 authors
En esta masterclass aprenderás por qué creamos FlashList en Shopify y cómo puedes usarlo en tu código hoy. Te mostraremos cómo tomar una lista que no es performante en FlatList y hacerla performante usando FlashList con mínimo esfuerzo. Usaremos herramientas como Flipper, nuestro propio código de benchmarking, y te enseñaremos cómo la API de FlashList puede cubrir casos de uso más complejos y aún así mantener un rendimiento de primera categoría.Sabrás:- Breve presentación sobre qué es FlashList, por qué lo construimos, etc.- Migrando de FlatList a FlashList- Enseñando cómo escribir una lista performante- Utilizando las herramientas proporcionadas por la biblioteca FlashList (principalmente el hook useBenchmark)- Usando los plugins de Flipper (gráfico de llamas, nuestro perfilador de listas, perfilador de UI & JS FPS, etc.)- Optimizando el rendimiento de FlashList utilizando props más avanzados como `getType`- 5-6 tareas de muestra donde descubriremos y solucionaremos problemas juntos- Preguntas y respuestas con el equipo de Shopify
React, TypeScript y TDD
React Advanced 2021React Advanced 2021
174 min
React, TypeScript y TDD
Top Content
Featured Workshop
Paul Everitt
Paul Everitt
ReactJS es extremadamente popular y, por lo tanto, ampliamente soportado. TypeScript está ganando popularidad y, por lo tanto, cada vez más soportado.

¿Los dos juntos? No tanto. Dado que ambos cambian rápidamente, es difícil encontrar materiales de aprendizaje precisos.

¿React+TypeScript, con los IDEs de JetBrains? Esa combinación de tres partes es el tema de esta serie. Mostraremos un poco sobre mucho. Es decir, los pasos clave para ser productivo, en el IDE, para proyectos de React utilizando TypeScript. En el camino, mostraremos el desarrollo guiado por pruebas y enfatizaremos consejos y trucos en el IDE.