android video ffmpeg

android - linux ffmpeg cut video



Conversión de video para Android utilizando FFMPEG (5)

El MP4 creado por ffmpeg tiene el encabezado moov en la cola. Es por eso que está recibiendo este mensaje de error. ffmpeg puede poner el encabezado moov en la parte frontal (adecuado para la transmisión).

Simplemente ejecute:

ffmpeg -i <input> -c:v libx264 -c:a aac -movflags +faststart output.mp4

También refiérase al procesamiento posterior en ffmpeg para mover ''átomo de moov'' en archivos MP4 (qt-faststart)

Lo que estoy tratando de hacer es convertir el video en formato mp4 que se reproducirá en Android.

He pasado por http://developer.android.com/guide/appendix/media-formats.html

Estoy configurando las siguientes opciones

-vcodec libx264 -vprofile baseline -acodec libfaac -ar 44100 -ac 1 -ab 128k

sin embargo, aparece el mensaje de error "Lo sentimos, este video no es válido para la transmisión a este dispositivo"

He reproducido el video en el navegador de Android usando videoJS http://video-js.zencoder.com/oceans-clip.mp4 y funciona bien.

Descargué el video oceans-clip.mp4 e intenté convertir usando opciones minimalistas

-y -i working.mp4 -vprofile baseline pleasework.mp4

Sin embargo, me sale el mismo mensaje de error.

A continuación se muestra el volcado de información FFMPEG de los archivos de video.

Trabajando.mp4

Array ( [0] => ffmpeg version N-40229-g24e3f44-syslint Copyright (c) 2000-2012 the FFmpeg developers [1] => built on Apr 29 2012 22:01:41 with gcc 4.1.2 20080704 (Red Hat 4.1.2-52) [2] => configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint [3] => libavutil 51. 48.100 / 51. 48.100 [4] => libavcodec 54. 17.101 / 54. 17.101 [5] => libavformat 54. 3.100 / 54. 3.100 [6] => libavdevice 53. 4.100 / 53. 4.100 [7] => libavfilter 2. 72.100 / 2. 72.100 [8] => libswscale 2. 1.100 / 2. 1.100 [9] => libswresample 0. 11.100 / 0. 11.100 [10] => libpostproc 52. 0.100 / 52. 0.100 [11] => Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ''working.mp4'': [12] => Metadata: [13] => major_brand : isom [14] => minor_version : 1 [15] => compatible_brands: isomavc1 [16] => creation_time : 2010-05-18 04:24:00 [17] => Duration: 00:00:46.54, start: 0.000000, bitrate: 3342 kb/s [18] => Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x264 [SAR 132:133 DAR 320:133], 3195 kb/s, SAR 127:128 DAR 635:264, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc [19] => Metadata: [20] => creation_time : 2010-05-18 04:24:00 [21] => handler_name : GPAC ISO Video Handler [22] => Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 144 kb/s [23] => Metadata: [24] => creation_time : 2010-05-18 04:24:01 [25] => handler_name : GPAC ISO Audio Handler [26] => At least one output file must be specified )

No funciona.mp4

Array ( [0] => ffmpeg version N-40229-g24e3f44-syslint Copyright (c) 2000-2012 the FFmpeg developers [1] => built on Apr 29 2012 22:01:41 with gcc 4.1.2 20080704 (Red Hat 4.1.2-52) [2] => configuration: --prefix=/usr/local/cpffmpeg --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libopencore-amrnb --enable-decoder=liba52 --enable-libopencore-amrwb --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libvorbis --enable-libx264 --enable-libxvid --extra-cflags=-I/usr/local/cpffmpeg/include/ --extra-ldflags=-L/usr/local/cpffmpeg/lib --enable-version3 --extra-version=syslint [3] => libavutil 51. 48.100 / 51. 48.100 [4] => libavcodec 54. 17.101 / 54. 17.101 [5] => libavformat 54. 3.100 / 54. 3.100 [6] => libavdevice 53. 4.100 / 53. 4.100 [7] => libavfilter 2. 72.100 / 2. 72.100 [8] => libswscale 2. 1.100 / 2. 1.100 [9] => libswresample 0. 11.100 / 0. 11.100 [10] => libpostproc 52. 0.100 / 52. 0.100 [11] => Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ''pleasework.mp4'': [12] => Metadata: [13] => major_brand : isom [14] => minor_version : 512 [15] => compatible_brands: isomiso2avc1mp41 [16] => creation_time : 2010-05-18 04:24:00 [17] => encoder : Lavf54.3.100 [18] => Duration: 00:00:46.54, start: 0.000000, bitrate: 1843 kb/s [19] => Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x264 [SAR 127:128 DAR 635:264], 1715 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc [20] => Metadata: [21] => creation_time : 2010-05-18 04:24:00 [22] => handler_name : VideoHandler [23] => Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 124 kb/s [24] => Metadata: [25] => creation_time : 2010-05-18 04:24:00 [26] => handler_name : SoundHandler [27] => At least one output file must be specified )

