jax
jax

Reputation: 840

FFMPEG - Converting any kind of file to Mp4 compatible with IOS and Flash

I am struggling with FFmpeg within Drupal Video Module to produce files to MP4 that is compatible with IOS and Flash Player10 and up. I have used the following commands so far, please note that the variables starting with "!" are placeholders and will be replaces with the proper items:

FFmpeg -strict experimental -y -i !videofile -pass 1 -s !widthx!height -b:v 500k -threads 0 -vcodec libx264 -vf "pad=!paddingwidth:!paddingheight:!paddingleft:!paddingtop:000000" -preset slow -an !convertfile

FFmpeg -strict experimental -y -i !videofile -pass 2 -s !widthx!height -b:v 500k -threads 0 -vcodec libx264 -vf "pad=!paddingwidth:!paddingheight:!paddingleft:!paddingtop:000000" -preset slow -acodec aac -ab 128k !convertfile

The above command produce an error as:

error executing command for rendering preset HTML5 MP4, command #1:

nice -n 19 /usr/bin/ffmpeg/ffmpeg -y -i '80137db8c3_1334836277_int_tr_19.mp4' -s 176x100 -b:v 500k -threads 0 -vcodec libx264 -preset slow -acodec aac -ab 128k '/converted/80137db8c3_1334836277_int_tr_19.mp4' 2>&1

Output:

ffmpeg version git-2013-02-01-5a67e30 Copyright (c) 2000-2013 the FFmpeg developers
  built on Feb  1 2013 14:23:14 with gcc 4.6 (Ubuntu/Linaro 4.6.3-1ubuntu5)
  configuration: --enable-gpl --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-version3
  libavutil      52. 17.100 / 52. 17.100
  libavcodec     54. 91.100 / 54. 91.100
  libavformat    54. 61.104 / 54. 61.104
  libavdevice    54.  3.103 / 54.  3.103
  libavfilter     3. 35.100 /  3. 35.100
  libswscale      2.  2.100 /  2.  2.100
  libswresample   0. 17.102 /  0. 17.102
  libpostproc    52.  2.100 / 52.  2.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '80137db8c3_1334836277_int_tr_19.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
    creation_time   : 2011-03-28 00:12:26
  Duration: 00:02:01.14, start: 0.000000, bitrate: 703 kb/s
    Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 601 kb/s, 29.96 fps, 29.92 tbr, 1k tbn, 59.83 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 96 kb/s
    Metadata:
      creation_time   : 2011-03-28 00:12:27
      handler_name    : (C) 2007 Google Inc. v08.13.2007.
[libx264 @ 0x34ec060] using SAR=100/99
[libx264 @ 0x34ec060] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x34ec060] profile High, level 2.0
[libx264 @ 0x34ec060] 264 - core 129 r2245 bc13772 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x3:0x113 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=abr mbtree=1 bitrate=500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
Alternatively use the non experimental encoder 'libfaac'.

Another command that I used is:

FFmpeg -i !videofile -an -pass 1 -vcodec libx264 -preset slow -b 500k -threads auto !convertfile

FFMpeg -y -i !videofile -acodec libfaac -ab 128k -pass 2 -vcodec libx264 -preset slow -b 500k -threads auto !convertfile

Output for the first pass:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'comiccon.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: mp41
    creation_time   : 2012-08-15 17:12:37
  Duration: 01:17:15.93, start: 0.000000, bitrate: 706 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 636 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 63 kb/s
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : SoundHandler
Please use -b:a or -b:v, -b is ambiguous

