关于相同转码参数下,不同版本ffmpeg压缩比差距很大的问题(使用videotoolbox硬编码)?

新手上路,请多包涵

请教个问题:
我的mac电脑上有2个版本的ffmpeg,A版本的ffmpeg是使用brew安装的,B版本的是我自己编译的。代码的版本号都是7.0.1。
但是当我使用相同的参数去压缩同一个文件的时候,压缩比差距很大。
A版本的命令:
ffmpeg -i 1390942-uhd_4096_2160_24fps.mp4 -c:v h264_videotoolbox -b:v 12000k 1390942-uhd_4096_2160_24fps_after.mp4 -loglevel debug
B版本的命令:
/Users/hanyongqiang-mac/code/baidu/transcode/third_party/ffmpeg701/ffmpeg_build_macos/mac_arm64/bin/ffmpeg -i 1390942-uhd_4096_2160_24fps.mp4 -c:v h264_videotoolbox -b:v 12000k 1390942-uhd_4096_2160_24fps_after.mp4 -loglevel debug
源文件的大小是78M,A版本ffmpeg压缩后的文件是39.6M,B版本压缩后是112M,这个奇怪的现象有可能是什么原因呢?

考虑是编译选项的问题,但没有看出有可能的原因,希望有经验的专家帮忙鉴定一下:
2个ffmpeg的编译选项:
A:
ffmpeg version 7.1 Copyright (c) 2000-2024 the FFmpeg developers
built with Apple clang version 15.0.0 (clang-1500.3.9.4)
configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.1 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox --enable-audiotoolbox --enable-neon
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.100 / 61. 19.100
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100

B:
ffmpeg version 7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
built with Apple clang version 15.0.0 (clang-1500.3.9.4)
configuration: --prefix=/Users/mac/code/baidu/transcode/third_party/ffmpeg701/ffmpeg_build_macos/mac_x86_64 --disable-debug --target-os=darwin --arch=x86_64 --cc='clang -arch x86_64' --enable-cross-compile --ranlib=/usr/bin/ranlib --strip=/usr/bin/strip --extra-cflags='-std=c11 -I/Users/mac/code/baidu/transcode/third_party/ffmpeg701/ffmpeg_build_macos/mac_x86_64/include -I/Users/mac/code/baidu/transcode/third_party/ffmpeg701/ffmpeg_build_macos/mac_x86_64/include/fdk-aac' --extra-cxxflags='-std=c++11' --extra-ldflags=-L/Users/mac/code/baidu/transcode/third_party/ffmpeg701/ffmpeg_build_macos/mac_x86_64/lib --extra-libs='-lpthread -lm -lc++' --host-cflags= --host-ldflags= --enable-static --enable-avformat --disable-decoders --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=aac --disable-shared --disable-alsa --disable-doc --disable-openssl --disable-libvpx --disable-libwebp --disable-lzma --disable-bzlib --disable-xlib --disable-libxcb --disable-vaapi --disable-sndio --disable-librtmp --enable-gpl --enable-nonfree --enable-libx264 --enable-encoder=libx264 --enable-libfdk-aac --enable-encoder=h264_videotoolbox --enable-videotoolbox --disable-libmp3lame --disable-asm --disable-zlib --disable-audiotoolbox
libavutil 59. 8.100 / 59. 8.100
libavcodec 61. 3.100 / 61. 3.100
libavformat 61. 1.100 / 61. 1.100
libavdevice 61. 1.100 / 61. 1.100
libavfilter 10. 1.100 / 10. 1.100
libswscale 8. 1.100 / 8. 1.100
libswresample 5. 1.100 / 5. 1.100
libpostproc 58. 1.100 / 58. 1.100

阅读 553
avatarAI BotBETA

可能的原因

在对比两个版本的 FFmpeg(A 版本和 B 版本)时,尽管它们声称都是基于相同的版本号(7.0.1),但在编译选项和配置上的差异可能会导致显著的压缩比不同。以下是一些可能的解释:

  1. 架构和编译目标不同

    • A 版本是为 arm64 架构编译的,这通常用于现代 Mac 设备(如 M1 和 M2 芯片)。
    • B 版本是为 x86_64 架构编译的,这适用于旧款 Intel 和 AMD 芯片的 Mac 设备。

    不同架构可能会影响硬件加速(如 VideoToolbox)的性能和效率,从而导致不同的压缩结果。

  2. 编译选项和启用/禁用的库

    • A 版本启用了更多的库和特性,如 --enable-gpl, --enable-libaom, --enable-libdav1d 等,这些虽然与 VideoToolbox 编码不直接相关,但可能影响整体性能和配置。
    • B 版本特别针对 VideoToolbox 编码进行了配置(--enable-encoder=h264_videotoolbox --enable-videotoolbox),并且禁用了很多其他库和特性,如 --disable-libvpx, --disable-libwebp 等。

    这种差异可能导致 VideoToolbox 在不同版本的 FFmpeg 中以不同的方式工作。

  3. FFmpeg 内部版本和库的差异

    • 尽管两个版本的 FFmpeg 都声称是 7.0.1,但内部使用的库版本(如 libavutil, libavcodec 等)可能存在细微差异。
    • A 版本可能使用了更新的库版本,这些版本可能包含性能改进或错误修复。
  4. 硬件和驱动程序的差异

    • 不同版本的 FFmpeg 可能对硬件加速的支持程度不同,特别是在不同架构的 Mac 设备上。
    • 驱动程序和操作系统的更新也可能影响硬件加速的性能。

建议的解决步骤

  1. 确保架构一致性

    • 如果可能,尝试在相同的架构上编译和使用 FFmpeg,以排除架构差异的影响。
  2. 检查 FFmpeg 日志

    • 仔细检查两个版本的 FFmpeg 的调试日志,查找与 VideoToolbox 编码相关的任何警告或错误。
  3. 更新和重新编译

    • 尝试使用最新的 FFmpeg 源代码重新编译两个版本,并确保使用相同的编译选项。
  4. 使用其他工具进行验证

    • 使用其他视频编码工具(如 HandBrake)进行相同的压缩任务,以验证是否是 FFmpeg 特定的问题。
  5. 联系 FFmpeg 社区

    • 如果问题仍然存在,考虑向 FFmpeg 社区或相关论坛寻求帮助,可能有其他用户遇到了类似的问题。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