Delayed :: Job ffmpeg在使用delayed_pa​​perclip处理大文件时挂起

时间:2016-09-10 22:21:53

标签: ruby-on-rails-4 ffmpeg paperclip delayed-job delayed-paperclip

我正在尝试使用delayed_job在后台处理大型视频和音频文件。一切都很有效。它遇到任何打嗝的唯一时间是上传较大的文件(〜> 200MB)

应用/模型/ userfile.rb

has_attached_file :userfile,
    path: ':dir_path/:style_:filename', 
    use_timestamp: false, styles: lambda { |a| UserfileStyles.get(a.instance)[:styles] }, 
    only_process: lambda { |a| UserfileStyles.get(a.instance)[:foreground] }, 
    source_file_options: { all: '-auto-orient' }
validates_attachment_content_type :userfile, content_type: /.*/ 
process_in_background :userfile, 
    url_with_processing: false, 
    only_process: lambda { |a| UserfileStyles.get(a.instance)[:background] } 

应用/模型/ userfile_styles.rb

module UserfileStyles 
    def self.get userfile 
        if userfile.video? 
            { 
                styles: { 
                    screenshot: ['300x300', :jpg], 
                    thumbnail: { 
                        gemoetry: '100x100#', 
                        format: :jpg, 
                        convert_options: '-thumbnail 100%' 
                    }, 
                    preview: { 
                        format: 'mp4', 
                        convert_options: { 
                            output: { ss: '0', t: '10' } 
                        }, 
                        processors: [:transcoder] 
                    }, 
                    mp4: { 
                        format: 'mp4', 
                        convert_options: { 
                            output: { 
                                vcodec: 'libx264', 
                                vb: '1000k', 
                                'profile:v': 'baseline', 
                                vf: 'scale=-2:480', 
                                acodec: 'aac', 
                                ab: '128k', 
                                preset: 'slow', 
                                threads: 0, 
                                movflags: 'faststart', 
                            } 
                        }, 
                        processors: [:transcoder] 
                    } 
                }, 
                foreground: [:screenshot, :thumbnail], 
                background: [:preview, :mp4] 
            }
        end 
    end 
end

示例(第一个文件正在从第二个文件转换,第三个文件正在从第四个文件转换):

v2@web1 ~/divshare-v2 $ ls -alh /tmp
-rw-------  1 v2   v2    70M Sep 10 00:01 2158940a8739e7219125179e0d1528c120160909-14061-8dqfx020160909-14061-egeyeq.mp4
-rw-------  1 v2   v2   515M Sep  9 23:57 2158940a8739e7219125179e0d1528c120160909-14061-8dqfx0.mp4
-rw-------  1 v2   v2   145M Sep  9 23:33 76ba144beb8a14b6cf542225ef885a7c20160909-12733-1ui03vo20160909-12733-y7ywn.mp4
-rw-------  1 v2   v2   604M Sep  9 23:27 76ba144beb8a14b6cf542225ef885a7c20160909-12733-1ui03vo.mp4

我尝试过上传几次和使用不同的文件。总是被同一点抓住。然而,当较小的视频(~100-200MB)时,一切都很完美。

这是正在运行的命令:

v2@web1 ~/divshare-v2 $ ps ux | grep ffmpeg
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
v2       14588 26.4  2.9 849840 240524 ?       Sl   Sep09  12:00 ffmpeg -i /tmp/2158940a8739e7219125179e0d1528c120160909-14061-8dqfx0.mp4 -acodec aac -strict experimental -vcodec libx264 -vb 1000k -profile:v baseline -vf scale=-2:480 -acodec aac -ab 128k -preset slow -threads 0 -movflags faststart -y /tmp/2158940a8739e7219125179e0d1528c120160909-14061-8dqfx020160909-14061-egeyeq.mp4

任何类型的帮助调试都会很棒。

注意:我复制了上面的命令并手动运行它,以便我可以看到来自ffmpeg的一些日志,并且运行完美。

0 个答案:

没有答案