为什么我的ffmpeg库这么大?

13

我使用以下脚本在我的 Ubuntu 64 位系统上编译了 ffmpeg 库:

   mkdir ~/ffmpeg_sources

#x264

cd ~/ffmpeg_sources
   wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
   tar xjvf last_x264.tar.bz2
   cd x264-snapshot*
   ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-asm
   make
   make install
   make distclean

#FFmpeg


(这是原文,已经是中文了)
cd ~/ffmpeg_sources
   wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
   tar xjvf ffmpeg-snapshot.tar.bz2
   cd ffmpeg
   PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
   export PKG_CONFIG_PATH
   ./configure --prefix="$HOME/ffmpeg_build" --extra-cflags="-I$HOME/ffmpeg_build/include" \
   --extra-ldflags="-L$HOME/ffmpeg_build/lib" --bindir="$HOME/bin" --extra-libs="-ldl" --   enable-gpl \
  --enable-libx264 --enable-x11grab --disable-yasm                                                                                                                               
   make
   make install
   make distclean
   hash -r

但最终的库非常大(例如,libavcodec.a > 140 Mb)。有人知道为什么我的库这么大吗?

编辑

我的解决方案:

  • 在 ./configure 中添加选项 "--disable-debug"。我的 libavcodec 大小从 150Mb 减少到 12Mb!
  • 删除所有不必要的编解码器:使用选项 -disable-encoders,--disable-decoders,然后使用 --enable-encoder=NAME 和 --enable-decoder=NAME 添加仅需要的编解码器。使用 ./configure --list-encoders --list-decoders 打印列表。更多信息请参见 ./configure --help。(我的最终 libavcodec 大小为 4Mo)

1
FFmpeg是一个非常庞大的库,具有许多功能(许多不同的编解码器等),因此输出文件很大并不奇怪。您认为这个大小是否不正确或者...? - nobody
1
我认为是因为我读了很多线程,人们使用的libavcodec大小小于15 Mo(例如http://ffmpeg-users.933282.n4.nabble.com/libavcodec-size-too-large-td4657129.html)。我理解它包含许多编解码器...但实际上,我只需要一个:H.264(x264)。因此,我目前正在寻找使用编译标志删除其他编解码器。 - user3504221
还可以在链接器标志中添加“-s”来帮助。 - Antonio
你好。你解决了你的问题吗?你减小了文件大小吗?请告诉我如何减小文件大小。我需要减小我的apk大小。提前感谢。 - Vijay
1个回答

3
请注意,静态库(例如libavcodec.a)包含各种额外的数据,这些数据将被链接器剥离。
即使在此之后,您也可以在./configure参数中添加--enable-small。大约一年前,此参数将libavcodec.so的大小从14 MByte减小到了约3 MByte。

小心,--enable-small 优化的是大小而不是速度,至少文档上是这么说的 :) - rogerdpack
1
@rogerdpack 注意,在许多实际情况下,较小的二进制文件分页较少,或者提高了缓存命中率。因此,通常情况下,优化大小比“速度”更有回报。但是您的评论是正确的,我们必须小心这样的假设。 - Alex Cohn
我在Ubuntu 20.04.4 LTS系统中使用ffmpeg-5.1android-ndk-r21e。通过使用--enable-small并添加-s,编译的动态库libavcodec.so大小为7.5M,仍然很大。你能给出其他建议来减小文件大小吗? - JustinGong
@JustinGong libavcodec.so 的大小取决于你启用的编解码器。此外,请确保你已经剥离了 so 文件。 - Alex Cohn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接