Heroku上的ffmpeg:无法识别的选项’预设’
我在我的本地Rails应用程序中使用ffmpeg版本1.2.4来转换video文件。 当我在本地运行应用程序时,一切都按预期工作。 当我部署到heroku时,我为ffmpeg添加了一个buildpack:
https://github.com/shunjikonishi/heroku-buildpack-ffmpeg
这将安装ffmpeg版本git-2013-06-02-5711e4f。 当我尝试将video转码为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版本的差异造成的。 有没有人建议如何解决这个问题?
您正在尝试使用编码器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
)或video(-qscale:v
或-q:v
)但请注意libx264忽略-qscale
并且您应该使用默认设置或-crf
,如FFmpeg和x264编码指南中所示 。 -
无需添加
-g 30 -aspect 1.7777777777777777
。-g
的默认设置应该足够了,我不明白你为什么要强制看似任意的宽高比。 -
考虑使用
-vf scale=640:-1
而不是显式强制硬尺寸,因为这会改变纵横比并导致压扁或拉伸外观。-1
告诉ffmpeg在保留宽高比的同时自动计算值。 -
如果编译ffmpeg,则使用
-codec:a libfdk_aac
而不是libfaac
。 它将提供更高的每比特率质量。 有关详细信息,请参阅FFmpeg和AAC编码指南 。 -
我猜你正在制作video以便在网上展示。 如果是,则添加
-movflags +faststart
作为输出选项,以允许客户端在文件完全下载之前开始播放。 这只适用于真正的ffmpeg,而不是假垃圾。