Los metadatos se ven casi iguales pero no parecen reproducirse en Android. Cualquier ayuda apreciada.


La solución que funcionó para mí fue:

ffmpeg -i <INPUT_VIDEO> -c:v libx264 -profile:v baseline -c:a libvo_aacenc -ar 44100 -ac 2 -b:a 128k -movflags faststart output.mp4

Estoy usando Ubuntu 16.04.1 LTS


La solución que funcionó para mí fue:

ffmpeg -y -i input_file.mp4 -s 352x288 -b:v 384k -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 experimental output_file.3gp

Me convertí a 3gp. Funciona en API 16 o superior, utilizando VideoView.


Lo que hice aquí fue grabar un video con mi dispositivo Android y ver lo que ha configurado con FFMPEG:

C:/Users/muradgui/Documents/SmartTrust/Software/ffmpeg-20170418-6108805-win64-static/bin>ffmpeg -i android.mp4 ffmpeg version N-85588-g6108805 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 6.3.0 (GCC) configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avis e-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --e m --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpe -librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enabl --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib libavutil 55. 61.100 / 55. 61.100 libavcodec 57. 93.100 / 57. 93.100 libavformat 57. 72.101 / 57. 72.101 libavdevice 57. 7.100 / 57. 7.100 libavfilter 6. 84.101 / 6. 84.101 libswscale 4. 7.101 / 4. 7.101 libswresample 2. 8.100 / 2. 8.100 libpostproc 54. 6.100 / 54. 6.100 [h264 @ 00000000003184e0] no frame! [aac @ 000000000050c900] Input buffer exhausted before END element found Input #0, mov,mp4,m4a,3gp,3g2,mj2, from ''android.mp4'': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2018-03-08T17:30:26.000000Z com.android.version: 6.0.1 Duration: 00:00:00.86, start: 0.000000, bitrate: 2160 kb/s Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 720x1280, 2107 kb/s, 31.72 fps, 29.97 tbr, 90k tbn, 180k tbc (default) Metadata: creation_time : 2018-03-08T17:30:26.000000Z handler_name : VideoHandle Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 56 kb/s (default) Metadata: creation_time : 2018-03-08T17:30:26.000000Z handler_name : SoundHandle At least one output file must be specified

No soy muy técnico, pero esto es lo que más me llamó la atención:

Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 720x1280, 2107 kb/s, 31.72 fps, 29.97 tbr, 90k tbn, 180k tbc (default)

Utilicé los siguientes comandos para convertir correctamente mi video para que pueda reproducirse en mi Android:

ffmpeg -i out.avi -vcodec h264 -s 720x1280 test3.mp4

Sospecho que mi problema fue que la resolución de mi video original era demasiado para mi dispositivo. Esto es lo que era antes:

C:/Users/muradgui/Documents/SmartTrust/Software/ffmpeg-20170418-6108805-win64-static/bin>ffmpeg -i out.avi ffmpeg version N-85588-g6108805 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 6.3.0 (GCC) configuration: --enable-gpl --enable-version3 --enable-cuda --enable-cuvid --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-zma --enable-zlib libavutil 55. 61.100 / 55. 61.100 libavcodec 57. 93.100 / 57. 93.100 libavformat 57. 72.101 / 57. 72.101 libavdevice 57. 7.100 / 57. 7.100 libavfilter 6. 84.101 / 6. 84.101 libswscale 4. 7.101 / 4. 7.101 libswresample 2. 8.100 / 2. 8.100 libpostproc 54. 6.100 / 54. 6.100 Input #0, avi, from ''out.avi'': Metadata: encoder : Lavf57.72.101 Duration: 00:00:10.00, start: 0.000000, bitrate: 4788 kb/s Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 2250x4000 [SAR 1:1 DAR 9:16], 4596 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 44100 Hz, stereo, s16p, 192 kb/s

Que tiene una resolución de 2250x4000 (era una imagen del mismo dispositivo que transformé en un video con este artículo https://superuser.com/questions/617392/ffmpeg-image-sequence-with-various-durations ).

Intenté simplemente redimensionar la imagen sin cambiar el códec a h264, pero eso no produjo una buena imagen. h264 lo hizo por mí :)

¡¡Espero que esto ayude!! <3


libfaac ya no es compatible, puedes usar esta configuración:

ffmpeg -i <input> -s 480x320 -vcodec mpeg4 -acodec aac -strict -2 -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 <output>