Recherche avancée

Médias (91)

Autres articles (67)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Emballe médias : à quoi cela sert ?

    4 février 2011, par

    Ce plugin vise à gérer des sites de mise en ligne de documents de tous types.
    Il crée des "médias", à savoir : un "média" est un article au sens SPIP créé automatiquement lors du téléversement d’un document qu’il soit audio, vidéo, image ou textuel ; un seul document ne peut être lié à un article dit "média" ;

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

Sur d’autres sites (8502)

  • Exit Status with ffmpeg Command in Rails

    25 novembre 2012, par DragonFire353

    I am trying to get uploaded videos to be converted in the background, running windows. I am using :

    gem 'paperclip'
    gem 'aasm'
    gem 'delayed_job_active_record'
    gem 'ffmpeg'

    I was using purely paperclip before and making the user wait and it worked great, now I am having problems with the return of the error status for the command, I have tried editing to possible fix the command wondering if it was failing in the first place but I keep getting :

    undefined method `exitstatus' for nil:NilClass

    no matter what. I've tried looking this up and it's supposedly valid syntax that should work... Also I've commented out the actual spawn do part because I get another error if I leave that in :

    wrong number of arguments

    Does anyone know how to properly get this working ? I've went through a few tutorials that have bits and pieces of what I need but I can't get them working together. Here's what I have so far, lemme know if you need more :

    Model :

       class Video < ActiveRecord::Base
     include AASM

     belongs_to :user
     has_many :comments, dependent: :destroy
     attr_accessible :video, :user_id, :video_file_name, :title, :public, :description, :views

     has_attached_file :video, url: "/users/:user_id/videos/:id/:basename_:style.:extension"
     #, :styles => {
        # :video => { geometry: "800x480>", format: 'webm' },
        # :thumb => { geometry: "200x200>", format: 'png', time: 3 },
      # }, processors: [:ffmpeg], url: "/users/:user_id/videos/:id/:basename_:style.:extension"

     #process_in_background :video #causes death

     validates :video, presence: true
     validates :description, presence: true, length: { minimum: 5, maximum: 100}
     validates :title, presence: true, length: { minimum: 1, maximum: 15 }

     validates_attachment_size :video, less_than: 1.gigabytes
     validates_attachment :video, presence: true

     default_scope order: 'created_at DESC'

     Paperclip.interpolates :user_id do |attachment, style|attachment.instance.user_id
     end

     #acts as state machine plugin
     aasm state: :pending do
      state :pending, initial: true
      state :converting
      state :converted
      #, enter: :set_new_filename
      state :error

       event :convert do
        transitions from: :pending, to: :converting
      end

       event :converted do
        transitions from: :converting, to: :converted
      end

       event :failure do
         transitions from: :converting, to: :error
       end
     end

      # This method is called from the controller and takes care of the converting
     def convert
       self.convert!

       #spawn a new thread to handle conversion
       #spawn do
         success = delay.system(convert_command)
         logger.debug 'Converting File: ' + success.to_s
         if success && $?.exitstatus.to_i == 0
           self.converted!
         else
           self.failure!
         end
       #end
     end

     def self.search(search)
       if search
         find(:all, conditions: ["public = 't' AND title LIKE ?", "%#{search}%"], order: "created_at DESC")
       else
         find(:all, conditions: ["public = 't'"], order: "created_at DESC")
       end
     end

     def self.admin_search(search)
       if search
         find(:all, conditions: ['title LIKE ?', "%#{search}%"], order: "created_at DESC")
       else
         find(:all, order: "created_at DESC")
       end
     end

     private
       def convert_command
         #construct new file extension
         webm =  "." + id.to_s + ".webm"

         #build the command to execute ffmpeg
         command = <<-end_command
           ffmpeg -i #{ RAILS_ROOT + '/public/users/:user_id/videos/:id/:basename_:style.:extension' }  -ar 22050 -ab 32 -s 1280x720 -vcodec webm -r 25 -qscale 8 -f webm -y #{ RAILS_ROOT + '/public/users/:user_id/videos/:id/:basename_.webm' }

         end_command

         logger.debug "Converting video...command: " + command
         command
       end

       handle_asynchronously :convert_command

       # This updates the stored filename with the new flash video file
       def set_new_filename
         #update_attribute(:filename, "#{filename}.#{id}.webm")
         update_attribute(:content_type, "video/x-webm")
       end

    end

    Controller :

    class VideosController < ApplicationController
    before_filter :signed_in_user, only: [:upload, :update, :destroy]
    before_filter :admin_user, only: :admin_index

    def upload
       @video = Video.new
       # generate a unique id for the upload
       @uuid = (0..29).to_a.map {|x| rand(10)}
    end

    def create
       @video = Video.new(params[:video])
       @video.user_id = current_user.id

       if @video.save
           @video.convert
           flash[:success] = "Uploaded Succefully!"
           redirect_to @video.user
       else
           render 'upload'
       end
    end

    def show
       @video = Video.find(params[:id])
       @comments = @video.comments.paginate(page: params[:page], per_page: 6)
       if !@video.public
           if !signed_in? || current_user.id != @video.user_id  && !current_user.admin && !current_user.approved?(@video.user)
           flash[:notice] = "Video is private"
           redirect_to root_path
       end
    end
    end

    def update
       @video = Video.find(params[:id])
       if @video.update_attributes(params[:video])
     flash[:success] = "Video preferences saved"
    else
       flash[:fail] = "Failed to update video preferences"
    end
    redirect_to :back
    end

    def destroy
       @video = Video.find(params[:id])
       @video.destroy
       flash[:deleted] = "Deleted Succefully!"
       redirect_to :back
    end

    def index
       @videos = Video.paginate(page: params[:page], per_page: 6).search(params[:search])
    end

    def admin_index
       @videos = Video.paginate(page: params[:page], per_page: 6).admin_search(params[:search])
    end

    def ajax_video_comments
       @video = Video.find(params[:id])
       @comments = @video.comments.paginate(page: params[:page], per_page: 6)

       respond_to do |format|
       format.js   { render partial: 'shared/comments', content_type: 'text/html' }
    end
    end

    def ajax_video_watched
       @video = Video.find(params[:id])
       @video.views += 1
       @video.save
    end

    private

    def signed_in_user
       redirect_to root_path, notice: "Please Login." unless signed_in?
    end

    def admin_user
       redirect_to(root_path) unless current_user.admin?
    end

    end
  • ffmpeg error when using non root user

    29 août 2014, par mkern

    I have installed ffmpeg and it works perfect if you are root or using sudo but it errors out when trying to use it as a non-root user. I have performed the same install on a test VPS and it installs without issue so it appears to be isolated to this cPanel server. I haven’t been able to identify why.

    Non-Root :

    > ffmpeg -v debug -i 1.mov 1.avi ffmpeg version N-65949-g0ddb051
    > Copyright (c) 2000-2014 the FFmpeg developers   built on Aug 28 2014
    > 11:39:47 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)  
    > configuration: --enable-gpl --enable-libmp3lame --enable-libvorbis
    > --enable-libvpx --enable-libx264   libavutil      54.  7.100 / 54.  7.100   libavcodec     56.  0.101 / 56.  0.101   libavformat    56.  3.100 / 56.  3.100   libavdevice    56.  0.100 / 56.  0.100   libavfilter     5.  0.103 /  5.  0.103   libswscale      3.  0.100 /
    > 3.  0.100   libswresample   1.  1.100 /  1.  1.100   libpostproc    53.  0.100 / 53.  0.100 Splitting the commandline. Reading option '-v' ... matched as option 'v' (set logging level) with argument 'debug'.
    > Reading option '-i' ... matched as input file with argument '1.mov'.
    > Reading option '1.avi' ... matched as output file. Finished splitting
    > the commandline. Parsing a group of options: global . Applying option
    > v (set logging level) with argument debug. Successfully parsed a group
    > of options. Parsing a group of options: input file 1.mov. Successfully
    > parsed a group of options. Opening an input file: 1.mov.
    > [mov,mp4,m4a,3gp,3g2,mj2 @ 0x348fc20] Format mov,mp4,m4a,3gp,3g2,mj2
    > probed with size=2048 and score=100 [mov,mp4,m4a,3gp,3g2,mj2 @
    > 0x348fc20] ISO: File Type Major Brand: qt   [mov,mp4,m4a,3gp,3g2,mj2 @
    > 0x348fc20] Before avformat_find_stream_info() pos: 698348 bytes
    > read:39602 seeks:1 [mov,mp4,m4a,3gp,3g2,mj2 @ 0x348fc20] All info
    > found [mov,mp4,m4a,3gp,3g2,mj2 @ 0x348fc20] After
    > avformat_find_stream_info() pos: 169190 bytes read:2333362 seeks:67
    > frames:148 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mov':  
    > Metadata:
    >     major_brand     : qt  
    >     minor_version   : 0
    >     compatible_brands: qt  
    >     creation_time   : 2014-06-05 04:40:27
    >     model           : iPhone 5
    >     model-eng       : iPhone 5
    >     encoder         : 7.1.1
    >     encoder-eng     : 7.1.1
    >     date            : 2014-06-04T21:40:27-0700
    >     date-eng        : 2014-06-04T21:40:27-0700
    >     make            : Apple
    >     make-eng        : Apple   Duration: 00:00:07.15, start: 0.000023, bitrate: 781 kb/s
    >     Stream #0:0(und), 41, 1/600: Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 480x360, 1/1200, 710 kb/s, 29.09
    > fps, 600 tbr, 600 tbn, 1200 tbc (default)
    >     Metadata:
    >       rotate          : 90
    >       creation_time   : 2014-06-05 04:40:27
    >       handler_name    : Core Media Data Handler
    >       encoder         : H.264
    >     Side data:
    >       displaymatrix: rotation of -90.00 degrees
    >     Stream #0:1(und), 107, 1/44100: Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default)
    >     Metadata:
    >       creation_time   : 2014-06-05 04:40:27
    >       handler_name    : Core Media Data Handler Successfully opened the file. Parsing a group of options: output file 1.avi. Successfully
    > parsed a group of options. Opening an output file: 1.avi. Successfully
    > opened the file. detected 24 logical cores [graph 0 input from stream
    > 0:0 @ 0x34aa3a0] Setting 'video_size' to value '480x360' [graph 0
    > input from stream 0:0 @ 0x34aa3a0] Setting 'pix_fmt' to value '0'
    > [graph 0 input from stream 0:0 @ 0x34aa3a0] Setting 'time_base' to
    > value '1/600' [graph 0 input from stream 0:0 @ 0x34aa3a0] Setting
    > 'pixel_aspect' to value '0/1' [graph 0 input from stream 0:0 @
    > 0x34aa3a0] Setting 'sws_param' to value 'flags=2' [graph 0 input from
    > stream 0:0 @ 0x34aa3a0] Setting 'frame_rate' to value '320/11' [graph
    > 0 input from stream 0:0 @ 0x34aa3a0] w:480 h:360 pixfmt:yuv420p
    > tb:1/600 fr:320/11 sar:0/1 sws_param:flags=2 [format @ 0x3496b00]
    > compat: called with args=[yuv420p] [format @ 0x3496b00] Setting
    > 'pix_fmts' to value 'yuv420p' [AVFilterGraph @ 0x348f320]
    > query_formats: 4 queried, 3 merged, 0 already done, 0 delayed
    > [AVFilterGraph @ 0x34bbe60] Error initializing threading.
    > [AVFilterGraph @ 0x34bbe60] Error creating filter 'anull' Error
    > opening filters! [AVIOContext @ 0x34967c0] Statistics: 0 seeks, 0
    > writeouts [AVIOContext @ 0x348f1e0] Statistics: 2333362 bytes read, 67
    > seeks

    [AVFilterGraph @ 0x34bbe60] Error initializing threading.
    [AVFilterGraph @ 0x34bbe60] Error creating filter ’anull’ Error
    opening filters !

    As ROOT :

    ffmpeg -v verbose -i 1.mov 1.avi
    ffmpeg version N-65949-g0ddb051 Copyright (c) 2000-2014 the FFmpeg developers
     built on Aug 28 2014 11:39:47 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
     configuration: --enable-gpl --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
     libavutil      54.  7.100 / 54.  7.100
     libavcodec     56.  0.101 / 56.  0.101
     libavformat    56.  3.100 / 56.  3.100
     libavdevice    56.  0.100 / 56.  0.100
     libavfilter     5.  0.103 /  5.  0.103
     libswscale      3.  0.100 /  3.  0.100
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  0.100 / 53.  0.100
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mov':
     Metadata:
       major_brand     : qt  
       minor_version   : 0
       compatible_brands: qt  
       creation_time   : 2014-06-05 04:40:27
       model           : iPhone 5
       model-eng       : iPhone 5
       encoder         : 7.1.1
       encoder-eng     : 7.1.1
       date            : 2014-06-04T21:40:27-0700
       date-eng        : 2014-06-04T21:40:27-0700
       make            : Apple
       make-eng        : Apple
     Duration: 00:00:07.15, start: 0.000023, bitrate: 781 kb/s
       Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 480x360, 710 kb/s, 29.09 fps, 600 tbr, 600 tbn, 1200 tbc (default)
       Metadata:
         rotate          : 90
         creation_time   : 2014-06-05 04:40:27
         handler_name    : Core Media Data Handler
         encoder         : H.264
       Side data:
         displaymatrix: rotation of -90.00 degrees
       Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default)
       Metadata:
         creation_time   : 2014-06-05 04:40:27
         handler_name    : Core Media Data Handler
    [graph 0 input from stream 0:0 @ 0x27ed3a0] w:480 h:360 pixfmt:yuv420p tb:1/600 fr:320/11 sar:0/1 sws_param:flags=2
    [graph 1 input from stream 0:1 @ 0x2800700] tb:1/44100 samplefmt:fltp samplerate:44100 chlayout:0x4
    Output #0, avi, to '1.avi':
     Metadata:
       major_brand     : qt  
       minor_version   : 0
       compatible_brands: qt  
       make-eng        : Apple
       model           : iPhone 5
       model-eng       : iPhone 5
       make            : Apple
       ISFT            : Lavf56.3.100
       ICRD            : 2014-06-04T21:40:27-0700
       date-eng        : 2014-06-04T21:40:27-0700
       Stream #0:0(und): Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 480x360, q=2-31, 200 kb/s, 29.09 fps, 29.09 tbn, 29.09 tbc (default)
       Metadata:
         rotate          : 90
         creation_time   : 2014-06-05 04:40:27
         handler_name    : Core Media Data Handler
         encoder         : Lavc56.0.101 mpeg4
       Stream #0:1(und): Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp (default)
       Metadata:
         creation_time   : 2014-06-05 04:40:27
         handler_name    : Core Media Data Handler
         encoder         : Lavc56.0.101 libmp3lame
    Stream mapping:
     Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (native))
     Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
    Press [q] to stop, [?] for help
    *** dropping frame 79 from stream 0 at ts 80
    *** dropping frame 113 from stream 0 at ts 114
    *** dropping frame 145 from stream 0 at ts 146
    *** dropping frame 177 from stream 0 at ts 178
    No more output streams to write to, finishing.
    frame=  204 fps=0.0 q=27.2 Lsize=     348kB time=00:00:07.15 bitrate= 398.4kbits/s dup=0 drop=4    
    video:271kB audio:56kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 6.560985%
    Input file #0 (1.mov):
     Input stream #0:0 (video): 208 packets read (634624 bytes); 208 frames decoded;
     Input stream #0:1 (audio): 308 packets read (56854 bytes); 308 frames decoded (315392 samples);
     Total: 516 packets (691478 bytes) demuxed
    Output file #0 (1.avi):
     Output stream #0:0 (video): 204 frames encoded; 204 packets muxed (276993 bytes);
     Output stream #0:1 (audio): 274 frames encoded (315392 samples); 275 packets muxed (57469 bytes);
     Total: 479 packets (334462 bytes) muxed

    strace and strace -e outputs :
    strace non root :

    579 clone(child_stack=0x7fd3bfd07ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fd3bfd089d0, tls=0x7fd3bfd08700, child_tidptr=0x7fd3bfd089d0) = 3        2637
       580 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7fd3bed07000
       581 mprotect(0x7fd3bed07000, 4096, PROT_NONE) = 0
       582 clone(child_stack=0x7fd3bf506ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7fd3bf5079d0, tls=0x7fd3bf507700, child_tidptr=0x7fd3bf5079d0) = -        1 EAGAIN (Resource temporarily unavailable)
       583 futex(0x253b420, FUTEX_WAKE_PRIVATE, 1) = 1
       584 futex(0x253b3f4, FUTEX_CMP_REQUEUE_PRIVATE, 1, 2147483647, 0x253b420, 4) = 2
       585 futex(0x253b420, FUTEX_WAKE_PRIVATE, 1) = 1
       586 futex(0x7fd3c2d0e9d0, FUTEX_WAIT, 32631, NULL) = 0
       587 munmap(0x7fd3bed07000, 8392704)         = 0
       588 munmap(0x7fd3c250e000, 8392704)         = 0
       589 munmap(0x7fd3c1d0d000, 8392704)         = 0
       590 munmap(0x7fd3c150c000, 8392704)         = 0
       591 write(2, "\33[1;32m[AVFilterGraph @ 0x253b0a"..., 39[AVFilterGraph @ 0x253b0a0] ) = 39
       592 write(2, "\33[1;31mError initializing thread"..., 41Error initializing threading.
       593 ) = 41
       594 write(2, "\33[1;32m[AVFilterGraph @ 0x253b0a"..., 39[AVFilterGraph @ 0x253b0a0] ) = 39
       595 write(2, "\33[1;31mError creating filter 'an"..., 41Error creating filter 'anull'
       596 ) = 41
       597 write(2, "\33[4;31mError opening filters!\n\33["..., 34Error opening filters!
       598 ) = 34

    strace -e non root :

    strace -e open ffmpeg -i 1.mov 5.avi
    open("/etc/ld.so.cache", O_RDONLY)      = 3
    open("/lib64/libasound.so.2", O_RDONLY) = 3
    open("/usr/lib64/libSDL-1.2.so.0", O_RDONLY) = 3
    open("/lib64/libpthread.so.0", O_RDONLY) = 3
    open("/usr/lib64/libx264.so.142", O_RDONLY) = 3
    open("/usr/lib64/libvpx.so.0", O_RDONLY) = 3
    open("/usr/local/lib/libvorbisenc.so.2", O_RDONLY) = 3
    open("/usr/local/lib/libvorbis.so.0", O_RDONLY) = 3
    open("/usr/local/lib/libmp3lame.so.0", O_RDONLY) = 3
    open("/lib64/libm.so.6", O_RDONLY)      = 3
    open("/lib64/libbz2.so.1", O_RDONLY)    = 3
    open("/usr/local/lib/libz.so.1", O_RDONLY) = 3
    open("/lib64/librt.so.1", O_RDONLY)     = 3
    open("/lib64/libc.so.6", O_RDONLY)      = 3
    open("/lib64/libdl.so.2", O_RDONLY)     = 3
    open("/usr/local/lib/libogg.so.0", O_RDONLY) = 3
    ffmpeg version N-65949-g0ddb051 Copyright (c) 2000-2014 the FFmpeg developers
     built on Aug 28 2014 11:39:47 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
     configuration: --enable-gpl --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
     libavutil      54.  7.100 / 54.  7.100
     libavcodec     56.  0.101 / 56.  0.101
     libavformat    56.  3.100 / 56.  3.100
     libavdevice    56.  0.100 / 56.  0.100
     libavfilter     5.  0.103 /  5.  0.103
     libswscale      3.  0.100 /  3.  0.100
     libswresample   1.  1.100 /  1.  1.100
     libpostproc    53.  0.100 / 53.  0.100
    open("1.mov", O_RDONLY|O_CLOEXEC)       = 3
    open("/etc/localtime", O_RDONLY)        = 4
    open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 4
    Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mov':
     Metadata:
       major_brand     : qt  
       minor_version   : 0
       compatible_brands: qt  
       creation_time   : 2014-06-05 04:40:27
       model           : iPhone 5
       model-eng       : iPhone 5
       encoder         : 7.1.1
       encoder-eng     : 7.1.1
       date            : 2014-06-04T21:40:27-0700
       date-eng        : 2014-06-04T21:40:27-0700
       make            : Apple
       make-eng        : Apple
     Duration: 00:00:07.15, start: 0.000023, bitrate: 781 kb/s
       Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 480x360, 710 kb/s, 29.09 fps, 600 tbr, 600 tbn, 1200 tbc (default)
       Metadata:
         rotate          : 90
         creation_time   : 2014-06-05 04:40:27
         handler_name    : Core Media Data Handler
         encoder         : H.264
       Side data:
         displaymatrix: rotation of -90.00 degrees
       Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default)
       Metadata:
         creation_time   : 2014-06-05 04:40:27
         handler_name    : Core Media Data Handler
    open("5.avi", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = 4
    [AVFilterGraph @ 0x26ff4a0] Error initializing threading.
    [AVFilterGraph @ 0x26ff4a0] Error creating filter 'anull'
    Error opening filters!

    strace root :

    579 clone(child_stack=0x7f4eb7c34ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb7c359d0, tls=0x7f4eb7c35700, child_tidptr=0x7f4eb7c359d0) = 3        383
       580 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb6c34000
       581 mprotect(0x7f4eb6c34000, 4096, PROT_NONE) = 0
       582 clone(child_stack=0x7f4eb7433ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb74349d0, tls=0x7f4eb7434700, child_tidptr=0x7f4eb74349d0) = 3        384
       583 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb6433000
       584 mprotect(0x7f4eb6433000, 4096, PROT_NONE) = 0
       585 clone(child_stack=0x7f4eb6c32ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb6c339d0, tls=0x7f4eb6c33700, child_tidptr=0x7f4eb6c339d0) = 3        385
       586 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb5c32000
       587 mprotect(0x7f4eb5c32000, 4096, PROT_NONE) = 0
       588 clone(child_stack=0x7f4eb6431ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb64329d0, tls=0x7f4eb6432700, child_tidptr=0x7f4eb64329d0) = 3        386
       589 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb5431000
       590 mprotect(0x7f4eb5431000, 4096, PROT_NONE) = 0
       591 clone(child_stack=0x7f4eb5c30ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb5c319d0, tls=0x7f4eb5c31700, child_tidptr=0x7f4eb5c319d0) = 3        387
       592 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb4c30000
       593 mprotect(0x7f4eb4c30000, 4096, PROT_NONE) = 0
       594 clone(child_stack=0x7f4eb542fff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb54309d0, tls=0x7f4eb5430700, child_tidptr=0x7f4eb54309d0) = 3        388
       595 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb442f000
       596 mprotect(0x7f4eb442f000, 4096, PROT_NONE) = 0
       597 clone(child_stack=0x7f4eb4c2eff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|        CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f4eb4c2f9d0, tls=0x7f4eb4c2f700, child_tidptr=0x7f4eb4c2f9d0) = 3        389
       598 mmap(NULL, 8392704, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f4eb3c2e000

    strace -e root :

       strace -e open ffmpeg -i 1.mov 5.avi
       open("/etc/ld.so.cache", O_RDONLY)      = 3
       open("/lib64/libasound.so.2", O_RDONLY) = 3
       open("/usr/lib64/libSDL-1.2.so.0", O_RDONLY) = 3
       open("/lib64/libpthread.so.0", O_RDONLY) = 3
       open("/usr/lib64/libx264.so.142", O_RDONLY) = 3
       open("/usr/lib64/libvpx.so.0", O_RDONLY) = 3
       open("/usr/local/lib/libvorbisenc.so.2", O_RDONLY) = 3
       open("/usr/local/lib/libvorbis.so.0", O_RDONLY) = 3
       open("/usr/local/lib/libmp3lame.so.0", O_RDONLY) = 3
       open("/lib64/libm.so.6", O_RDONLY)      = 3
       open("/lib64/libbz2.so.1", O_RDONLY)    = 3
       open("/usr/local/lib/libz.so.1", O_RDONLY) = 3
       open("/lib64/librt.so.1", O_RDONLY)     = 3
       open("/lib64/libc.so.6", O_RDONLY)      = 3
       open("/lib64/libdl.so.2", O_RDONLY)     = 3
       open("/usr/local/lib/libogg.so.0", O_RDONLY) = 3
       ffmpeg version N-65957-gc6a3b00 Copyright (c) 2000-2014 the FFmpeg developers
         built on Aug 28 2014 13:37:32 with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
         configuration: --enable-gpl --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264 --prefix=/usr --libdir=/usr/lib64 --enable-gpl --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libx264
         libavutil      54.  7.100 / 54.  7.100
         libavcodec     56.  0.101 / 56.  0.101
         libavformat    56.  3.100 / 56.  3.100
         libavdevice    56.  0.100 / 56.  0.100
         libavfilter     5.  0.103 /  5.  0.103
         libswscale      3.  0.100 /  3.  0.100
         libswresample   1.  1.100 /  1.  1.100
         libpostproc    53.  0.100 / 53.  0.100
       open("1.mov", O_RDONLY|O_CLOEXEC)       = 3
       open("/etc/localtime", O_RDONLY)        = 4
       open("/proc/meminfo", O_RDONLY|O_CLOEXEC) = 4
       Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mov':
         Metadata:
           major_brand     : qt  
           minor_version   : 0
           compatible_brands: qt  
           creation_time   : 2014-06-05 04:40:27
           model           : iPhone 5
           model-eng       : iPhone 5
           encoder         : 7.1.1
           encoder-eng     : 7.1.1
           date            : 2014-06-04T21:40:27-0700
           date-eng        : 2014-06-04T21:40:27-0700
           make            : Apple
           make-eng        : Apple
         Duration: 00:00:07.15, start: 0.000023, bitrate: 781 kb/s
           Stream #0:0(und): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p(tv, smpte170m), 480x360, 710 kb/s, 29.09 fps, 600 tbr, 600 tbn, 1200 tbc (default)
           Metadata:
             rotate          : 90
             creation_time   : 2014-06-05 04:40:27
             handler_name    : Core Media Data Handler
             encoder         : H.264
           Side data:
             displaymatrix: rotation of -90.00 degrees
           Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 63 kb/s (default)
           Metadata:
             creation_time   : 2014-06-05 04:40:27
             handler_name    : Core Media Data Handler
       File '5.avi' already exists. Overwrite ? [y/N] y
       open("5.avi", O_WRONLY|O_CREAT|O_TRUNC|O_CLOEXEC, 0666) = 4
       Output #0, avi, to '5.avi':
         Metadata:
           major_brand     : qt  
           minor_version   : 0
           compatible_brands: qt  
           make-eng        : Apple
           model           : iPhone 5
           model-eng       : iPhone 5
           make            : Apple
           ISFT            : Lavf56.3.100
           ICRD            : 2014-06-04T21:40:27-0700
           date-eng        : 2014-06-04T21:40:27-0700
           Stream #0:0(und): Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 480x360, q=2-31, 200 kb/s, 29.09 fps, 29.09 tbn, 29.09 tbc (default)
           Metadata:
             rotate          : 90
             creation_time   : 2014-06-05 04:40:27
             handler_name    : Core Media Data Handler
             encoder         : Lavc56.0.101 mpeg4
           Stream #0:1(und): Audio: mp3 (libmp3lame) (U[0][0][0] / 0x0055), 44100 Hz, mono, fltp (default)
           Metadata:
             creation_time   : 2014-06-05 04:40:27
             handler_name    : Core Media Data Handler
             encoder         : Lavc56.0.101 libmp3lame
       Stream mapping:
         Stream #0:0 -> #0:0 (h264 (native) -> mpeg4 (native))
         Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
       Press [q] to stop, [?] for help
       frame=  204 fps=0.0 q=27.2 Lsize=     348kB time=00:00:07.15 bitrate= 398.4kbits/s dup=0 drop=4    
       video:271kB audio:56kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 6.560985%
  • Background Video Processing with Rails

    23 octobre 2013, par Matthew Snyder

    I am trying to get uploaded videos to be converted in the background, running windows. Some of what I am using :

    gem 'paperclip'
    gem 'delayed_job_active_record'
    gem 'ffmpeg'

    I have edited the registry to allow the ffmpeg command to be ran from anywhere, I get a popup that I assume is ffmpeg because it goes away too quickly, guess the command is wrong so if anyone knows what's wrong with it please let me know. But the real problem is that it just hangs there, it says :

    [2012-12-09 22:47:03] ERROR invalid body size.
    [2012-12-09 22:47:03] ERROR Errno::ECONNABORTED: An established connection was a
    borted by the software in your host machine.
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i
    n `write'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i
    n `<<'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:396:i
    n `_write_data'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:368:i
    n `send_body_string'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:249:i
    n `send_body'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpresponse.rb:152:i
    n `send_response'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:110:in
    `run'
           C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in `blo
    ck in start_thread'

    Does anyone know how to properly get this working ? I've went through a few tutorials that have bits and pieces of what I need but I can't get them working together. Here's what I have so far, lemme know if you need more :

    Model :

    class Video < ActiveRecord::Base

     belongs_to :user
     has_many :comments, dependent: :destroy
     attr_accessible :video, :user_id, :video_file_name, :title, :public, :description, :views

     has_attached_file :video, url: "/users/:user_id/videos/:id/:basename_:style.:extension"

     #process_in_background :video #causes death

     validates :video, presence: true
     validates :description, presence: true, length: { minimum: 5, maximum: 100}
     validates :title, presence: true, length: { minimum: 1, maximum: 15 }

     validates_attachment_size :video, less_than: 1.gigabytes
     validates_attachment :video, presence: true

     default_scope order: 'created_at DESC'

     Paperclip.interpolates :user_id do |attachment, style|attachment.instance.user_id
     end

     #before_post_process do |video|
      # false if video.status == "converting"
     #end

     def perform
       command = <<-end_command
         start ffmpeg -i #{ '/public/users/:user_id/videos/:id/:basename_:style.:extension' }  -ar 22050 -ab 32 -s 1280x720 -vcodec webm -r 25 -qscale 8 -f webm -y #{ '/public/users/:user_id/videos/:id/:basename_.webm' }

       end_command
       success = system(command)
       logger.debug 'Converting File: ' + success.to_s
       if success && $?.exitstatus.to_i == 0
         #self.converted!
         self.status = "converted"
       else
         #self.failure!
         self.status = "failed"
       end
     end

     handle_asynchronously :perform

     def self.search(search)
       if search
         find(:all, conditions: ["public = 't' AND title LIKE ?", "%#{search}%"], order: "created_at DESC")
       else
         find(:all, conditions: ["public = 't'"], order: "created_at DESC")
       end
     end

     def self.admin_search(search)
       if search
         find(:all, conditions: ['title LIKE ?', "%#{search}%"], order: "created_at DESC")
       else
         find(:all, order: "created_at DESC")
       end
     end

     private

       # This updates the stored filename with the new flash video file
       def set_new_filename
         #update_attribute(:filename, "#{filename}.#{id}.webm")
         update_attribute(:content_type, "video/x-webm")
       end

    end

    Controller :

    class VideosController < ApplicationController
       before_filter :signed_in_user, only: [:upload, :update, :destroy]
       before_filter :admin_user, only: :admin_index

       def upload
           @video = Video.new
           # generate a unique id for the upload
           @uuid = (0..29).to_a.map {|x| rand(10)}
       end

       def create
           @video = Video.new(params[:video])
           @video.user_id = current_user.id

           if @video.save
               @video.delay.perform
               flash[:success] = "Uploaded Succefully!"
               redirect_to @video.user
               Delayed::Worker.new.start
           else
               render 'upload'
           end
       end

       def show
           @video = Video.find(params[:id])
           @comments = @video.comments.paginate(page: params[:page], per_page: 6)
           if !@video.public
               if !signed_in? || current_user.id != @video.user_id  && !current_user.admin && !current_user.approved?(@video.user)
               flash[:notice] = "Video is private"
               redirect_to root_path
           end
       end
       end

       def update
           @video = Video.find(params[:id])
           if @video.update_attributes(params[:video])
         flash[:success] = "Video preferences saved"
       else
           flash[:fail] = "Failed to update video preferences"
       end
       redirect_to :back
     end

       def destroy
           @video = Video.find(params[:id])
           @video.destroy
           flash[:deleted] = "Deleted Succefully!"
           redirect_to :back
       end

       def index
           @videos = Video.paginate(page: params[:page], per_page: 6).search(params[:search])
       end

       def admin_index
           @videos = Video.paginate(page: params[:page], per_page: 6).admin_search(params[:search])
       end

       def ajax_video_comments
           @video = Video.find(params[:id])
           @comments = @video.comments.paginate(page: params[:page], per_page: 6)

           respond_to do |format|
           format.js   { render partial: 'shared/comments', content_type: 'text/html' }
       end
       end

       def ajax_video_watched
           @video = Video.find(params[:id])
           @video.views += 1
           @video.save
       end

       private

       def signed_in_user
           redirect_to root_path, notice: "Please Login." unless signed_in?
       end

       def admin_user
           redirect_to(root_path) unless current_user.admin?
       end

    end