using SAR=1/1
[libx264 @ 0x1c39be0] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x1c39be0] profile Main, level 3.0
[libx264 @ 0x1c39be0] 264 - core 129 r2245 bc13772 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=1 deblock=1:0:0 analyse=0x1:0 me=dia subme=2 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=abr mbtree=1 bitrate=500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'comiccon.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: mp41
    encoder         : Lavf54.61.104
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, pass 1, 500 kb/s, 15360 tbn, 30 tbc
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : VideoHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
Press [q] to stop, [?] for help
frame=139078 fps=279 q=32766.0 Lsize=  286145kB time=01:17:15.86 bitrate= 505.6kbits/s    
video:284758kB audio:0kB subtitle:0 global headers:0kB muxing overhead 0.487000%
[libx264 @ 0x1c39be0] frame I:656   Avg QP:19.51  size: 21457
[libx264 @ 0x1c39be0] frame P:76006 Avg QP:22.19  size:  3141
[libx264 @ 0x1c39be0] frame B:62416 Avg QP:26.38  size:   621
[libx264 @ 0x1c39be0] consecutive B-frames: 32.3% 17.5% 18.6% 31.6%
[libx264 @ 0x1c39be0] mb I  I16..4: 24.5%  0.0% 75.5%
[libx264 @ 0x1c39be0] mb P  I16..4:  7.5%  0.0%  0.0%  P16..4: 40.5%  0.0%  0.0%  0.0%  0.0%    skip:52.1%
[libx264 @ 0x1c39be0] mb B  I16..4:  1.4%  0.0%  0.0%  B16..8: 12.0%  0.0%  0.0%  direct: 2.9%  skip:83.7%  L0:41.1% L1:41.6% BI:17.3%
[libx264 @ 0x1c39be0] final ratefactor: 23.45
[libx264 @ 0x1c39be0] direct mvs  spatial:95.3% temporal:4.7%
[libx264 @ 0x1c39be0] coded y,uvDC,uvAC intra: 37.6% 42.8% 11.8% inter: 8.9% 8.2% 0.5%
[libx264 @ 0x1c39be0] i16 v,h,dc,p: 43% 28% 19% 10%
[libx264 @ 0x1c39be0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 21% 11%  6%  4%  5%  4%  6%  6%
[libx264 @ 0x1c39be0] i8c dc,h,v,p: 57% 19% 20%  4%
[libx264 @ 0x1c39be0] Weighted P-Frames: Y:1.4% UV:0.5%
[libx264 @ 0x1c39be0] kb/s:503.18

output for the second pass:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'comiccon.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: mp41
    creation_time   : 2012-08-15 17:12:37
  Duration: 01:17:15.93, start: 0.000000, bitrate: 706 kb/s
    Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 636 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 63 kb/s
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : SoundHandler
Please use -b:a or -b:v, -b is ambiguous
[libx264 @ 0x3247f80] using SAR=1/1
[libx264 @ 0x3247f80] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle SSE4.2 AVX
[libx264 @ 0x3247f80] profile High, level 3.0
[libx264 @ 0x3247f80] 264 - core 129 r2245 bc13772 - H.264/MPEG-4 AVC codec - Copyleft 2003-2013 - http://www.videolan.org/x264.html - options: cabac=1 ref=5 deblock=1:0:0 analyse=0x3:0x113 me=umh subme=8 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=2 b_bias=0 direct=3 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=50 rc=2pass mbtree=1 bitrate=500 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 cplxblur=20.0 qblur=0.5 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'comiccon.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: mp41
    encoder         : Lavf54.61.104
    Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, pass 2, 500 kb/s, 15360 tbn, 30 tbc
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 44100 Hz, stereo, s16, 128 kb/s
    Metadata:
      creation_time   : 2012-08-15 17:12:37
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (h264 -> libx264)
  Stream #0:1 -> #0:1 (aac -> libfaac)
Press [q] to stop, [?] for help
frame=139078 fps=206 q=32766.0 Lsize=  357252kB time=01:17:15.93 bitrate= 631.3kbits/s    
video:282992kB audio:69592kB subtitle:0 global headers:0kB muxing overhead 1.324238%
[libx264 @ 0x3247f80] frame I:656   Avg QP:19.61  size: 20433
[libx264 @ 0x3247f80] frame P:76006 Avg QP:23.07  size:  2996
[libx264 @ 0x3247f80] frame B:62416 Avg QP:26.23  size:   780
[libx264 @ 0x3247f80] consecutive B-frames: 32.3% 17.5% 18.6% 31.6%
[libx264 @ 0x3247f80] mb I  I16..4: 17.2% 37.8% 44.9%
[libx264 @ 0x3247f80] mb P  I16..4:  2.9%  3.7%  1.2%  P16..4: 30.3%  6.1%  3.4%  0.0%  0.0%    skip:52.5%
[libx264 @ 0x3247f80] mb B  I16..4:  0.5%  0.6%  0.3%  B16..8: 25.9%  2.2%  0.5%  direct: 0.9%  skip:69.3%  L0:51.4% L1:43.0% BI: 5.7%
[libx264 @ 0x3247f80] 8x8 transform intra:45.9% inter:51.5%
[libx264 @ 0x3247f80] direct mvs  spatial:85.5% temporal:14.5%
[libx264 @ 0x3247f80] coded y,uvDC,uvAC intra: 47.3% 49.2% 13.5% inter: 9.0% 9.4% 0.5%
[libx264 @ 0x3247f80] i16 v,h,dc,p: 38% 27% 13% 22%
[libx264 @ 0x3247f80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 29% 16% 14%  5%  5%  7%  7%  8%  9%
[libx264 @ 0x3247f80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 15%  9%  6%  7%  8%  7%  8%  8%
[libx264 @ 0x3247f80] i8c dc,h,v,p: 49% 22% 20%  8%
[libx264 @ 0x3247f80] Weighted P-Frames: Y:1.4% UV:0.5%
[libx264 @ 0x3247f80] ref P L0: 79.3% 10.4%  6.8%  1.6%  1.2%  0.7%  0.0%
[libx264 @ 0x3247f80] ref B L0: 93.6%  4.8%  1.2%  0.3%
[libx264 @ 0x3247f80] ref B L1: 96.6%  3.4%
[libx264 @ 0x3247f80] kb/s:500.06

The above command produces the file correctly however it cannot be played in flash player. One thing that I noticed is this may happen if the input file is mp4 as well. This command is executed for users uploading files, so the input file could be any format.

Below is the information about my FFmpeg version: > ffmpeg version git-2013-02-01-5a67e30 Copyright (c) 2000-2013 the > FFmpeg developers built on Feb 1 2013 14:23:14 with gcc 4.6 > (Ubuntu/Linaro 4.6.3-1ubuntu5) configuration: --enable-gpl > --enable-libass --enable-libfaac --enable-libfdk-aac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-version3 libavutil 52. 17.100 / 52. 17.100
libavcodec 54. 91.100 / 54. 91.100
libavformat 54. 61.104 / 54. 61.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 35.100 / 3. 35.100
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.1

Upvotes: 2

Views: 4430

Answers (1)

llogan
llogan

Reputation: 133773

Some notes:

  • The binary is ffmpeg; not FFmpeg or FFMpeg.

  • -strict experimental should be used as an output option. You are using it as an input option and is being ignored. You won't need it for other AAC encoders.

  • -threads auto is now default and adding it is superfluous.

  • You compiled with --enable-libfdk-aac, and therefore you can use -codec:a libfdk_aac which will provide better quality per file size than the other AAC encoders. See the FFmpeg AAC Encoding Guide and FFmpeg and x264 Encoding Guide.

  • The message Please use -b:a or -b:v, -b is ambiguous should not be ignored so ffmpeg knows if you want to apply your desired bitrate to the audio or video.

  • I don't see why the second command shouldn't work in a flash player. You may simply not be waiting long enough for the file to download completely before playing. You can add -movflags +faststart to allow playback to begin before the download completes.

  • Replace -s with the scale filter so you can have a proper filterchain with pad. Next time show actual commands and not commands with variables; otherwise I could have given a proper filtering example.

Upvotes: 2

Related Questions