ffmpeg 安装
- 原因是由于在工作中使用ImageIO.read(oldFile)时,大文件压缩时会出现java内存溢出的错误,故使用这个组件进行压缩
http://www.ffmpeg.org/download.html
一、windows安装
1、下载
https://github.com/BtbN/FFmpeg-Builds/releases
2、解压下载的文件,并将解压文件夹中的/bin目录配置成环境变量,配置成功后,重启电脑
3、验证
ffmpeg -version
二、linux安装
a、yum安装
1、安装Nux Dextop Yum 源
CentOS没有官方FFmpeg rpm软件包,故需要安装其他的源来支撑
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
2、安装FFmpeg 和 FFmpeg开发包
yum install ffmpeg ffmpeg-devel -y
3、验证
ffmpeg -version
b、源文件安装
与windows下载的地址一致,只是下载不同的版本而已
1、上传到服务器并解压
[root@doudou opt]# ls
ffmpeg-master-latest-linux64-gpl.tar.xz glibc-2.25.tar.gz
[root@doudou opt]# xz -kd ffmpeg-master-latest-linux64-gpl.tar.xz
[root@doudou opt]# ls
ffmpeg-master-latest-linux64-gpl.tar ffmpeg-master-latest-linux64-gpl.tar.xz glibc-2.25.tar.gz
[root@doudou opt]# tar -xf ffmpeg-master-latest-linux64-gpl.tar
You have new mail in /var/spool/mail/root
[root@doudou opt]# ls
ffmpeg-master-latest-linux64-gpl ffmpeg-master-latest-linux64-gpl.tar ffmpeg-master-latest-linux64-gpl.tar.xz glibc-2.25.tar.gz
[root@doudou opt]# mv ffmpeg-master-latest-linux64-gpl ffmpeg
[root@doudou opt]# ls
ffmpeg ffmpeg-master-latest-linux64-gpl.tar ffmpeg-master-latest-linux64-gpl.tar.xz glibc-2.25.tar.gz
2、检查依赖是否完整
[root@doudou opt]# cd ffmpeg
[root@doudou ffmpeg]# ls
bin doc LICENSE.txt
[root@doudou ffmpeg]# cd bin/
[root@doudou bin]# ls
ffmpeg ffplay ffprobe
[root@doudou bin]# ./ffmpeg -version
./ffmpeg: error while loading shared libraries: libmvec.so.1: cannot open shared object file: No such file or directory
[root@doudou bin]# ldd ffmpeg
./ffmpeg: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by ./ffmpeg)
linux-vdso.so.1 => (0x00007ffe4c5a8000)
libm.so.6 => /lib64/libm.so.6 (0x00007fd1c792e000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fd1c772a000)
librt.so.1 => /lib64/librt.so.1 (0x00007fd1c7522000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd1c7306000)
libc.so.6 => /lib64/libc.so.6 (0x00007fd1c6f38000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd1cfe86000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fd1c6d22000)
libmvec.so.1 => not found
libmvec.so.1 => not found 可以发现这儿少运行时的依赖
3、安装libmvec.so.1 => not found缺少的依赖
如果第二步不缺少,则不用执行此步
[root@doudou opt]# tar -xvzf glibc-2.25.tar.gz
[root@doudou opt]# cd glibc-2.25
[root@doudou opt]# mkdir build
[root@doudou opt]# cd build
[root@doudou opt]# ../configure --prefix=/usr
[root@doudou opt]# make -i
[root@doudou opt]# make install -i
进入刚刚安装的ffmpeg的bin目录执行 ldd ffmpeg,如果没有任何的缺少,则表示能正常运行
[root@doudou bin]# ldd ffmpeg
linux-vdso.so.1 (0x00007ffc19d2f000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc8137e2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007fc8135de000)
librt.so.1 => /lib64/librt.so.1 (0x00007fc8133d6000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc8131b8000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc812e1e000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc813af2000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc812c08000)
libmvec.so.1 => /lib64/libmvec.so.1 (0x00007fc8129de000)
4、是否安装成功
[root@doudou bin]# ./ffmpeg -version
ffmpeg version N-110946-g859c34706d-20230531 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (crosstool-NG 1.25.0.152_89671bf)
configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-ffbuild-linux-gnu- --arch=x86_64 --target-os=linux --ena
ble-gpl --enable-version3 --disable-debug --enable-iconv --enable-libxml2 --enable-zlib --enable-libfreetype --enable-libfribidi --enable-gmp --enable-openssl --enable-lz
ma --enable-fontconfig --enable-libvorbis --enable-opencl --enable-libpulse --enable-libvmaf --enable-libxcb --enable-xlib --enable-amf --enable-libaom --enable-libaribb2
4 --enable-avisynth --enable-chromaprint --enable-libdav1d --enable-libdavs2 --disable-libfdk-aac --enable-ffnvcodec --enable-cuda-llvm --enable-frei0r --enable-libgme --
enable-libkvazaar --enable-libass --enable-libbluray --enable-libjxl --enable-libmp3lame --enable-libopus --enable-librist --enable-libssh --enable-libtheora --enable-lib
vpx --enable-libwebp --enable-lv2 --enable-libvpl --enable-openal --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable
-libopenmpt --enable-librav1e --enable-librubberband --disable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libsvtav1 --enable-libtwolame --enable-lib
uavs3d --enable-libdrm --enable-vaapi --enable-libvidstab --enable-vulkan --enable-libshaderc --enable-libplacebo --enable-libx264 --enable-libx265 --enable-libxavs2 --en
able-libxvid --enable-libzimg --enable-libzvbi --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-ldexeflags=-pie --extra-libs='-ldl -l
gomp' --extra-version=20230531
libavutil 58. 12.100 / 58. 12.100
libavcodec 60. 16.100 / 60. 16.100
libavformat 60. 5.100 / 60. 5.100
libavdevice 60. 2.100 / 60. 2.100
libavfilter 9. 8.101 / 9. 8.101
libswscale 7. 3.100 / 7. 3.100
libswresample 4. 11.100 / 4. 11.100
libpostproc 57. 2.100 / 57. 2.100
三、java实现图片压缩
public static void main(String[] args) throws IOException {
ffmpegCompress("C:/temp/1.jpg",20,"C:/temp/666666.jpg");
}
/**
* 图片压缩.
* 必须安装ffmpeg,下载的地址https://github.com/BtbN/FFmpeg-Builds/releases,配置bin路径的环境变量后,一定要重启windows
* @param imageSource 源图片
* @param level 压缩等级,数值越大压缩等级越高
* @param outSource 输出的目录
*/
@SneakyThrows
public static void ffmpegCompress(String imageSource, Integer level, String outSource){
String command = "ffmpeg -i %s -q %s %s";
Runtime.getRuntime().exec(String.format(command, imageSource, level, outSource));
}
注意:本文归作者所有,未经作者允许,不得转载