javacpp-presets中FFmpeg叠加视频时上层画面模糊问题求助
使用javacpp-presets的FFmpeg执行视频叠加时上层视频模糊,本地编译版本正常
使用javacpp-presets提供的FFmpeg(5.x和6.x版本均测试)执行视频叠加操作时,底层视频运动状态下上层视频会出现模糊,但本地编译的同版本FFmpeg执行相同命令无此问题。已调整preset、crf、codec、profile等参数,均无效。
执行命令
.javacpp/cache/ffmpeg-5.0-1.5.7-macosx-x86_64.jar/org/bytedeco/ffmpeg/macosx-x86_64/ffmpeg -y -f lavfi -i color=c=black:s=1920x1080 -i a.mp4 -i b.mp4 -i c.mp4 -filter_complex "[2:v][3:v]alphamerge[alphamerge0];[1:v]scale=1920x1080[out0];[0:v][out0]overlay=enable='between(t,0.0,40.141)':x=0.0:y=0.0[overlay0];[overlay0][alphamerge0]overlay=enable='between(t,0.0,40.141)':x=0.0:y=0.0[out]" -preset medium -t 00:00:40.141 -crf 20 -vcodec h264 -map "[out]" -profile:v high -force_key_frames "expr:gte(t,n_forced*8)" out.mp4
版本信息
模糊版本(javacpp-presets)
.javacpp/cache/ffmpeg-5.0-1.5.7-macosx-x86_64.jar/org/bytedeco/ffmpeg/macosx-x86_64/ffmpeg -version ffmpeg version 5.0 Copyright (c) 2000-2022 the FFmpeg developers built with Apple clang version 12.0.0 (clang-1200.0.32.29) configuration: --prefix=.. --disable-iconv --disable-opencl --disable-sdl2 --disable-bzlib --disable-lzma --disable-linux-perf --disable-xlib --enable-shared --enable-version3 --enable-runtime-cpudetect --enable-zlib --enable-libmp3lame --enable-libspeex --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-openssl --enable-libopenh264 --enable-libvpx --enable-libfreetype --enable-libopus --enable-libxml2 --enable-libsrt --enable-libwebp --enable-pthreads --enable-indev=avfoundation --disable-libxcb --extra-cflags='-I../include/ -I../include/libxml2' --extra-ldflags=-L../lib/ --extra-libs='-lstdc++ -ldl -lz -lm' libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100
正常版本(本地编译)
ffmpeg -version ffmpeg version 5.0.1 Copyright (c) 2000-2022 the FFmpeg developers built with Apple clang version 13.1.6 (clang-1316.0.21.2.5) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.0.1_3 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librist --enable-librubberband --enable-libsnappy --enable-libsrt --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-neon libavutil 57. 17.100 / 57. 17.100 libavcodec 59. 18.100 / 59. 18.100 libavformat 59. 16.100 / 59. 16.100 libavdevice 59. 4.100 / 59. 4.100 libavfilter 8. 24.100 / 8. 24.100 libswscale 6. 4.100 / 6. 4.100 libswresample 4. 3.100 / 4. 3.100 libpostproc 56. 3.100 / 56. 3.100
排查与解决方向
- 指定编码器:javacpp版本默认使用
libopenh264,本地版本用libx264。修改命令中的-vcodec h264为-vcodec libx264,强制使用libx264编码。 - 补全编译选项:对比编译配置,javacpp版本缺失
enable-libx264、enable-videotoolbox、enable-postproc等关键选项。自定义编译javacpp-presets的FFmpeg时添加这些选项,确保编码和后期处理能力与本地版本一致。 - 显式指定像素格式:在filter_complex的overlay滤镜后添加
format=yuv420p,统一像素格式处理流程,避免格式转换导致的模糊。 - 检查硬件加速:本地版本启用了
videotoolbox硬件加速,javacpp版本未开启。尝试在javacpp的命令中添加-hwaccel videotoolbox,启用硬件加速处理。
内容的提问来源于stack exchange,提问作者Lance
相关产品推荐
相关产品推荐

