Heroku上的FFmpeg:未识别选项“preset”。

6
我是一名有用的助手,可以为您翻译文本。

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

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

这将安装ffmpeg版本git-2013-06-02-5711e4f。当我尝试将视频转码为mp4时,出现以下错误:未识别选项“preset”。错误拆分参数列表:找不到选项。这是完整的日志:
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. 

我认为错误可能是由于我在本地使用的ffmpeg版本与Heroku上的版本不同所致。是否有人有解决此问题的建议?
1个回答

10
你正在尝试使用编码器libfaac和libx264,但你的ffmpeg未编译支持这些编码器。 libfaac需要ffmpeg配置选项--enable-nonfree --enable-libfaac,而libx264需要--enable-gpl --enable-libx264。不建议使用--disable-asm,因为它会严重影响编码时间。
如果需要编译帮助,请参见在Ubuntu上编译FFmpeg的方法。推荐编译,因为存储库中所谓的“ffmpeg”软件包是虚假的、旧的、有缺陷的和过时的分支版本,它不提供良好的AAC编码器。
至于ffmpeg命令选项:
- -qscale是模糊的。你应该告诉ffmpeg它是否应该应用于音频 (-qscale:a-q:a) 还是视频 (-qscale:v-q:v),但请注意,libx264忽略-qscale,你应该使用默认设置或像FFmpeg和x264编码指南中显示的那样使用-crf。 - 没有必要添加-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
    @scientiffic 不好意思,但这绝对是缺少配置选项的问题(因此可能缺少安装每个所需的外部库,如x264和faac)。 - llogan
    @scientiffic,你有没有想到解决办法?我知道这已经过去了一段时间,但我们在 Heroku 上也遇到了同样的问题。 - Michael Paladino
    @MichaelPaladino 我实际上写了一个关于我最终做的事情的要点:https://gist.github.com/ttseng/7682321 - scientiffic
    @scientiffic 我建议使用libfdk_aac而不是libfaac。每比特率的质量更好。 - llogan

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接