Convert .mov to .mp4 and keep alpha channel using FFMPEG

Mark S. picture Mark S. · Feb 16, 2012 · Viewed 11.9k times · Source

I am trying to convert a .mov file that is Quicktime with Alpha Channel to a .mp4 movie. I am using FFMPEG and I can successfully convert the video to a .mp4 video, but I loose the alpha channel.

Here is the command I am running:
ffmpeg -i BLUE_LOWER_THIRD.mov -vcodec libx264 -vpre medium blue_lower_third.mp4

I am running this on Ubuntu 11.10. Here is the information about my install of ffmpeg.

ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers
  built on Jan  4 2012 16:08:51 with gcc 4.6.1
  configuration: --extra-version='4:0.7.3-0ubuntu0.11.10.1' --arch=amd64 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
  avutil      configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=amd64 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --enable-shared --disable-static
  avcodec     configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=amd64 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --enable-shared --disable-static
  avformat    configuration: --extra-version='4:0.7.3ubuntu0.11.10.1' --arch=amd64 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --enable-shared --disable-static
  libavutil    51.  7. 0 / 51.  7. 0
  libavcodec   53.  6. 0 / 53.  6. 0
  libavformat  53.  3. 0 / 53.  3. 0
  libavdevice  53.  0. 0 / 53.  0. 0
  libavfilter   2.  4. 0 /  2.  4. 0
  libswscale    2.  0. 0 /  2.  0. 0
  libpostproc  52.  0. 0 / 52.  0. 0

Is it possible to have alpha channel in an mp4 file? If so, how do you do it with FFMPEG?

Edit: This is the output from running the command.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'BLUE_LOWER_THIRD.mov':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2010-12-21 10:36:51
  Duration: 00:00:15.00, start: 0.000000, bitrate: 8050 kb/s
    Stream #0.0(eng): Video: png, bgra, 1920x1080, 8043 kb/s, PAR 1920:1920 DAR 16:9, 30 fps, 30 tbr, 30 tbn, 30 tbc
    Metadata:
      creation_time   : 2010-12-21 10:36:51
    Stream #0.1(eng): Data: tmcd / 0x64636D74, 0 kb/s
    Metadata:
      creation_time   : 2010-12-21 10:39:48
File 'blue_lower_third.mp4' already exists. Overwrite ? [y/N] y
Incompatible pixel format 'bgra' for codec 'libx264', auto-selecting format 'yuv420p'
[buffer @ 0x7e3d80] w:1920 h:1080 pixfmt:bgra
[ffsink @ 0x7edda0] auto-inserting filter 'auto-inserted scaler 0' between the filter 'src' and the filter 'out'
[scale @ 0x7fc480] w:1920 h:1080 fmt:bgra -> w:1920 h:1080 fmt:yuv420p flags:0x4
[libx264 @ 0x7fcf20] using SAR=1/1
[libx264 @ 0x7fcf20] using cpu capabilities: MMX2 SSE2Fast SSSE3 FastShuffle Cache64
[libx264 @ 0x7fcf20] profile High, level 4.0
[libx264 @ 0x7fcf20] 264 - core 116 r2042 178455c - H.264/MPEG-4 AVC codec - Copyleft 2003-2011 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 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=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=200 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.41 aq=1:1.00
Output #0, mp4, to 'blue_lower_third.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 537199360
    compatible_brands: qt  
    creation_time   : 2010-12-21 10:36:51
    encoder         : Lavf53.3.0
    Stream #0.0(eng): Video: libx264, yuv420p, 1920x1080 [PAR 1920:1920 DAR 16:9], q=0-69, 200 kb/s, 30 tbn, 30 tbc
    Metadata:
      creation_time   : 2010-12-21 10:36:51
Stream mapping:
  Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame=  450 fps= 11 q=9.0 Lsize=      83kB time=14.93 bitrate=  45.7kbits/s    its/s    
video:75kB audio:0kB global headers:0kB muxing overhead 10.287784%
frame I:2     Avg QP:18.30  size:  2584
[libx264 @ 0x7fcf20] frame P:118   Avg QP:16.22  size:   310
[libx264 @ 0x7fcf20] frame B:330   Avg QP:16.75  size:   106
[libx264 @ 0x7fcf20] consecutive B-frames:  1.8%  0.9%  1.3% 96.0%
[libx264 @ 0x7fcf20] mb I  I16..4: 49.7% 50.0%  0.3%
[libx264 @ 0x7fcf20] mb P  I16..4:  0.5%  0.0%  0.0%  P16..4:  0.3%  0.0%  0.0%  0.0%      0.0%    skip:99.0%
[libx264 @ 0x7fcf20] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.3%  0.0%  0.0%  direct: 0.0%  skip:99.6%  L0:37.2% L1:62.6% BI: 0.2%
[libx264 @ 0x7fcf20] final ratefactor: 9.32
[libx264 @ 0x7fcf20] 8x8 transform intra:38.0% inter:56.1%
[libx264 @ 0x7fcf20] coded y,uvDC,uvAC intra: 0.9% 4.2% 2.9% inter: 0.0% 0.1% 0.0%
[libx264 @ 0x7fcf20] i16 v,h,dc,p: 64% 32%  1%  3%
[libx264 @ 0x7fcf20] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  0%  2% 97%  0%  1%  0%  0%  0%  0%
[libx264 @ 0x7fcf20] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu:  5% 60% 23%  2%  6%  1%  1%  1%  2%
[libx264 @ 0x7fcf20] i8c dc,h,v,p: 86% 13%  1%  0%
[libx264 @ 0x7fcf20] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x7fcf20] ref P L0: 79.4%  2.1% 13.2%  5.2%
[libx264 @ 0x7fcf20] ref B L0: 61.1% 37.7%  1.2%
[libx264 @ 0x7fcf20] ref B L1: 92.3%  7.7%
[libx264 @ 0x7fcf20] kb/s:40.85

Answer

blahdiblah picture blahdiblah · Feb 29, 2012

This:

Incompatible pixel format 'bgra' for codec 'libx264', auto-selecting format 'yuv420p'

is where your alpha's being lost. Try specifying a different pixel format that includes alpha information, though obviously they're not all supported by the x264 library.