【问题标题】:ffmpeg on Heroku: unrecognized option 'preset'Heroku 上的 ffmpeg:无法识别的选项“预设”
【发布时间】:2013-11-18 05:06:38
【问题描述】:

我在本地 Rails 应用程序中使用 ffmpeg 版本 1.2.4 来转换视频文件。当我在本地运行应用程序时,一切都按预期工作。当我部署到 heroku 时,我为 ffmpeg 添加了一个 buildpack:

https://github.com/shunjikonishi/heroku-buildpack-ffmpeg

这将安装 ffmpeg 版本 git-2013-06-02-5711e4f。当我尝试将视频转码为 mp4 时,出现以下错误:

无法识别的选项“预设”。拆分参数列表时出错:找不到选项

这是完整的日志:

2013-11-17T19:45:05.255059+00:00 app[web.1]: Running transcoding...
2013-11-17T19:45:05.255059+00:00 app[web.1]: ffmpeg -y -i /app/public/uploads/tmp/1384717504-2-9158/Untitled.mov -vcodec libx264 -acodec libfaac -s 640x360  -qscale 0 -preset slow -g 30 -aspect 1.7777777777777777 /app/public/uploads/tmp/1384717504-2-9158/tmpfile.mp4
2013-11-17T19:45:05.255059+00:00 app[web.1]: 
2013-11-17T19:45:05.317895+00:00 app[web.1]: Failed encoding...
2013-11-17T19:45:05.317895+00:00 app[web.1]: ffmpeg -y -i /app/public/uploads/tmp/1384717504-2-9158/Untitled.mov -vcodec libx264 -acodec libfaac -s 640x360  -qscale 0 -preset slow -g 30 -aspect 1.7777777777777777 /app/public/uploads/tmp/1384717504-2-9158/tmpfile.mp4
2013-11-17T19:45:05.317895+00:00 app[web.1]: 
2013-11-17T19:45:05.317895+00:00 app[web.1]: ffmpeg version git-2013-06-02-5711e4f Copyright (c) 2000-2013 the FFmpeg developers
2013-11-17T19:45:05.317895+00:00 app[web.1]:   built on Jun  2 2013 07:38:40 with gcc 4.4.3 (Ubuntu 4.4.3-4ubuntu5.1)
2013-11-17T19:45:05.317895+00:00 app[web.1]:   configuration: --enable-shared --disable-asm --prefix=/app/vendor/ffmpeg
2013-11-17T19:45:05.317895+00:00 app[web.1]:   libavutil      52. 34.100 / 52. 34.100
2013-11-17T19:45:05.317895+00:00 app[web.1]:   libavcodec     55. 13.100 / 55. 13.100
2013-11-17T19:45:05.317895+00:00 app[web.1]:   libavformat    55.  8.102 / 55.  8.102
2013-11-17T19:45:05.317895+00:00 app[web.1]:   libavdevice    55.  2.100 / 55.  2.100
2013-11-17T19:45:05.318137+00:00 app[web.1]:   libavfilter     3. 74.101 /  3. 74.101
2013-11-17T19:45:05.318137+00:00 app[web.1]:   libswscale      2.  3.100 /  2.  3.100
2013-11-17T19:45:05.318137+00:00 app[web.1]:   libswresample   0. 17.102 /  0. 17.102
2013-11-17T19:45:05.318137+00:00 app[web.1]: Unrecognized option 'preset'.
2013-11-17T19:45:05.318137+00:00 app[web.1]: Error splitting the argument list: Option not found
2013-11-17T19:45:05.318137+00:00 app[web.1]: 
2013-11-17T19:45:05.318137+00:00 app[web.1]: Errors: no output file created. 

我认为该错误可能是由于我在本地和 Heroku 上使用的 ffmpeg 版本不同造成的。有人对如何解决此问题有建议吗?

【问题讨论】:

    标签: ruby-on-rails video heroku ffmpeg


    【解决方案1】:

    您正在尝试使用编码器 libfaac 和 libx264,但您的 ffmpeg 未编译为支持这些编码器。 libfaac 需要 ffmpeg 配置选项 --enable-nonfree --enable-libfaac 和 libx264 需要 --enable-gpl --enable-libx264。不推荐使用--disable-asm,这会显着影响编码时间。

    如果您需要编译帮助,请参阅How to Compile FFmpeg on Ubuntu。建议编译,因为存储库中所谓的“ffmpeg”包是假的、旧的、有缺陷的和过时的version from a fork,并且它不提供良好的 AAC 编码器。

    至于 ffmpeg 命令选项:

    • -qscale 不明确。您应该告诉 ffmpeg 它是否应该应用于音频(-qscale:a-q:a)或视频(-qscale:v-q:v),但请注意 libx264 忽略 -qscale 并且您应该使用默认设置或 @987654335 @如FFmpeg and x264 Encoding Guide所示。

    • 无需添加-g 30 -aspect 1.7777777777777777-g 的默认设置就足够了,我不明白您为什么要强制使用看似任意的纵横比。

    • 考虑使用-vf scale=640:-1 而不是明确强制使用硬尺寸,因为这会改变纵横比并导致外观被挤压或拉伸。 -1 告诉 ffmpeg 在保持纵横比的同时自动计算值。

    • 如果你编译 ffmpeg,那么使用-codec:a libfdk_aac 而不是libfaac。它将提供更好的每比特率质量。请参阅FFmpeg and AAC Encoding Guide 了解更多信息。

    • 我猜您正在制作用于在网络上显示的视频。如果是,则添加-movflags +faststart 作为输出选项,以允许客户端在文件完全下载之前开始播放。这仅适用于真正的 ffmpeg,而不适用于假垃圾。

    【讨论】:

    • 非常感谢您的帮助!我实际上正在使用carrierwave-video gem,这就是生成ffmpeg编码选项的原因。我不确定在使用 heroku buildpack 时如何为 ffmpeg 指定选项;你有关于如何在 heroku 上安装 ffmpeg 的指示吗?
    • @scientiffic 不,抱歉,但这肯定是缺少配置选项的问题(因此可能缺少安装每个必需的外部库,例如 x264 和 faac)。
    • @scientiffic 你有没有想过解决这个问题?我知道这已经有一段时间了,但我们在 Heroku 上看到了同样的问题。
    • @MichaelPaladino 实际上我写了一个关于我最终做了什么的要点:gist.github.com/ttseng/7682321
    • @scientiffic 我建议使用 libfdk_aac 而不是 libfaac。每比特率的质量更好。
    猜你喜欢
    • 1970-01-01
    • 2017-11-19
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多