1

我有一个在 heroku 中运行的 Rails 应用程序。

我想通过合并/混合(amerge 或 amix)过滤器将原始音频文件与另一个音频文件加水印。淡入淡出和循环也应该起作用。

必须编译 FFMPEG 才能在 heroku 上运行此功能。我从这个使用Vuclan的 GIST 得到的步骤

https://gist.github.com/liufengyun/5055354

在本地,我使用以下术语与作为上传器的Carrierwave进行转换:

"-i Original.aiff -i public/watermark/#{ENV['WATERMARK_FILENAME']}.aiff -loop 1 -filter_complex '[1]afade=t=in:ss=0:d=1[4];[4]afade=t=out:st=#{self.evaluate_length-2}:d=2[5];[5][0]amix=duration=shortest[out]' -map [out]"

这适用于我的 mac 上内置的 ffmpeg。

我为heroku 编译的版本确实包含amerge、amix 和libavformat 库。

这是我去上传表单并上传文件时从heroku获得的日志:(所有这些都有效,但仅限于本地)。

Started POST "/sounds" for 84.113.97.32 at 2013-07-15 21:14:33 +0000
2013-07-15T21:14:33.175631+00:00 app[web.1]: Running transcoding...
2013-07-15T21:14:33.175631+00:00 app[web.1]: ffmpeg -y -i /tmp/sounds/1373922873-2-5714/watermark_loop-95.aiff -i public/watermark/1khz.aiff -loop 1 -filter_complex '[1]afade=t=in:ss=0:d=1[4];[4]afade=t=out:st=-2.0:d=2[5];[5][0]amix=duration=shortest[out]' -map [out] /tmp/sounds/1373922873-2-5714/watermark_loop-95.aiff
2013-07-15T21:14:33.175631+00:00 app[web.1]:
2013-07-15T21:14:33.241221+00:00 app[web.1]: Failed encoding...
2013-07-15T21:14:33.241221+00:00 app[web.1]: ffmpeg -y -i /tmp/sounds/1373922873-2-5714/watermark_loop-95.aiff -i public/watermark/1khz.aiff -loop 1 -filter_complex '[1]afade=t=in:ss=0:d=1[4];[4]afade=t=out:st=-2.0:d=2[5];[5][0]amix=duration=shortest[out]' -map [out] /tmp/sounds/1373922873-2-5714/watermark_loop-95.aiff
2013-07-15T21:14:33.241221+00:00 app[web.1]:
2013-07-15T21:14:33.241221+00:00 app[web.1]: ffmpeg: error while loading shared libraries: libavformat.so.54: cannot open shared object file: No such file or directory
2013-07-15T21:14:33.241221+00:00 app[web.1]:
2013-07-15T21:14:33.241221+00:00 app[web.1]: Errors: encoded file is invalid.
2013-07-15T21:14:33.241221+00:00 app[web.1]:
2013-07-15T21:14:33.277487+00:00 app[web.1]:
2013-07-15T21:14:33.277487+00:00 app[web.1]: FFMPEG::Error (Failed encoding.Errors: encoded file is invalid. Full output: ffmpeg: error while loading shared libraries: libavformat.so.54: cannot open shared object file: No such file or directory
2013-07-15T21:14:33.277487+00:00 app[web.1]: ):
2013-07-15T21:14:33.277487+00:00 app[web.1]:   app/uploaders/sound_uploader.rb:39:in `watermarking'
2013-07-15T21:14:33.277487+00:00 app[web.1]:

这是我第 6 次尝试编译,让 ffmpeg 正确运行并在 heroku 上为我的声音添加水印。

请帮助我摆脱这个永无止境的故事。

4

1 回答 1

0

我忘记将所有子路径添加到 LD_LIBRARY_PATH

所以我改变了我的heroku变量

LD_LIBRARY_PATH: vendor/ffmpeg/lib:/usr/local/lib 

LD_LIBRARY_PATH: vendor/x264/lib:vendor/mp3lame/lib:vendor/ffmpeg/lib:/usr/local/lib

通过

 heroku config:set LD_LIBRARY_PATH=vendor/x264/lib:vendor/mp3lame/lib:vendor/ffmpeg/lib:/usr/local/lib

我在 HEROKU 上为 FFMPEG 的详细编译说明做了一个要点

https://gist.github.com/klangfeld/6009744

于 2013-07-16T22:03:22.833 回答