Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

convert mp4 to m4a using ffmpeg in android

I'm trying to add the ability to compress video files in my project. However, I tried to extract the Audio from the original video file using FFMPEG Library before compressing it. The command line was

-i video.mp4 -c:a aac -b:a 160k target.m4a

After the encoding was done I noticed that the output is still a video file but with a difference in the size. This brought two questions to me and I would like to know their answers.

1 - can the ".m4a" file be considered as a video file?

2 - can I use this command line to compress video files?

Best regards

Log after executing the command

<p>

 success load
 started encoding
 ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
   built with gcc 4.8 (GCC)
   configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
   libavutil      55. 17.103 / 55. 17.103
   libavcodec     57. 24.102 / 57. 24.102
   libavformat    57. 25.100 / 57. 25.100
   libavdevice    57.  0.101 / 57.  0.101
   libavfilter     6. 31.100 /  6. 31.100
   libswscale      4.  0.100 /  4.  0.100
   libswresample   2.  0.101 /  2.  0.101
   libpostproc    54.  0.100 / 54.  0.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/tempVid.mp4':
   Metadata:
     major_brand     : 3gp4
     minor_version   : 0
     compatible_brands: isom3gp4
     creation_time   : 2017-11-30 03:22:41
     com.android.version: 6.0.1
   Duration: 00:00:19.80, start: 0.000000, bitrate: 4246 kb/s
     Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 176x144, 4112 kb/s, SAR 1:1 DAR 11:9, 29.94 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
     Metadata:
       rotate          : 270
       creation_time   : 2017-11-30 03:22:41
       handler_name    : VideoHandle
     Side data:
       displaymatrix: rotation of 90.00 degrees
     Stream #0:1(eng): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, flt, 12 kb/s (default)
     Metadata:
       creation_time   : 2017-11-30 03:22:41
      handler_name    : SoundHandle
 [libx264 @ 0xb5bc4400] using SAR=1/1
 [libx264 @ 0xb5bc4400] using cpu capabilities: none!
 [libx264 @ 0xb5bc4400] profile High, level 1.1
 [libx264 @ 0xb5bc4400] 264 - core 148 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - 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=5 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=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=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 [aac @ 0xb5bc4c00] Too many bits 20480.000000 > 6144 per frame requested, clamping to max
 Output #0, ipod, to '/storage/emulated/0/target.m4a':
   Metadata:
     major_brand     : 3gp4
     minor_version   : 0
     compatible_brands: isom3gp4
     com.android.version: 6.0.1
     encoder         : Lavf57.25.100
     Stream #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 144x176 [SAR 1:1 DAR 9:11], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
     Metadata:
       handler_name    : VideoHandle
      creation_time   : 2017-11-30 03:22:41
       encoder         : Lavc57.24.102 libx264
    Side data:
       unknown side data type 10 (24 bytes)
     Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 48 kb/s (default)
     Metadata:
       creation_time   : 2017-11-30 03:22:41
       handler_name    : SoundHandle
       encoder         : Lavc57.24.102 aac
  Stream mapping:
   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (amr_nb (amrnb) -> aac (native))
 Press [q] to stop, [?] for help
 frame=   47 fps=0.0 q=0.0 size=       0kB time=00:00:00.76 bitrate=   0.5kbits/s speed=1.53x    
 frame=   69 fps= 68 q=29.0 size=      12kB time=00:00:01.79 bitrate=  56.3kbits/s speed=1.77x    
 frame=   88 fps= 57 q=29.0 size=      22kB time=00:00:02.30 bitrate=  76.5kbits/s speed=1.49x    
 frame=  110 fps= 54 q=29.0 size=      31kB time=00:00:02.81 bitrate=  89.9kbits/s speed=1.37x    
 frame=  118 fps= 45 q=29.0 size=      34kB time=00:00:03.84 bitrate=  71.5kbits/s speed=1.47x    
 frame=  144 fps= 46 q=29.0 size=      44kB time=00:00:03.84 bitrate=  93.7kbits/s speed=1.23x    
 frame=  150 fps= 41 q=29.0 size=      48kB time=00:00:04.86 bitrate=  80.6kbits/s speed=1.34x    
 frame=  178 fps= 42 q=29.0 size=      62kB time=00:00:04.86 bitrate= 105.2kbits/s speed=1.16x    
 frame=  185 fps= 39 q=29.0 size=      67kB time=00:00:05.88 bitrate=  93.4kbits/s speed=1.25x    
 frame=  206 fps= 40 q=29.0 size=      78kB time=00:00:05.88 bitrate= 108.5kbits/s speed=1.13x    
 frame=  214 fps= 37 q=29.0 size=      84kB time=00:00:06.91 bitrate=  99.8kbits/s speed=1.21x    
 frame=  238 fps= 38 q=29.0 size=     100kB time=00:00:06.91 bitrate= 118.0kbits/s speed=1.11x    
 frame=  249 fps= 37 q=29.0 size=     106kB time=00:00:07.93 bitrate= 109.3kbits/s speed=1.18x    
 frame=  268 fps= 37 q=29.0 size=     119kB time=00:00:08.19 bitrate= 119.1kbits/s speed=1.13x    
 frame=  279 fps= 36 q=29.0 size=     127kB time=00:00:08.96 bitrate= 116.4kbits/s speed=1.16x    
 frame=  298 fps= 36 q=29.0 size=     140kB time=00:00:09.21 bitrate= 124.4kbits/s speed=1.11x    
 frame=  308 fps= 35 q=29.0 size=     149kB time=00:00:09.98 bitrate= 122.3kbits/s speed=1.14x    
 frame=  328 fps= 35 q=29.0 size=     162kB time=00:00:10.24 bitrate= 129.5kbits/s speed= 1.1x    
 frame=  343 fps= 35 q=29.0 size=     172kB time=00:00:10.88 bitrate= 129.2kbits/s speed=1.11x    
 frame=  358 fps= 35 q=29.0 size=     180kB time=00:00:11.90 bitrate= 124.0kbits/s speed=1.15x    
 frame=  387 fps= 36 q=29.0 size=     195kB time=00:00:11.90 bitrate= 134.1kbits/s speed=1.09x    
 frame=  398 fps= 35 q=29.0 size=     202kB time=00:00:12.92 bitrate= 127.9kbits/s speed=1.14x    
 frame=  418 fps= 35 q=29.0 size=     213kB time=00:00:13.31 bitrate= 131.3kbits/s speed=1.12x    
 frame=  432 fps= 35 q=29.0 size=     222kB time=00:00:13.95 bitrate= 130.3kbits/s speed=1.13x    
 frame=  448 fps= 35 q=29.0 size=     230kB time=00:00:14.59 bitrate= 129.0kbits/s speed=1.13x    
 frame=  469 fps= 35 q=29.0 size=     242kB time=00:00:14.97 bitrate= 132.5kbits/s speed=1.11x    
 frame=  478 fps= 34 q=29.0 size=     247kB time=00:00:15.87 bitrate= 127.6kbits/s speed=1.14x    
 frame=  509 fps= 35 q=29.0 size=     259kB time=00:00:16.00 bitrate= 132.8kbits/s dup=1 drop=0 speed=1.11x    
 frame=  525 fps= 35 q=29.0 size=     266kB time=00:00:17.02 bitrate= 127.8kbits/s dup=1 drop=0 speed=1.13x    
 frame=  539 fps= 35 q=29.0 size=     271kB time=00:00:17.79 bitrate= 124.5kbits/s dup=1 drop=0 speed=1.15x    
 frame=  564 fps= 35 q=29.0 size=     285kB time=00:00:18.04 bitrate= 129.4kbits/s dup=1 drop=0 speed=1.13x    
 frame=  574 fps= 35 q=29.0 size=     290kB time=00:00:19.07 bitrate= 124.8kbits/s dup=1 drop=0 speed=1.15x    
 frame=  590 fps= 35 q=29.0 size=     297kB time=00:00:19.45 bitrate= 125.2kbits/s dup=1 drop=0 speed=1.14x    
 frame=  594 fps= 33 q=-1.0 Lsize=     328kB time=00:00:19.84 bitrate= 135.2kbits/s dup=1 drop=0 speed= 1.1x    
 video:246kB audio:70kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.381132%
 [libx264 @ 0xb5bc4400] frame I:3     Avg QP:22.61  size:  4103
 [libx264 @ 0xb5bc4400] frame P:230   Avg QP:25.04  size:   851
 [libx264 @ 0xb5bc4400] frame B:361   Avg QP:28.82  size:   121
 [libx264 @ 0xb5bc4400] consecutive B-frames:  1.2% 40.7% 37.9% 20.2%
 [libx264 @ 0xb5bc4400] mb I  I16..4:  4.0% 49.8% 46.1%
 [libx264 @ 0xb5bc4400] mb P  I16..4:  0.1%  0.3%  0.2%  P16..4: 52.0% 27.1% 15.1%  0.0%  0.0%    skip: 5.3%
 [libx264 @ 0xb5bc4400] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 43.4%  2.1%  0.3%  direct: 1.7%  skip:52.5%  L0:39.3% L1:55.4% BI: 5.3%
 [libx264 @ 0xb5bc4400] 8x8 transform intra:51.7% inter:57.7%
 [libx264 @ 0xb5bc4400] coded y,uvDC,uvAC intra: 81.9% 93.5% 80.4% inter: 11.9% 40.0% 17.4%
 [libx264 @ 0xb5bc4400] i16 v,h,dc,p: 11% 25%  7% 57%
 [libx264 @ 0xb5bc4400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  7% 20% 16%  6% 11%  5% 20%  6%  9%
 [libx264 @ 0xb5bc4400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11% 22% 14%  5% 10%  7% 19%  5%  7%
 [libx264 @ 0xb5bc4400] i8c dc,h,v,p: 61% 18% 10% 10%
 [libx264 @ 0xb5bc4400] Weighted P-Frames: Y:24.3% UV:22.2%
 [libx264 @ 0xb5bc4400] ref P L0: 57.6% 14.3% 16.8%  8.9%  2.3%
 [libx264 @ 0xb5bc4400] ref B L0: 76.3% 19.1%  4.6%
 [libx264 @ 0xb5bc4400] ref B L1: 91.9%  8.1%
 [libx264 @ 0xb5bc4400] kb/s:101.58
[aac @ 0xb5bc4c00] Qavg: 64130.668
 success ffmpeg
 end encoding
ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
                                                            built with gcc 4.8 (GCC)
                                                            configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
                                                            libavutil      55. 17.103 / 55. 17.103
                                                            libavcodec     57. 24.102 / 57. 24.102
                                                            libavformat    57. 25.100 / 57. 25.100
                                                            libavdevice    57.  0.101 / 57.  0.101
                                                            libavfilter     6. 31.100 /  6. 31.100
                                                            libswscale      4.  0.100 /  4.  0.100
                                                            libswresample   2.  0.101 /  2.  0.101
                                                            libpostproc    54.  0.100 / 54.  0.100
                                                          Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/tempVid.mp4':
                                                            Metadata:
                                                              major_brand     : 3gp4
                                                              minor_version   : 0
                                                              compatible_brands: isom3gp4
                                                              creation_time   : 2017-11-30 03:22:41
                                                              com.android.version: 6.0.1
                                                            Duration: 00:00:19.80, start: 0.000000, bitrate: 4246 kb/s
                                                              Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 176x144, 4112 kb/s, SAR 1:1 DAR 11:9, 29.94 fps, 29.97 tbr, 90k tbn, 180k tbc (default)
                                                              Metadata:
                                                                rotate          : 270
                                                                creation_time   : 2017-11-30 03:22:41
                                                                handler_name    : VideoHandle
                                                              Side data:
                                                                displaymatrix: rotation of 90.00 degrees
                                                              Stream #0:1(eng): Audio: amr_nb (samr / 0x726D6173), 8000 Hz, mono, flt, 12 kb/s (default)
                                                              Metadata:
                                                                creation_time   : 2017-11-30 03:22:41
                                                                handler_name    : SoundHandle
                                                          [libx264 @ 0xb5bc4400] using SAR=1/1
                                                          [libx264 @ 0xb5bc4400] using cpu capabilities: none!
                                                          [libx264 @ 0xb5bc4400] profile High, level 1.1
                                                          [libx264 @ 0xb5bc4400] 264 - core 148 - H.264/MPEG-4 AVC codec - Copyleft 2003-2015 - 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=5 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=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=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
                                                          [aac @ 0xb5bc4c00] Too many bits 20480.000000 > 6144 per frame requested, clamping to max
                                                          Output #0, ipod, to '/storage/emulated/0/target.m4a':
                                                            Metadata:
                                                              major_brand     : 3gp4
                                                              minor_version   : 0
                                                              compatible_brands: isom3gp4
                                                              com.android.version: 6.0.1
                                                              encoder         : Lavf57.25.100
                                                              Stream #0:0(eng): Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 144x176 [SAR 1:1 DAR 9:11], q=-1--1, 29.97 fps, 30k tbn, 29.97 tbc (default)
                                                              Metadata:
                                                                handler_name    : VideoHandle
                                                                creation_time   : 2017-11-30 03:22:41
                                                                encoder         : Lavc57.24.102 libx264
                                                              Side data:
                                                                unknown side data type 10 (24 bytes)
                                                              Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 8000 Hz, mono, fltp, 48 kb/s (default)
                                                              Metadata:
                                                                creation_time   : 2017-11-30 03:22:41
                                                                handler_name    : SoundHandle
                                                                encoder         : Lavc57.24.102 aac
                                                          Stream mapping:
                                                            Stream #0:0 -> #0:0 (h26

</p>
like image 520
abdulrahman Avatar asked Dec 20 '25 15:12

abdulrahman


1 Answers

1 - can the ".m4a" file be considered as a video file?

Yes. If your input contained video then your output will too, because by default ffmpeg will automatically choose one stream per stream type from the input to map to the output.

As for the extension .m4a is intended to be used for audio files but I doubt it is functionally different than .m4v and .mp4.

2 - can I use this command line to compress video files?

Yes, and in fact your command did compress the video as well as the audio.


If you want to extract the audio you'll need to tell ffmpeg which streams you want and to tell it to stream copy (re-mux) without re-encoding. To include only the audio stream(s):

ffmpeg -i input.mp4 -map 0:a -c copy output.m4a

Or to exclude video:

ffmpeg -i input.mp4 -vn -c copy output.m4a

I prefer -map because it is more flexible; I almost never use -vn, -an, -sn, or -dn.

  • https://ffmpeg.org/ffmpeg.html#Advanced-options
  • https://trac.ffmpeg.org/wiki/Map
like image 124
llogan Avatar answered Dec 22 '25 08:12

llogan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!