使用 ebextensions 配置在弹性 beantalk 上安装 ffmpeg

Posted

技术标签:

【中文标题】使用 ebextensions 配置在弹性 beantalk 上安装 ffmpeg【英文标题】:Install ffmpeg on elastic beanstalk using ebextensions config 【发布时间】:2014-06-13 23:32:20 【问题描述】:

我正在尝试在亚马逊服务器上的弹性 beanstalk 实例上安装最新版本的 ffmpeg。我已经创建了我的配置文件并添加了这些 container_commands:

    container_commands:
        01-ffmpeg:
            command: wget -O/usr/local/bin/ffmpeg http://ffmpeg.gusari.org/static/64bit/ffmpeg.static.64bit.2014-03-05.tar.gz
            leader_only: false
        02-ffmpeg:
            command: tar -xzf /usr/local/bin/ffmpeg
            leader_only: false
        03-ffmpeg:
            command: ln -s /usr/local/bin/ffmpeg /usr/bin/ffmpeg
            leader_only: false

命令 01 和 03 似乎可以正常工作,但 02 似乎无法正常工作,因此 ffmpeg 无法解压缩。任何想法可能是什么问题?

谢谢, 海伦

【问题讨论】:

欢迎任何在 eb 实例上成功安装最新版本的 ffmpeg 和 imagick 的人提供任何帮助,无论是否与上述完全不同。 【参考方案1】:

亚马逊的一位好心人帮助了我并将这个配置文件发送给我,希望其他人会发现它有用:

# .ebextensions/packages.config
packages:
  yum:
    ImageMagick: []
    ImageMagick-devel: []
commands:
  01-wget:
    command: "wget -O /tmp/ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz"
  02-mkdir:
    command: "if [ ! -d /opt/ffmpeg ] ; then mkdir -p /opt/ffmpeg; fi"
  03-tar:
    command: "tar xvf /tmp/ffmpeg.tar.xz -C /opt/ffmpeg"
  04-ln:
    command: "if [[ ! -f /usr/bin/ffmpeg ]] ; then ln -sf /opt/ffmpeg/ffmpeg-4.2.2-amd64-static/ffmpeg /usr/bin/ffmpeg; fi"
  05-ln:
    command: "if [[ ! -f /usr/bin/ffprobe ]] ; then ln -sf /opt/ffmpeg/ffmpeg-4.2.2-amd64-static/ffprobe /usr/bin/ffprobe; fi"
  06-pecl:
    command: "if [ `pecl list | grep imagick` ] ; then pecl install -f imagick; fi"

编辑: 上面的代码适用于我今天 2020-01-03,在 Elastic Beanstalk 环境中 Python 3.6 running on 64bit Amazon Linux/2.9.17。https://johnvansickle.com/ffmpeg/ 链接自官方 ffmpeg site。 (Gusari 以前的静态构建似乎不再可用。)

警告: 以上将始终在您部署时下载最新版本。您还依赖于 johnvansickle 的站点在线(部署),并且他的 URL 不会改变。两种替代方法是:

将 .tar.xz 文件下载到您自己的 CDN,并让您的部署从您自己的站点下载。 (这样一来,如果 John 的站点在您部署时出现停机,您不会受到影响。而且您不会对 ffmpeg 版本在您不知情的情况下发生变化感到惊讶。) 指定版本号,如https://johnvansickle.com/ffmpeg/old-releases/ffmpeg-4.2.2-amd64-static.tar.xz

【讨论】:

嗨,我在使用这个扩展安装 ffmpeg 时遇到了这个问题:任何帮助将不胜感激。 ` Yum 没有可用于安装的 commands-06-pecl。 EBExtension 中列出的软件包安装失败` 我能知道我们需要什么文件名和文件夹结构来写这些命令吗? 效果很好!只是小改动:command: "wget -O /tmp/ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-3.4.1-64bit-static.tar.xz" 使发布版本和目录名称对应。 你应该指定lib版本。 用官网代替johnvansickle那个人不是更好吗? ffmpeg.org/releases/ffmpeg-4.1.tar.gz【参考方案2】:

