Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting Video for Android using FFMPEG

What i am trying to do is convert video into mp4 format that will play in Android.

I've gone through http://developer.android.com/guide/appendix/media-formats.html

I am setting the following options

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

yet I get the error message "Sorry, This Video is not valid for streaming to this device"

I Played the video in android browser using videoJS http://video-js.zencoder.com/oceans-clip.mp4 and it WORKS fine.

I download the video oceans-clip.mp4 and tried to convert using minimalist options

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

yet I get the same error message.

The following is the FFMPEG info dump of the video files

Working.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 ) 

Not Working.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 ) 

The metadata looks almost the same yet it doesn't seem to play in android. Any help appreciated.

like image 842
Jebu Avatar asked Jan 05 '13 12:01

Jebu


People also ask

Does FFmpeg work on Android?

To integrate FFmpeg in your android application you can use pre-compiled libraries like FFmpeg, which provide multiple predefined multimedia operations(Queries) and which is easy to integrate by adding FFmpeg dependency in app module gradle file and sync project.

Does FFmpeg work with MP4?

FFmpeg can input most container formats natively, including MP4, . ts, MOV, AVI, Y4M, MKV, and many others. This is the output file.


2 Answers

The MP4 created by ffmpeg has the moov header at the tail. That is why you are getting this error message. ffmpeg can put the moov header in front (suitable for streaming).

Simply run:

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

Also refer to Post processing in ffmpeg to move 'moov atom' in MP4 files (qt-faststart)

like image 77
rajneesh Avatar answered Sep 20 '22 03:09

rajneesh


libfaac is not supported anymore, You can use this configuration:

ffmpeg -i <input> -s 480x320 -vcodec mpeg4 -acodec aac -strict -2 -ac 1 -ar 16000 -r 13 -ab 32000 -aspect 3:2 <output>   
like image 20
user1079877 Avatar answered Sep 21 '22 03:09

user1079877