FFMPEG在heroku上编译

时间:2013-07-15 21:32:51

标签: ruby-on-rails-3 heroku ffmpeg carrierwave

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

我想通过合并/混合(amerge或amix)过滤器将原始AUDIO文件与另一个AUDIO文件加水印。衰落和循环也应该有效。

必须编译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上为我的声音加水印。

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

1 个答案:

答案 0 :(得分: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