您可以使用来自ffmpeg gusari 的静态构建和sources 语法自动将二进制文件从静态构建tar 下载并解压缩到/usr/local/bin。这是一个对我有用的非常简单的示例:

sources:
    /usr/local/bin: https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz

【讨论】:

简单得多。谢谢! 我们一起懒惰! 好主意。不过,有一些注意事项。不幸的是,这种链接不是官方的,并且可能会过时。现在这个链接已经失效了。另一个问题是安全性,当没有官方支持时。请注意,官方 FFMPEG 网站确实提供了static builds,尽管来自第三方。问题是压缩格式是xz。 EB 仅接受 ZIP 和 TAR (gz)。 @SizzlingCode ffprobe 应该包含在静态构建中。 @vinay 谢谢!这样可行。顺便说一句,我现在决定自己编译,所以我可以获得 AAC 支持。【参考方案3】:

将以下内容添加到您的.ebextensions/packages.config

packages:
  yum:
    ImageMagick: []

sources:
  /usr/local/bin: http://ffmpeg.org/releases/ffmpeg-4.1.tar.gz

【讨论】:

【参考方案4】:

第一个命令“01-wget ...”中没有指定版本,但是在链接文件时指定了版本。自从发布此版本以来,该版本已从“ffmpeg-3.3.1-64bit-static”更改为“ffmpeg-3.3.3-64bit-static”,有两种解决方案可以解决此问题:

    指定 wget 的版本

    解压时剥离包含目录。

    03-焦油: 命令:“tar xvf /tmp/ffmpeg.tar.xz -C /opt/ffmpeg --strip 1”

这是完整的脚本:

packages:
  yum:
    ImageMagick: []
    ImageMagick-devel: []
commands:
  01-wget:
    command: "wget -O /tmp/ffmpeg.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz"
  02-mkdir:
    command: "if [ ! -d /opt/ffmpeg ] ; then mkdir -p /opt/ffmpeg; fi"
  03-tar:
    command: "tar xvf /tmp/ffmpeg.tar.xz -C /opt/ffmpeg --strip 1"
  04-ln:
    command: "if [[ ! -f /usr/bin/ffmpeg ]] ; then ln -s /opt/ffmpeg/ffmpeg /usr/bin/ffmpeg; fi"
  05-ln:
    command: "if [[ ! -f /usr/bin/ffprobe ]] ; then ln -s /opt/ffmpeg/ffprobe /usr/bin/ffprobe; fi"
  06-pecl:
    command: "if [ `pecl list | grep imagick` ] ; then pecl install -f imagick; fi"

【讨论】:

【参考方案5】:

检查 cloud-init 日志中的消息。在 Linux 实例上,这将是:

grep "03-ffmpeg" /var/log/eb-cfn-init.log

另外,您可以登录到另一个文件,以便更容易找到错误:

command: ln -s /usr/local/bin/ffmpeg /usr/bin/ffmpeg >> /var/log/my-init.log

【讨论】:

谢谢你,肯定有助于调试,但不幸的是仍然无法弄清楚。【参考方案6】:

未经测试,但不应该这样做

tar xzf /usr/local/bin/ffmpeg

没有减号?

【讨论】:

不幸的是,这似乎没有什么不同。不过感谢您的回复。

以上是关于使用 ebextensions 配置在弹性 beantalk 上安装 ffmpeg的主要内容,如果未能解决你的问题,请参考以下文章

我应该在配置文件 (.ebextensions) 或保存的配置下放置弹性 beanstalk 选项吗?

单独的环境配置弹性beantalk

AWS 弹性豆茎。仅在新实例上或手动执行 .ebextensions 命令

尝试通过弹性 beantalk 运行救援时忽略 .ebextensions 文件

如何在 .ebextensions 文件夹中为弹性 beantalk 运行命令行命令?

如何通过 ebextensions 配置文件添加 nginx 缓存控制标头?