¡Transcodifique y edite medios, transforme y despliegue!



Publicado por Andrew Lewis, ingeniero de software, Android Media Solutions

La creación de contenido generado por los usuarios va en aumento y los usuarios buscan más formas de personalizar y agregar singularidad a sus creaciones. Estas creaciones luego pasan a una vasta red de dispositivos, cada uno con sus propias habilidades. La versión Jetpack Media3 1.0 incluye nuevas funciones en el módulo Transformer para convertir archivos multimedia entre formatos o transcodificacióny aplicar operaciones de edición. Por ejemplo, puede recortar un clip de un medio más largo y aplicar efectos a la pista de video para compartirlo a través de las redes sociales, o transcodificar el medio a un códec más eficiente para cargarlo en un servidor.

El objetivo general de Transformer es proporcionar una API potente, fiable y fácil de usar para la transcodificación y edición de medios, incluida la compatibilidad con la personalización de la funcionalidad, siguiendo los mismos principios de diseño de API que ExoPlayer. La biblioteca es compatible con dispositivos que ejecutan Android 5.0 Lollipop (API 21) y versiones posteriores e incluye optimizaciones específicas del dispositivo, lo que brinda a los desarrolladores una base sólida sobre la cual desarrollar. ¡Esta publicación presenta la nueva funcionalidad y describe algunas de las muchas características que estamos planeando para los próximos lanzamientos!

Comenzó

La mayoría de las operaciones con Transformer siguen el mismo patrón general:

  1. Configurar un solicitud de transformación con configuraciones como su formato de salida deseado
  2. Un... crear transformador y dártelo solicitud de transformación
  3. Aplicar efectos y ediciones adicionales
  4. Adjunte un oyente para responder a los eventos de finalización
  5. Empieza la transformación

Por supuesto, dependiendo de las transformaciones que desee, es posible que no necesite cada paso. Este es un ejemplo de cómo transcodificar un video de entrada al formato de video H.265/HEVC y eliminar la pista de audio.


val transformationRequest = TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H265).build()

val transformer = Transformer.Builder(context)
.setTransformationRequest(transformationRequest)
.setRemoveAudio(true)
.addListener(transformerListener)
.build()

val inputMediaItem = MediaItem.fromUri("path_to_input_file")
transformer.startTransformation(inputMediaItem, outputPath)

Durante la transformación, puede obtener actualizaciones de progreso con Transformador.getProgress. Cuando se completa la transformación, se notifica al oyente en su onTransformationCompleted o onTransformationError devolución de llamada, y puede procesar los medios de salida según sea necesario.

Consulte nuestra documentación para conocer más funciones en las API de Transformer. Para obtener más información sobre el uso de Transformer para convertir con precisión contenido HDR de 10 bits a SDR de 8 bits, consulte también la publicación del blog Gestión de lavado de color para asegurarse de que los colores de su video permanezcan lo más vívidos posible si su aplicación o dispositivo no admite contenido HDR.

Ediciones, efectos y mejoras.

Media3 incluye un conjunto de efectos de video básicos para una fácil edición, como cambiar el tamaño, recortar y filtros de color que puede usar con Transformer. Por ejemplo, puede crear y aplicar un efecto de presentación para mejorar la entrada a una resolución de 480p mientras conserva la relación de aspecto original. establecerVideoEffects:

Transformer.Builder(context)
.setVideoEffects(listOf(Presentation.createForHeight(480)))
.build()

También puede encadenar múltiples efectos para crear resultados más complejos. Este ejemplo convierte el video de entrada a escala de grises y lo rota 30 grados:

Transformer.Builder(context)
.setVideoEffects(listOf(
RgbFilter.createGrayscaleFilter(),
ScaleToFitTransformation.Builder()
.setRotationDegrees(30f)
.build()))
.build()

También es posible ampliar la funcionalidad de Transformer implementando efectos personalizados que se basan en los existentes. Aquí hay un ejemplo de subclase MatrixTransformation, donde comenzamos aumentando 2x y luego disminuimos gradualmente a medida que aumenta el tiempo de representación del cuadro:

val zoomOutEffect = MatrixTransformation { presentationTimeUs ->
val transformationMatrix = Matrix()
val scale = 2 - min(1f, presentationTimeUs / 1_000_000f)
transformationMatrix.postScale( scale, scale)
transformationMatrix
}
Transformer.Builder(context)
.setVideoEffects(listOf(zoomOutEffect))
.build()

Aquí hay una captura de pantalla que muestra cómo se aplica este efecto en la aplicación de demostración de Transformer:

Imagen en movimiento que muestra cómo se ve la transformación de matriz de subclase en la aplicación Transformer Demo

Para casos de uso aún más avanzados, puede empaquetar su propio código OpenGL u otras bibliotecas de procesamiento en un procesador de texturas GL personalizado e incorporarlos a Transformer como efectos personalizados. Consulte la aplicación de demostración para ver algunos ejemplos de efectos personalizados. El LÉAME también incluye instrucciones para probar una demostración de la integración de MediaPipe con Transformer.

Pronto

Transformer está en desarrollo activo pero está listo para funcionar, así que pruébelo y háganos saber sus comentarios. La rama de desarrollo de Media3 incluye un adelanto de varias características nuevas que se basan en la versión 1.0 descrita aquí, incluida la compatibilidad con el mapeo de tonos de video HDR a SDR con OpenGL y la vista previa de efectos de video con ExoPlayer.setVideoEffectsy procesamiento de audio personalizado. También estamos trabajando en la compatibilidad con la edición de múltiples videos en composiciones más flexibles, con exportación desde Transformer y reproducción a través de ExoPlayer, lo que convierte a Media3 en una solución de transformación de medios de extremo a extremo.

¡Esperamos que encuentre en Transformer una herramienta poderosa y fácil de usar para implementar increíbles experiencias de edición de medios en Android! Puede enviarnos solicitudes de funciones e informes de errores en el rastreador de problemas Media3 GitHub y seguir este blog para obtener actualizaciones sobre nuevas funciones. Estén atentos a nuestra próxima presentación de Experiencias multimedia Android de alta calidad en Google I/O.

Si quieres conocer otros artículos parecidos a ¡Transcodifique y edite medios, transforme y despliegue! puedes visitar la categoría Android.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir