因为项目需要,需要在EC2和EB中安装FFMPEG来处理视频。
但Amazon Linux默认的yum源中没有FFMPEG,因此需要手动进行安装。
网上有各种的安装方法,有使用Nux Dextop YUM的安装,也有直接使用Static Builds的方式。经过比较试验,最终决定使用Static Builds的方式进行安装,安装方法记录如下。
在Amazon Linux中安装FFMPEG
FFMPEG官网 https://www.ffmpeg.org/download.html 中,推荐的Linux Static Builds的下载地址为: https://johnvansickle.com/ffmpeg/。
64位的Release版的下载地址为: https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz, 注意网上很多教程和gist中所提的这个下载地址 http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.latest.tar.gz 已经不再维护了。
登陆Amazon Linux,下载压缩包,解压后直接拷贝到指定的bin目录即可使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 下载 wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
# 解压 tar xJfv ffmpeg-release-64bit-static.tar.xz
# 拷贝到指定bin目录(此处以latest版本是4.1,目标bin目录为/usr/local/bin/为例) cd ffmpeg-4.1-64bit-static/ sudo cp ffmpeg ffprobe /usr/local/bin/
# 测试命令是否可用 ffmpeg ffprobe
|
实际操作中有需要的话,可以再将ffmpeg和ffprobe链到/usr/bin中。
在Elastic BeanStalk中安装FFMPEG
在没有科学上网的情况下,国内访问https://johnvansickle.com这个网站很不稳定,在Beijing Region的EC2中,下载速度有时只有几KB。
为了能够在Elastic BeanStalk中稳定安装FFMPEG,采取的方案是自己将二进制文件重新打包,先上传到国内的S3中,再从S3下载二进制文件安装到EB的Instance中。
除了稳定外,这样还有一个好处,就是使用的Release的版本自己可控。即使johnvansickle.com后续不再维护FFMPEG了或者有最新的Release了,也不会对我们的使用产生影响。
具体步骤如下:
在本地机器或某个EC2中打包二进制文件上传S3, 此处以最新版的4.1为例。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 下载 wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz
# 解压 tar xJfv ffmpeg-release-64bit-static.tar.xz
# 制作压缩包 mkdir ffmpeg-4.1-64bit cp ffmpeg-4.1-64bit-static/ffmpeg ffmpeg-4.1-64bit-static/ffprobe ffmpeg-4.1-64bit cd ffmpeg-4.1-64bit tar czvf ffmpeg-4.1-64bit.tar.gz ffmpeg ffprobe
# 上传压缩包到S3 (此处bucket和路径需要换成实际使用的) aws s3 cp ffmpeg-4.1-64bit.tar.gz s3://test-for-ffmpeg-bucket/ffmpeg/ --acl public-read
|
配置EB从S3下载压缩包并解压到指定bin目录,此处可以直接使用EB的sources语法, 比自己用shell写一堆的命令来的更简洁。sources语法目前支持 tar, tar+gzip, tar+bz2, 和zip这四种格式。
在.ebextensions目录下添加配置文件20-install-ffmpeg.config, 内容如下。/usr/local/bin可以修改为实际需要安装的路径。
1 2
| sources: /usr/local/bin: https://s3.cn-north-1.amazonaws.com.cn/test-for-ffmpeg-bucket/ffmpeg/ffmpeg-4.1-64bit.tar.gz
|
使用eb deploy发布,发布后登陆EC2查看是否生效。
yum源方式安装失败
网上也有文章提及了可以添加Nux Dextop YUM源的方式来进行安装, 这种方式可能适用于CentOS,但测试下来,并不适用于Amazon Linux,安装时会报错。
应该还需要安装其他的lib源才可以顺利安装。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libSDL-1.2.so.0()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libgnutls.so.28(GNUTLS_3_0_0)(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libtheoraenc.so.1()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libass.so.5()(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libv4l2.so.0()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libva.so.1()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libgsm.so.1()(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libcdio_cdda.so.1()(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libopenal.so.1()(64bit) 错误:软件包:ffmpeg-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libSDL-1.2.so.0()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libtheoradec.so.1(libtheoradec_1.0)(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libcdio_paranoia.so.1()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libgnutls.so.28(GNUTLS_1_4)(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libpulse.so.0()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libschroedinger-1.0.so.0()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libopenjpeg.so.1()(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libcdio_cdda.so.1(CDIO_CDDA_1)(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libtheoraenc.so.1(libtheoraenc_1.0)(64bit) 错误:软件包:libdc1394-2.2.0-4.el7.nux.x86_64 (nux-dextop) 需要:libraw1394.so.11()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libgnutls.so.28()(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libtheoradec.so.1()(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libpulse.so.0(PULSE_0)(64bit) 错误:软件包:ffmpeg-libs-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libopus.so.0()(64bit) 错误:软件包:libavdevice-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libcdio_paranoia.so.1(CDIO_PARANOIA_1)(64bit) 错误:软件包:ffmpeg-2.8.15-1.el7.nux.x86_64 (nux-dextop) 需要:libvdpau.so.1()(64bit) 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行:rpm -Va --nofiles --nodigest
|
Reference