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?
- Cómo utilizar un solo jugador para los anuncios y el vídeo con google android Exoplayer
- Android tira audio de vídeo
- Peer-to-Peer de vídeo de iOS a Android?
- Reducción de tamaño de archivo de vídeo MediaMuxer (compresión, disminución de resolución)
- YouTubeAndroidPlayerAPI no puede reproducir algunos videos
- Pantalla negra en cromo para video html5 de Android
- Android: cómo reproducir video de los activos?
- Marcos omitidos. La aplicación puede estar haciendo demasiado trabajo en su hilo principal "error en android 4.3 nexus 7
- ¿Cómo puedo capturar una grabación de vídeo en Android?
- Fusionar archivos de video mp4 en Android
- Edición de metadatos de un archivo de vídeo en Android
- cordova android - cómo jugar videofile que se encuentra dentro del proyecto en sí
- Reproducir un archivo m3u8 local en android mostrando setDataSourceFD failed .: status = 0x80000000
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.