macbook heic formato apple iphone android ffmpeg html5-video h.264

iphone - heic - hevc macbook



¿Qué formato h.264 se carga en Android Y IOS? (3)

Aquí está la línea de comandos ffmpeg que usamos para transcodificar a MPEG-4 h.264 en nuestro entorno de producción. Hemos probado la salida en varios dispositivos Android, así como en iOS. Puedes usar esto como un punto de partida, simplemente ajustando cosas como el tamaño de fotograma / velocidad de fotogramas y qfactor.

ffmpeg -y -i #{input_file} -s 432x320 -b 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -flags2 +mixed_refs -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -acodec libfaac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 #{output_file}

Algunas de las opciones importantes que afectan la compatibilidad de Android son:

-coder 0 Uses CAVLAC rather than CABAC entropy encoding (CABAC not supported on Android) -trellis 0 Should be shut off, requires CABAC -bf 0 Turns off B-frames, not supported on Android or other h.264 Baseline Profile devices -subq 6 Determines what algorithms are used for subpixel motion searching. 7 applies to B-frames, not supported on Android. -refs 5 Determines how many frames are referenced prior to the current frame. Increasing this number could affect compatibility

Después de codificar nuestro video con esta receta de ffmpeg, también pasamos el video a través de qt-faststart . Este paso recarga el video para su transmisión. Lo transmitimos a través de HTTP a un VideoView incorporado dentro de nuestra aplicación de Android. No hay problemas de transmisión a cualquier dispositivo Android que conozcamos.

Actualización 2013-06-17: solo quería agregar una nota de que es mejor seguir con el perfil de "línea de base" para la codificación H.264 para la máxima compatibilidad en todos los dispositivos Android. La línea de comando anterior no especifica explícitamente un perfil H.264, pero ffmpeg tiene un -profile línea de comando -profile que es útil si está usando sus ajustes preestablecidos . Probablemente no deberías -profile con el -profile . He codificado videos para mi tableta ASUS Transformer 300 (Android 4.2) usando el perfil "principal" en lugar del perfil "base" (a través del freno de mano). El perfil "principal" dio problemas para que el audio se desincronice con el video en reproducción.

Teóricamente, tanto IOS como ANDROID reproducirán archivos h.264, pero no puedo encontrar una configuración para codificarlos de modo que realmente funcionen en varias plataformas. ¿Alguien sabe cómo codificar tanto para Android como para iOS usando un archivo?

ps. Lo sé todo sobre el video html5 y las fuentes de respaldo, simplemente no quiero codificar y alojar un nuevo video para cada dispositivo que caiga en la pica.


Consulte Formatos de medios compatibles con Android , que establece que h.264 solo es compatible con Android 3.0+. Las versiones anteriores de soporte para Android h.263. EDITAR : Como mportuesisf menciona a continuación, malinterpreté la tabla vinculada. Ignora esta respuesta.


Utilicé esto para hacer una aplicación de Android e iOS con videos incrustados. Los videos reproducidos en ambas versiones. ( Ejemplo de Android ) ( ejemplo de iOS )

Respuesta suplementaria

Esta respuesta es un suplemento a la respuesta aceptada que explica algunos de los parámetros.

ffmpeg -y # Overwrite output files without asking. -i input_filename # input file name -s 432x320 # size of output file -b:v 384k # bitrate for video -vcodec libx264 # use H.264 video codec -flags +loop+mv4 # use loop filter and four motion vector by macroblock -cmp 256 # ??? Full pel motion estimation compare function -partitions +parti4x4+parti8x8+partp4x4+partp8x8 #??? -subq 6 # determines algorythms for subpixel motion searching and partition decision -trellis 0 # optimal rounding choices -refs 5 # number of frames referenced prior to current frame -bf 0 # turn of B-frames, something to do with H.264 and Baseline Profile -flags2 +mixed_refs # ??? gave me an error so I just deleted it -coder 0 # turn of the CABAC entropy encoder -me_range 16 # max range of the motion search -g 250 # GOP length (250 is the recommended default) -keyint_min 25 # Minimum GOP length (25 is the recommended default) -sc_threshold 40 # adjusts sensitivity of x264''s scenecut detection (default is 40) -i_qfactor 0.71 # Qscale difference between I-frames and P-frames (0.71 is the recommended default) -qmin 10 -qmax 51 # min and max quantizer (10 and 51 are the recommended defaults) -qdiff 4 # max QP step (4 is recommended default) -c:a aac # Set the audio codec to use AAC -ac 1 # number of audio channels -ar 16000 # audio sampling frequency -r 13 # frames per second -ab 32000 # audio bitrate -aspect 3:2 # sample aspect ratio output_filename # name of the output file

Siéntase libre de editar esto si puede completar algunos de los detalles de los que no estaba seguro.

Aquí está otra vez en un formato de cortar y pegar. (También tuve que agregar el parámetro -strict -2 para que aac funcione en mi computadora).

ffmpeg -y -i input_file.avi -s 432x320 -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -c:a aac -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 -strict -2 output_file.mp4

Estudio adicional

La mayor parte de esta información la encontré en los siguientes enlaces:

Ver también

  • Ejemplo de Android VideoView