在android中使用ffmpeg将mp4转换为m4a

时间:2017-11-29 00:39:31

标签: android audio video ffmpeg compression

我正在尝试添加在项目中压缩视频文件的功能。但是,我尝试在压缩之前使用FFMPEG Library从原始视频文件中提取音频。命令行是

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

编码完成后,我注意到输出仍然是视频文件,但大小不同。这给我带来了两个问题,我想知道他们的答案。

1 - 可以将“.m4a”文件视为视频文件吗?

2 - 我可以使用此命令行压缩视频文件吗?

祝你好运

执行命令后记录

<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>

1 个答案:

答案 0 :(得分:2)

  

1 - 可以将“.m4a”文件视为视频文件吗?

是。如果您的输入包含视频,那么您的输出也是如此,因为默认情况下,ffmpeg将automatically choose每个流类型的一个流从输入映射到输出。

至于扩展程序.m4a旨在用于音频文件,但我怀疑它在功能上与.m4v.mp4不同。

  

2 - 我可以使用此命令行压缩视频文件吗?

是的,实际上你的命令确实压缩了视频和音频。

如果要提取音频,您需要告诉ffmpeg您想要哪些流,并在不重新编码的情况下将其告诉stream copy(重新多路复用)。仅包含音频流:

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

或排除视频:

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

我更喜欢-map,因为它更灵活;我几乎从不使用-vn-an-sn-dn