Crear video de series de imágenes android

Estoy tratando de crear un video de series de imágenes en android. Me he encontrado con estas tres opciones de MediaCodec, ffmpeg con ndk y jcodec. ¿Puede alguien decirme cuál de ellos es mejor y más fácil. No encontré ninguna documentación adecuada, así que alguien puede publicar su ejemplo de trabajo?

Si está hablando de la API 4.3+ en general, necesita obtener la superficie de entrada del codificador, copiar la imagen a la textura que viene junto con la superficie, poner la marca de tiempo correcta y enviarla de vuelta al codificador. y hazlo

fps (frames per second) * resulted video duration in seconds 

veces. codificador de flujo de bits después del codificador debe ir al muxer, por lo que finalmente obtendrá archivo mp4. Requiere bastante codificación 🙂

Te sugiero que intentes gratis Intel Media Pack: https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials

Tiene una muestra – JpegSubstituteEffect, permite crear videos de imágenes. La idea es tomar un video ficticio (video negro y audio silencioso) y sustituir todo el marco negro por copiar imágenes. Podría ser fácilmente mejorado a la creación de un video de series de imágenes. Conozco un par de aplicaciones en Google Play haciendo lo mismo con Media Pack

He probado JCodec 1.7 para Android. Esto es muy simple en comparación con las otras dos opciones y funciona. Hay clase SequenceEncoder en el paquete android que acepta instancias de Bitmap y las codifica en video. Terminé la clonación de esta clase en mi aplicación para anular algunos de los ajustes, por ejemplo, fps. Problema con JCodec es que el rendimiento es sombrío – codificación único marco de 720×480 píxeles tarda sólo unos 45 segundos. Yo quería hacer videos timelapse posiblemente a fullHD y estaba pensando inicialmente que cualquier codificador hará como yo no esperaba que la codificación de un marco para tomar más de un segundo (intervalo mínimo entre los fotogramas en mi aplicación es de 3 segundos). Como se puede adivinar con 45 segundos por fotograma JCodec no es un ajuste.

Estoy supervisando su pregunta para otras respuestas que pueden ser útiles.

El medio MediaCodec / MediaMuxer parece bien, pero es insano complejo. Necesito aprender un poco acerca de OpenGL ES, formatos de video y algunos voodoo Android para conseguir esto. Ohh y esto sólo funciona en la última cosecha de teléfonos 4.3+. Esto es verdadera vergüenza para Google con todas sus demandas a la fama. He encontrado algunas discusiones de Stackoverflow sobre el tema. Existen dos subtrayectos: el modo OpenGL es independiente del dispositivo. Hay otra manera que implica transcodificar sus datos de mapa de bits RGB a YUV. la captura con YUV es que hay 3 sabores de la misma dependiendo del dispositivo HW – planar, semi planar y semi planar comprimido (no estoy seguro si una 4 ª manera no viene en el futuro así que …).

Aquí hay algunos enlaces útiles en el modo OpenGL

Prueba de CTS – https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/ExtractDecodeEditEncodeMuxTest.java

Muchos CTS como pruebas – http://bigflake.com/mediacodec/#EncodeDecodeTest

Dos de ellos parecen ser pertinentes y útiles

EncodeAndMuxTest – http://bigflake.com/mediacodec/EncodeAndMuxTest.java.txt CameraToMpegTest – http://bigflake.com/mediacodec/CameraToMpegTest.java.txt (Creo que esto es lo más cercano a lo que necesito, sólo hay que entender todo el vudú de OpenGL y conseguir mi Bitmap en como la textura que llena el marco entero proyecciones del IE, cámaras y qué no entra en juego)

ffmpeg ruta no parece demasiado directa también. Algo en C ++ que acepta cosas de Java … Supongo que algunas conversiones extrañas del Bitmap a byte [] / ByteBuffer se necesitarán por primera vez – CPU intensiva y lenta. De hecho, tengo byte JPEG [], pero no estoy seguro de que esto vaya a mano a la biblioteca ffmpeg. No estoy seguro de si ffmpeg está tomando apalancamiento de la GPU u otra aceleración HW por lo que bien puede terminar en 10 segundos por fotograma y literalmente hornear el teléfono.

FFmpeg puede implementar esta tarea. Primero necesita compilar la biblioteca ffmpeg en Android (consulte este artículo " Cómo usar Vitamio con su propia compilación FFmpeg ")

Podría referir las muestras en FFmpeg para averiguar cómo implementar su tarea.

En Android implementa tu tarea en C ++; a continuación, utilice JNI para integrar el código C ++ en su aplicación para Android.

  • Android: dibuja el video de YouTube en SurfaceTexture
  • ¿Cómo utilizar exoplayer para reproducir un mp4 mientras estoy descargando desde un proxy local?
  • Android: Jcodec: codificación de archivos de imagen para vídeo .mp4
  • Cómo manejar la orientación del vídeo desde dispositivos móviles
  • Pruebe a grabar vídeo utilizando la shell de adb screenrecord Android 4.4
  • Reproducción de un video local de aplicación (.mp4) en una vista web
  • SurfaceView sobre actionBar debido a setZOrderOnTop
  • Procesamiento de vídeo de Android marco por cuadro durante la grabación
  • Android frente a la cámara está grabando videos entre 7,5 y 8,0 - setVideoFrameRate no funciona - Samsung galaxy s2
  • reproductor de vídeo android se bloquea reproduciendo archivos locales
  • Recorte de vídeo mediante "com.android.camera.action.TRIM" (paquete Gallery2)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.