ffmpeg 仅转换 MP3 文件的最佳配置
Best config for ffmpeg to convert MP3 file only
我想编译 FFMPEG 以支持从 MP3 到 WAV 以及从 WAV 到 MP3 的转换。
因为我只需要那个任务,输出编译大小对我来说真的很重要,请纠正我最好的编译配置来满足我的要求。
这里是完整的配置文件:
function build_ffmpeg
{
echo "Starting build ffmpeg for $ARCH"
cd ffmpeg
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=$ARCH \
--cc=$CC \
--cross-prefix=$CROSS_COMPILE \
--nm=$NM \
--sysroot=$PLATFORM \
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--enable-runtime-cpudetect \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog -L$PREFIX/lib" \
--extra-cflags="-I$PREFIX/include" \
--disable-everything \
--enable-pthreads \
--enable-libass \
--enable-libvo-aacenc \
--enable-libvo-amrwbenc \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_dxva2 \
--enable-hwaccel=mpeg4_vaapi \
--enable-demuxer=mov \
--enable-demuxer=h264 \
--enable-demuxer=mpegvideo \
--enable-demuxer=h263 \
--enable-demuxer=mpegps \
--enable-demuxer=mjpeg \
--enable-demuxer=rtsp \
--enable-demuxer=rtp \
--enable-demuxer=hls \
--enable-demuxer=matroska \
--enable-muxer=rtsp \
--enable-muxer=mp4 \
--enable-muxer=mov \
--enable-muxer=mjpeg \
--enable-muxer=matroska \
--enable-protocol=crypto \
--enable-protocol=jni \
--enable-protocol=file \
--enable-encoder=libvo_amrwbenc \
--enable-decoder=amrwb \
--enable-muxer=mp2 \
--enable-bsfs \
--enable-decoders \
--enable-encoders \
--enable-parsers \
--enable-hwaccels \
--enable-muxers \
--enable-avformat \
--enable-avcodec \
--enable-avresample \
--enable-zlib \
--disable-doc \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avfilter \
--disable-avdevice \
--enable-nonfree \
--enable-version3 \
--enable-memalign-hack \
--enable-asm \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4 install
make clean
cd ..
echo "FINISHED ffmpeg for $ARCH"
}
function build_one {
echo "Starting build one for $ARCH"
cd ffmpeg
${LD} -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname $SONAME -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $OUT_LIBRARY -lavcodec -lavformat -lavresample -lavutil -lswresample -lass -lfreetype -lfribidi -lswscale -lvo-aacenc -lvo-amrwbenc -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker -zmuldefs $PREBUILT/lib/gcc/$EABIARCH/$COMPILATOR_VERSION/libgcc.a
cd ..
echo "FINISHED one for $ARCH"
}
./configure --disable-all --disable-autodetect --disable-network --enable-pthreads \
--enable-avcodec --enable-avformat --enable-swresample --enable-avfilter \
--enable-libmp3lame --enable-parser=mpegaudio --enable-demuxer=mp3,wav \
--enable-muxer=mp3,wav --enable-decoder=pcm*,mp3* --enable-encoder=pcm*,libmp3lame \
--enable-filter=aresample --enable-protocol=file --enable-ffmpeg --enable-small
如果您需要更快但质量较低的 MP3 编码(尤其是在没有 FPU 的架构上),请考虑使用 libshine 而不是 libmp3lame。
我通常不推荐使用 --disable-all
,但可执行文件的大小似乎是对您来说最重要的因素。使用 --disable-everything
更容易使用,因为它不会禁用 FFmpeg 库,因此不太容易忘记组件。
--disable-small
优化大小而不是速度。它确实会产生大小差异(本例中为 1 MB 与 1.4 MB),但我不确定它会产生多大的速度差异。
我没有包含您可能需要为 Android 编译或在 Android 上编译的任何其他选项。
这可能不适用于包含专辑封面的 MP3 输入,因为我没有启用任何视频选项(特别是 JPG 和 PNG 相关组件)。您可以通过使用 -map
选项仅映射音频来实现这一点,例如使用 -map 0:a
.
我想编译 FFMPEG 以支持从 MP3 到 WAV 以及从 WAV 到 MP3 的转换。
因为我只需要那个任务,输出编译大小对我来说真的很重要,请纠正我最好的编译配置来满足我的要求。
这里是完整的配置文件:
function build_ffmpeg
{
echo "Starting build ffmpeg for $ARCH"
cd ffmpeg
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=$ARCH \
--cc=$CC \
--cross-prefix=$CROSS_COMPILE \
--nm=$NM \
--sysroot=$PLATFORM \
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--enable-runtime-cpudetect \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog -L$PREFIX/lib" \
--extra-cflags="-I$PREFIX/include" \
--disable-everything \
--enable-pthreads \
--enable-libass \
--enable-libvo-aacenc \
--enable-libvo-amrwbenc \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_dxva2 \
--enable-hwaccel=mpeg4_vaapi \
--enable-demuxer=mov \
--enable-demuxer=h264 \
--enable-demuxer=mpegvideo \
--enable-demuxer=h263 \
--enable-demuxer=mpegps \
--enable-demuxer=mjpeg \
--enable-demuxer=rtsp \
--enable-demuxer=rtp \
--enable-demuxer=hls \
--enable-demuxer=matroska \
--enable-muxer=rtsp \
--enable-muxer=mp4 \
--enable-muxer=mov \
--enable-muxer=mjpeg \
--enable-muxer=matroska \
--enable-protocol=crypto \
--enable-protocol=jni \
--enable-protocol=file \
--enable-encoder=libvo_amrwbenc \
--enable-decoder=amrwb \
--enable-muxer=mp2 \
--enable-bsfs \
--enable-decoders \
--enable-encoders \
--enable-parsers \
--enable-hwaccels \
--enable-muxers \
--enable-avformat \
--enable-avcodec \
--enable-avresample \
--enable-zlib \
--disable-doc \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avfilter \
--disable-avdevice \
--enable-nonfree \
--enable-version3 \
--enable-memalign-hack \
--enable-asm \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j4 install
make clean
cd ..
echo "FINISHED ffmpeg for $ARCH"
}
function build_one {
echo "Starting build one for $ARCH"
cd ffmpeg
${LD} -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$PREFIX/lib -soname $SONAME -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o $OUT_LIBRARY -lavcodec -lavformat -lavresample -lavutil -lswresample -lass -lfreetype -lfribidi -lswscale -lvo-aacenc -lvo-amrwbenc -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker -zmuldefs $PREBUILT/lib/gcc/$EABIARCH/$COMPILATOR_VERSION/libgcc.a
cd ..
echo "FINISHED one for $ARCH"
}
./configure --disable-all --disable-autodetect --disable-network --enable-pthreads \
--enable-avcodec --enable-avformat --enable-swresample --enable-avfilter \
--enable-libmp3lame --enable-parser=mpegaudio --enable-demuxer=mp3,wav \
--enable-muxer=mp3,wav --enable-decoder=pcm*,mp3* --enable-encoder=pcm*,libmp3lame \
--enable-filter=aresample --enable-protocol=file --enable-ffmpeg --enable-small
如果您需要更快但质量较低的 MP3 编码(尤其是在没有 FPU 的架构上),请考虑使用 libshine 而不是 libmp3lame。
我通常不推荐使用
--disable-all
,但可执行文件的大小似乎是对您来说最重要的因素。使用--disable-everything
更容易使用,因为它不会禁用 FFmpeg 库,因此不太容易忘记组件。--disable-small
优化大小而不是速度。它确实会产生大小差异(本例中为 1 MB 与 1.4 MB),但我不确定它会产生多大的速度差异。我没有包含您可能需要为 Android 编译或在 Android 上编译的任何其他选项。
这可能不适用于包含专辑封面的 MP3 输入,因为我没有启用任何视频选项(特别是 JPG 和 PNG 相关组件)。您可以通过使用
-map
选项仅映射音频来实现这一点,例如使用-map 0:a
.