首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编译ffmpeg以只获得mp3和mp4支持

如何编译ffmpeg以只获得mp3和mp4支持
EN

Stack Overflow用户
提问于 2019-02-18 15:51:21
回答 1查看 4.5K关注 0票数 8

我正在构建电子应用程序,我使用ffmpeg将m4a或webm文件转换为mp3,并将视频专用mp4和m4a音频文件合并到mp4。

我可以使用media-autobuild-suite实现这一点,使用轻型构建选项,但是静态文件的大小大约是20 it,我想缩小它一点。我用这个配置编译了ffmpeg和ff探头。

代码语言:javascript
复制
--disable-libaom
--disable-version3
# Full
--disable-chromaprint
--disable-cuda-sdk
--disable-decklink
--disable-frei0r
--disable-libbs2b
--disable-libcaca
--disable-libcdio
--disable-libfdk-aac
--disable-libflite
--disable-libfribidi
--disable-libgme
--disable-libgsm
--disable-libilbc
--disable-libkvazaar
--disable-libmodplug
--disable-libnpp
--disable-libopenh264
--disable-libopenmpt
--disable-librtmp
--disable-librubberband
--disable-libssh
--disable-libtesseract
--disable-libxavs
--disable-libzmq
--disable-libzvbi
--disable-opencl
--disable-opengl
--disable-libvmaf
--disable-libcodec2
--disable-libsrt
--disable-ladspa
--disable-ffplay
#--enable-vapoursynth
#--enable-liblensfun
--disable-libndi_newtek

--enable-demuxer=mp3
--enable-demuxer=mov
--enable-demuxer=opus

--enable-parser=ac3
--enable-parser=mpegaudio
--enable-parser=h264
--enable-parser=opus

--enable-protocol=file
--enable-protocol=pipe

--enable-decoder=mp3
--enable-decoder=mp4
--enable-decoder=opus

--enable-encoder=mp3
--enable-encoder=mp4
--enable-encoder=opus

有了这个配置,我得到了ffmpeg静态文件--围绕2mb,ff探针静态文件--围绕2mb,但是有了这个错误。

代码语言:javascript
复制
C:\Users\Admin\Desktop\ffmpeg compilations\2mb\local64>ffmpeg -i simple.m4a simple.mp3 
ffmpeg version N-93147-g9326117bf6 Copyright (c) 2000-2019 the FFmpeg developers built with gcc 8.2.1 (Rev1, Built by MSYS2 project) 20181214
configuration:  .... //here comes configuration as described above
libavutil      56. 26.100 / 56. 26.100
libavcodec     58. 47.102 / 58. 47.102
libavformat    58. 26.101 / 58. 26.101
libavdevice    58.  6.101 / 58.  6.101
libavfilter     7. 48.100 /  7. 48.100
libswscale      5.  4.100 /  5.  4.100
libswresample   3.  4.100 /  3.  4.100
libpostproc    55.  4.100 / 55.  4.100
Guessed Channel Layout for Input Stream #0.0 : stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'simple.m4a':
Metadata:
  major_brand     : dash
  minor_version   : 0
  compatible_brands: iso6mp41
  creation_time   : 2018-10-31T19:47:32.000000Z
Duration: 00:02:38.92, start: 0.000000, bitrate: 127 kb/s
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 7 kb/s (default)
Metadata:
  creation_time   : 2018-10-31T19:47:32.000000Z
  handler_name    : SoundHandler
[NULL @ 0000000000486200] Unable to find a suitable output format for 'simple.mp3' 
simple.mp3: Invalid argument

任何想法,我还应该包括在这个静态文件中吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-18 23:45:00

不需要零敲碎打地禁用东西:只需使用--disable-everything,然后启用所需的。

下面是一个您可以从下面开始的示例:

代码语言:javascript
复制
./configure
--disable-everything
--disable-network
--disable-autodetect
--enable-small
--enable-decoder=aac*,ac3*,opus,vorbis
--enable-demuxer=mov,m4v,matroska
--enable-muxer=mp3,mp4
--enable-protocol=file
--enable-libshine
--enable-encoder=libshine
--enable-filter=aresample
  • 最终二进制大小将在2-3 MB左右.
  • 不需要启用任何解析器:选定的解码器将自动选择所需的任何内容。
  • FFmpeg没有本机MP3编码器,因此您需要使用外部库,如libmp3lame或libshine。因为你提到了安卓,我想你会想要libshine而不是libmp3lame来编码MP3。
  • 彻底测试。我可能忘了什么。
  • 如果您真的想疯掉,那么就使用--disable-all而不是--disable-everything,另外还必须手动包含所需的FFmpeg库,但这需要更多的工作和更多的麻烦,因为返回不多。

这将允许您从大多数MP3和Webm输入中编码M4A音频:

代码语言:javascript
复制
ffmpeg -i input.webm output.mp3

还将允许您将MP4/M4V + M4A重新修改为MP4:

代码语言:javascript
复制
ffmpeg -i video.m4v -i audio.m4a -map 0:v -map 0:a -c copy output.mp4
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54750953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档