Recherche avancée

Médias (39)

Mot : - Tags -/audio

Autres articles (37)

  • Support de tous types de médias

    10 avril 2011

    Contrairement à beaucoup de logiciels et autres plate-formes modernes de partage de documents, MediaSPIP a l’ambition de gérer un maximum de formats de documents différents qu’ils soient de type : images (png, gif, jpg, bmp et autres...) ; audio (MP3, Ogg, Wav et autres...) ; vidéo (Avi, MP4, Ogv, mpg, mov, wmv et autres...) ; contenu textuel, code ou autres (open office, microsoft office (tableur, présentation), web (html, css), LaTeX, Google Earth) (...)

  • List of compatible distributions

    26 avril 2011, par

    The table below is the list of Linux distributions compatible with the automated installation script of MediaSPIP. Distribution nameVersion nameVersion number Debian Squeeze 6.x.x Debian Weezy 7.x.x Debian Jessie 8.x.x Ubuntu The Precise Pangolin 12.04 LTS Ubuntu The Trusty Tahr 14.04
    If you want to help us improve this list, you can provide us access to a machine whose distribution is not mentioned above or send the necessary fixes to add (...)

  • Selection of projects using MediaSPIP

    2 mai 2011, par

    The examples below are representative elements of MediaSPIP specific uses for specific projects.
    MediaSPIP farm @ Infini
    The non profit organizationInfini develops hospitality activities, internet access point, training, realizing innovative projects in the field of information and communication technologies and Communication, and hosting of websites. It plays a unique and prominent role in the Brest (France) area, at the national level, among the half-dozen such association. Its members (...)

Sur d’autres sites (6327)

  • Rails using stremio-ffmpeg gem to watermark a movie while uploading

    16 juin 2016, par Felix

    I am using carrierwave to upload a movie to amazon s3 that works perfect.

    Now I want to add a watermark to the movie while uploading or after uploading, I don’t know, what’s the best way ?

    I tried this :

    movie_controller.rb action uploadVideo

    movie = FFMPEG::Movie.new(@vid.video.url)

    puts "........................................"
    puts movie.inspect

    if @vid.save

    Just to find out if the video is catched from stremio.

    But then I got the error that the movie is not found, the problem is that it doesn’t look in the amazon s3 bucket, it looks on my local server

    No such file or directory - the file '/uploads/tmp/1462954331-3471-8766/VID-20160424-WA0013.mp4' does not exist

    What could be the solution ? or should I do this in carrierwave uploader ?

    UPDATE :

    When I do this after the .save action it looks at amazon s3 bucket .. but also says that the movie isn’t there. But if I call it directly in browser it’s displayed.

    UPDATE Code :

    #Laedt ein Video hoch
    def uploadMovie
     @user = User.find_by_id session[:user_id]
     #Holt alle Channels für die er eine Berechtigung hat (Eingeloggter user)
     @user = User.find_by_id session[:user_id]
     @knowledgeproviderList = @user.knowledgeprovider
     @channels = Channel.where(knowledgeprovider_id:     @knowledgeproviderList.pluck(:id))
     @vid = Movie.new(movies_params)
     @channel = Channel.find(params[:vid][:channel_id])
     @vid.channel = @channel

     #Fügt dem Movie einen Tag hinzu
     createTag params
     createCategory params



     if @vid.save
       flash[:notice] = t("flash.saved")

       #movie = FFMPEG::Movie.new(@vid.video.url)

       #puts "........................................"
       #puts movie.inspect

       redirect_to :action => :add
      else
        redirect_to :action => :add
     end
    end

    Update error :

    movie = FFMPEG::Movie.new(@vid.video.current_path)

    options = {watermark: "mages/header.png", resolution: "640x360", watermark_filter: { position: "RT", padding_x: 10, padding_y: 10 } }
    movie.transcode("movie.flv", options)

    enter image description here

    Update :
    Added the code in the uploader :

     process :watermark_movie

        def watermark_movie
          if self.file.path
                options = {watermark: "images/header.png", resolution: "640x360", watermark_filter: { position: "RT", padding_x: 10, padding_y: 10 } }
                self.model.file = FFMPEG::Movie.new(self.file.path).transcode("#{root}/#{cache_dir}/#{self.cache_id}/file.mp4", options)
           end
         end

    Error :

    multi_json (1.12.0) lib/multi_json/adapter.rb:19:in `load'
    multi_json (1.12.0) lib/multi_json.rb:122:in `load'
    streamio-ffmpeg (2.0.0) lib/ffmpeg/movie.rb:28:in `initialize'
    app/uploaders/movie_uploader.rb:40:in `new'
    app/uploaders/movie_uploader.rb:40:in `watermark_movie'
    carrierwave (0.11.2) lib/carrierwave/uploader/processing.rb:84:in `block in process!'
    carrierwave (0.11.2) lib/carrierwave/uploader/processing.rb:76:in `each'
    carrierwave (0.11.2) lib/carrierwave/uploader/processing.rb:76:in `process!'
    carrierwave_backgrounder (0.4.2) lib/backgrounder/delay.rb:14:in `process!'
    carrierwave (0.11.2) lib/carrierwave/uploader/callbacks.rb:18:in `block in with_callbacks'
    carrierwave (0.11.2) lib/carrierwave/uploader/callbacks.rb:18:in `each'
    carrierwave (0.11.2) lib/carrierwave/uploader/callbacks.rb:18:in `with_callbacks'
    carrierwave (0.11.2) lib/carrierwave/uploader/cache.rb:134:in `cache!'
    carrierwave (0.11.2) lib/carrierwave/mount.rb:329:in `cache'
    carrierwave (0.11.2) lib/carrierwave/mount.rb:163:in `video='
    carrierwave (0.11.2) lib/carrierwave/orm/activerecord.rb:39:in `video='
    activerecord (4.2.1) lib/active_record/attribute_assignment.rb:54:in `public_send'
    activerecord (4.2.1) lib/active_record/attribute_assignment.rb:54:in `_assign_attribute'
    activerecord (4.2.1) lib/active_record/attribute_assignment.rb:41:in `block in assign_attributes'
    actionpack (4.2.1) lib/action_controller/metal/strong_parameters.rb:183:in `each_pair'
    actionpack (4.2.1) lib/action_controller/metal/strong_parameters.rb:183:in `each_pair'
    activerecord (4.2.1) lib/active_record/attribute_assignment.rb:35:in `assign_attributes'
    activerecord (4.2.1) lib/active_record/core.rb:559:in `init_attributes'
    activerecord (4.2.1) lib/active_record/core.rb:281:in `initialize'
    activerecord (4.2.1) lib/active_record/inheritance.rb:61:in `new'
    activerecord (4.2.1) lib/active_record/inheritance.rb:61:in `new'
    app/controllers/movies_controller.rb:71:in `uploadMovie'
    actionpack (4.2.1) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
    actionpack (4.2.1) lib/abstract_controller/base.rb:198:in `process_action'
    actionpack (4.2.1) lib/action_controller/metal/rendering.rb:10:in `process_action'
    actionpack (4.2.1) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
    activesupport (4.2.1) lib/active_support/callbacks.rb:117:in `call'
    activesupport (4.2.1) lib/active_support/callbacks.rb:117:in `call'
    activesupport (4.2.1) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
    activesupport (4.2.1) lib/active_support/callbacks.rb:505:in `call'
    activesupport (4.2.1) lib/active_support/callbacks.rb:505:in `call'
    activesupport (4.2.1) lib/active_support/callbacks.rb:92:in `_run_callbacks'
    activesupport (4.2.1) lib/active_support/callbacks.rb:776:in `_run_process_action_callbacks'
    activesupport (4.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
    actionpack (4.2.1) lib/abstract_controller/callbacks.rb:19:in `process_action'
    actionpack (4.2.1) lib/action_controller/metal/rescue.rb:29:in `process_action'
    actionpack (4.2.1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
    activesupport (4.2.1) lib/active_support/notifications.rb:164:in `block in instrument'
    activesupport (4.2.1) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
    activesupport (4.2.1) lib/active_support/notifications.rb:164:in `instrument'
    actionpack (4.2.1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
    actionpack (4.2.1) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
    activerecord (4.2.1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
    actionpack (4.2.1) lib/abstract_controller/base.rb:137:in `process'
    actionview (4.2.1) lib/action_view/rendering.rb:30:in `process'
    actionpack (4.2.1) lib/action_controller/metal.rb:196:in `dispatch'
    actionpack (4.2.1) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
    actionpack (4.2.1) lib/action_controller/metal.rb:237:in `block in action'
    actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:in `call'
    actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:74:in `dispatch'
    actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:43:in `serve'
    actionpack (4.2.1) lib/action_dispatch/journey/router.rb:43:in `block in serve'
    actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in `each'
    actionpack (4.2.1) lib/action_dispatch/journey/router.rb:30:in `serve'
    actionpack (4.2.1) lib/action_dispatch/routing/route_set.rb:819:in `call'
    rack (1.6.4) lib/rack/etag.rb:24:in `call'
    rack (1.6.4) lib/rack/conditionalget.rb:38:in `call'
    rack (1.6.4) lib/rack/head.rb:13:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/flash.rb:260:in `call'
    rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
    rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/cookies.rb:560:in `call'
    activerecord (4.2.1) lib/active_record/query_cache.rb:36:in `call'
    activerecord (4.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:649:in `call'
    activerecord (4.2.1) lib/active_record/migration.rb:378:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
    activesupport (4.2.1) lib/active_support/callbacks.rb:88:in `call'
    activesupport (4.2.1) lib/active_support/callbacks.rb:88:in `_run_callbacks'
    activesupport (4.2.1) lib/active_support/callbacks.rb:776:in `_run_call_callbacks'
    activesupport (4.2.1) lib/active_support/callbacks.rb:81:in `run_callbacks'
    actionpack (4.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/reloader.rb:73:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
    web-console (2.3.0) lib/web_console/middleware.rb:20:in `block in call'
    web-console (2.3.0) lib/web_console/middleware.rb:18:in `catch'
    web-console (2.3.0) lib/web_console/middleware.rb:18:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
    railties (4.2.1) lib/rails/rack/logger.rb:38:in `call_app'
    railties (4.2.1) lib/rails/rack/logger.rb:20:in `block in call'
    activesupport (4.2.1) lib/active_support/tagged_logging.rb:68:in `block in tagged'
    activesupport (4.2.1) lib/active_support/tagged_logging.rb:26:in `tagged'
    activesupport (4.2.1) lib/active_support/tagged_logging.rb:68:in `tagged'
    railties (4.2.1) lib/rails/rack/logger.rb:20:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/request_id.rb:21:in `call'
    rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
    rack (1.6.4) lib/rack/runtime.rb:18:in `call'
    activesupport (4.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
    rack (1.6.4) lib/rack/lock.rb:17:in `call'
    actionpack (4.2.1) lib/action_dispatch/middleware/static.rb:113:in `call'
    rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
    railties (4.2.1) lib/rails/engine.rb:518:in `call'
    railties (4.2.1) lib/rails/application.rb:164:in `call'
    rack (1.6.4) lib/rack/lock.rb:17:in `call'
    rack (1.6.4) lib/rack/content_length.rb:15:in `call'
    rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
    /home/felix/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/webrick/httpserver.rb:138:in `service'
    /home/felix/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/webrick/httpserver.rb:94:in `run'
    /home/felix/.rvm/rubies/ruby-2.0.0-p643/lib/ruby/2.0.0/webrick/server.rb:295:in `block in start_thread'

    UPDATE — Movie Uploader

    # encoding: utf-8
    class MovieUploader < CarrierWave::Uploader::Base

     # Include RMagick or MiniMagick support:
     # include CarrierWave::RMagick
     include CarrierWave::MiniMagick
     include CarrierWave::Video
     include CarrierWave::Video::Thumbnailer
     include CarrierWave::Backgrounder::Delay

     require 'rubygems'
     require 'streamio-ffmpeg'

     # Choose what kind of storage to use for this uploader:
     storage :fog

     # Override the directory where uploaded files will be stored.
     # This is a sensible default for uploaders that are meant to be mounted:
     def store_dir
       "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end

     process :watermark_movie

     def watermark_movie
       puts "ssssssssssssssssssssssssssssssssss"
       puts self.file.inspect

       if self.file.path
         options = {watermark: "http://felix-hohlwegler.de/holz-soft/include/designs/design13/images/header.png", resolution: "640x360", watermark_filter: { position: "RT", padding_x: 10, padding_y: 10 } }
         self.model.file = FFMPEG::Movie.new(self.file.path).transcode("#{root}/#{cache_dir}/#{self.cache_id}/file.mp4", options)
       end
     end

     version :thumb do
       process thumbnail: [{format: 'png', quality: 10, size: 1200, strip: false, seek: 10, logger: Rails.logger}]
       def full_filename for_file
         png_name for_file, version_name
       end
     end

     def png_name for_file, version_name
       %Q{#{version_name}_#{for_file.chomp(File.extname(for_file))}.png}
     end


     # Add a white list of extensions which are allowed to be uploaded.
     # For images you might use something like this:
      def extension_white_list
        %w(mov avi mkv mpeg mpeg2 mp4 3gp)
      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%
  • How do I get videos to upload using ruby on rails carrierwave-video ?

    9 juillet 2016, par Eric

    Updated as of July 9, 2016

    I tried to follow the instructions on the github website for the video uploader process using carrierwave-video gem but get an error that says the file or directory mmpeg -i doesn’t exist.

    The upload path for images functions correctly, just not the video one.

    I have added all of the following code necessary to help solve the error and minified as much as i possibly could.

    Video uploader code using carrierwave

    class VideoUploader < CarrierWave::Uploader::Base

     include CarrierWave::Video
     storage :file

     version :mp4 do
       process :encode_video => [:mp4, resolution: "100x100"]
     end

     def store_dir
       "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end
    end

    Here is the movie controller code that handles uploading of videos

    class MoviesController &lt; ApplicationController
      include MoviesHelper

      def index
         mode "index"
      end

      def show
         mode "show"
      end

      def new
         mode "new"
      end

      def edit
         mode "edit"
      end

      def create
         mode "create"
      end

      def update
         mode "update"
      end

      def destroy
         mode "destroy"
      end

      def review
         mode "review"
      end

      def approve
         mode "approve"
      end

      def deny
         mode "deny"
      end
    end

    Here is the model data for the movie that goes with it

    class Movie &lt; ActiveRecord::Base
     attr_accessible :created_on, :description, :maintenance, :reviewed, :subplaylist_id, :title, :user_id, :video, :remote_video_url
     belongs_to :user
     belongs_to :subplaylist
     mount_uploader :video, VideoUploader
    end

    Here is where the movie is supposed to be displayed but it is not working

    &lt;% provide(:title, "Movie: Where movies are made!") %>
    &lt;% provide(:keywords, "movies, video") %>
    &lt;% provide(:description, "This is the place where users showcase their wonderful video talent.") %>
    <p>&lt;%= notice %></p>
    <h1 class="pageheader">&lt;%= @movie.title %></h1>
    <br />
    <p class="pagetext">&lt;%= video_tag(@movie.video_url.to_s, controls: true, class: "imagebox") %></p>
    <p class="pagetext">&lt;%= @movie.description %></p>
    <p class="pagetext">Created on: &lt;%= @movie.created_on.strftime("%B-%d-%Y") %></p>
    <p class="pagetext">Owner: &lt;%= getType(@movie.user) %>&lt;%= link_to @movie.user.vname, user_path(@movie.user) %></p>
    <br />
    <p class="pagetext">&lt;%= link_to 'Back', mainplaylist_subplaylist_path(@subplaylist.mainplaylist, @movie.subplaylist) %></p>

    Here is where the movie new action is

    &lt;% provide(:title, "Movie: Create new movies here!") %>
    &lt;% provide(:description, "New movies are uploaded only to the site when the movie gets approved.") %>
    <h1 class="pagetextheader">New movie</h1>
    &lt;%= render 'form' %>
    <p class="pagetext">&lt;%= link_to 'Back', mainplaylist_subplaylist_path(@subplaylist.mainplaylist, @subplaylist) %></p>

    Here is where the movies forum parameters are

    &lt;%= form_for([@subplaylist, @movie], :html=>{:multipart => true}) do |f| %>
     &lt;% if @movie.errors.any? %>
       <div>
         <h2>&lt;%= pluralize(@movie.errors.count, "error") %> prohibited this movie from being saved:</h2>

         <ul>
         &lt;% @movie.errors.full_messages.each do |msg| %>
           <li>&lt;%= msg %></li>
         &lt;% end %>
         </ul>
       </div>
     &lt;% end %>
     <br />
     <div class="pagetext">
       &lt;%= f.label :title %><br />
       &lt;%= f.text_field :title %>
     </div>
     <div class="pagetext">
       &lt;%= f.file_field :video %>
     </div>
     <div class="pagetext">
       &lt;%= f.label :remote_video_url, "or video URL" %><br />
       &lt;%= f.text_field :remote_video_url %>
     </div>
     <div class="pagetext">
       &lt;%= f.label :description %><br />
       &lt;%= f.text_area :description %>
     </div>
     <div class="pagetext">
       &lt;%= f.submit %>
     </div>
     <br />
    &lt;% end %>

    Here is the movies helper code

    module MoviesHelper

      def mode(type)
         code = auto_logout
         if(code == true)
            sign_out
            redirect_to root_path
         else
            #Check if Maintenance is turned_on
            allmode = Maintenancemode.find_by_id(1)
            moviemode = Maintenancemode.find_by_id(19)
            mode_turned_on = (allmode.maintenance_on || moviemode.maintenance_on)
            #Determine if any maintenance is on
            if(mode_turned_on)
               #Determine if we are a regular user
               regularUser = (!current_user || !current_user.admin?)
               if(regularUser)
                  #Determine which maintenance mode is on
                  if(allmode.maintenance_on)
                     redirect_to maintenance_path
                  else
                     redirect_to movies_maintenance_path
                  end
               else
                  switch type
               end
            else
               switch type
            end
         end
      end

      private
         def getType(user)
            if(user.admin)
               value = "$"
            else
               typeFound = Usertype.find_by_user_id(user.id)
               if(typeFound)
                  type = typeFound.privilege
                  if(type == "Reviewer")
                     value = "^"
                  elsif(type == "Banned")
                     value = "!"
                  else
                     value = "~"
                  end
               else
                  value = "~"
               end
            end
            return value
         end

         def movieApproved
            movieFound = Movie.find_by_id(params[:movie_id])
            if(movieFound)
               movieFound.reviewed = true
               pouch = Pouch.find_by_user_id(movieFound.user_id)
               pointsForMovie = 10
               pouch.amount += pointsForMovie
               @pouch = pouch
               @pouch.save
               @movie = movieFound
               @movie.save
    #            MovieMailer.movie_approved(@movie, pointsForMovie).deliver
               redirect_to movies_review_path
            else
               render "public/404"
            end
         end

         def movieDenied
            movieFound = Movie.find_by_id(params[:movie_id])
            if(movieFound)
               #Retrieve the user who owns this pet first
               #userEmail = petFound.user.email
               #Send mail to user with link to edit the pet they sent
               @movie = movieFound
               MovieMailer.movie_denied(@movie).deliver
               redirect_to movies_review_path
            else
               render "public/404"
            end
         end

         def createMovie(subplaylistFound)
            newMovie = subplaylistFound.movies.new
            @subplaylist = subplaylistFound
            @movie = newMovie
         end

         def saveMovie(subplaylistFound, logged_in)
            newMovie = subplaylistFound.movies.new(params[:movie])
            newMovie.user_id = logged_in.id
            currentTime = Time.now
            newMovie.created_on = currentTime
            @movie = newMovie
            if(@movie.save)
               @subplaylist = subplaylistFound
    #            MovieMailer.review_movie(@movie).deliver
               flash[:success] = "#{@movie.title} is currently being reviewed please check back later."
               redirect_to subplaylist_movie_path(@subplaylist, @movie)
            else
               render "new"
            end
         end

         def switch(type)
            if(type == "index") #Admin only
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     allMovies = Movies.order("created_on desc").page(params[:page]).per(10)
                     @movies = allMovies
                  else
                     redirect_to root_path
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "show")
               movieFound = Movie.find_by_id(params[:id])
               if(movieFound)
                  subplaylistFound = Subplaylist.find_by_id(params[:subplaylist_id])
                  if(subplaylistFound)
                     if(movieFound.reviewed)
                        @subplaylist = subplaylistFound
                        @movie = movieFound
                     else
                        logged_in = current_user
                        if(logged_in)
                           userMatch = ((logged_in.id == movieFound.user_id) || logged_in.admin)
                           if(userMatch)
                              @subplaylist = subplaylistFound
                              @movie = movieFound
                           else
                              redirect_to root_path
                           end
                        else
                           redirect_to root_path
                        end
                     end
                  else
                     redirect_to root_path
                  end
               else
                  render "public/404"
               end
            elsif(type == "new")
               logged_in = current_user
               if(logged_in)
                  subplaylistFound = Subplaylist.find_by_id(params[:subplaylist_id])
                  if(subplaylistFound)
                     if(subplaylistFound.collab_mode)
                        createMovie(subplaylistFound)
                     else
                        userMatch = (logged_in.id == subplaylistFound.user_id)
                        if(userMatch)
                           createMovie(subplaylistFound)
                        else
                           redirect_to root_path
                        end
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "create")
               logged_in = current_user
               if(logged_in)
                  subplaylistFound = Subplaylist.find_by_id(params[:subplaylist_id])
                  if(subplaylistFound)
                     if(subplaylistFound.collab_mode)
                        saveMovie(subplaylistFound, logged_in)
                     else
                        userMatch = (logged_in.id == subplaylistFound.user_id)
                        if(userMatch)
                           saveMovie(subplaylistFound, logged_in)
                        else
                           redirect_to root_path
                        end
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "edit")
               logged_in = current_user
               if(logged_in)
                  movieFound = Movie.find_by_id(params[:id])
                  if(movieFound)
                     userMatch = (logged_in.id == movieFound.user_id)
                     if(userMatch)
                        subplaylistFound = Subplaylist.find_by_id(movieFound.subplaylist_id)
                        if(subplaylistFound)
                           @subplaylist = subplaylistFound
                           @movie = movieFound
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "update")
               logged_in = current_user
               if(logged_in)
                  movieFound = Movie.find_by_id(params[:id])
                  if(movieFound)
                     userMatch = (logged_in.id == movieFound.user_id)
                     if(userMatch)
                        subplaylistFound = Subplaylist.find_by_id(movieFound.subplaylist_id)
                        if(subplaylistFound)
                           @movie = movieFound
                           if(@movie.update_attributes(params[:movie]))
                              @subplaylist = subplaylistFound
                              flash[:success] = 'Movie was successfully updated.'
                              redirect_to subplaylist_movie_path(@subplaylist, @movie)
                           else
                              render "edit"
                           end
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "destroy")
               logged_in = current_user
               if(logged_in)
                  movieFound = Movie.find_by_id(params[:id]) #Need to move this below the admin section to protect it
                  if(movieFound)
                     if(logged_in.admin)
                        subplaylistFound = Subplaylist.find_by_id(movieFound.subplaylist_id)
                        if(subplaylistFound)
                           @movie = movieFound
                           @subplaylist = subplaylistFound
                           @movie.destroy
                           redirect_to mainplaylist_subplaylist_path(@subplaylist.mainplaylist, @subplaylist)
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "review") #Admin
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     allMovies = Movie.all
                     moviesToReview = allMovies.select{|movie| !movie.reviewed}
                     @movies = Kaminari.paginate_array(moviesToReview).page(params[:page]).per(10)
                  else
                     typeFound = Usertype.find_by_user_id(logged_in.id)
                     if(typeFound.privilege == "Reviewer")
                        allMovies = Movie.all
                        moviesToReview = allMovies.select{|movie| !movie.reviewed}
                        @movies = Kaminari.paginate_array(moviesToReview).page(params[:page]).per(10)
                     else
                        redirect_to root_path
                     end
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "approve") #Admin
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     movieApproved
                  else
                     typeFound = Usertype.find_by_user_id(logged_in.id)
                     if(typeFound.privilege == "Reviewer")
                        movieApproved
                     else
                        redirect_to root_path
                     end
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "deny") #Admin
               logged_in = current_user
               if(logged_in)
                  if(logged_in.admin)
                     movieDenied
                  else
                     typeFound = Usertype.find_by_user_id(logged_in.id)
                     if(typeFound.privilege == "Reviewer")
                        movieDenied
                     else
                        redirect_to root_path
                     end
                  end
               else
                  redirect_to root_path
               end
            end
         end
    end

    Here is the subplaylists show code

    &lt;% provide(:title, "Subplaylist: The place where users videos gets uploaded to!") %>
    &lt;% provide(:keywords, "user, video, uploaded") %>
    &lt;% provide(:description, "Allows the categorization of various videos that the user submitted successfully.") %>
    <p>&lt;%= notice %></p>
    <h1 class="pageheader">&lt;%= @subplaylist.title %></h1>
    <br />
    <p class="pagetext">&lt;%= @subplaylist.description %></p>
    <br />
    <div class="pagebox">&lt;%= paginate @movies %></div>





    <br />
    <div class="pagetext">
      &lt;% @movies.each_with_index do |movie, index| %>
         <div class="container">
            <div class="inner">
               <div class="inner">&lt;%= link_to movie.title, subplaylist_movie_path(@subplaylist, movie) %></div>
               &lt;% if current_user &amp;&amp; (current_user.id == movie.user_id || current_user.admin? )%>
                  <div class="inner">&lt;%= button_to 'Edit', edit_subplaylist_movie_path(@subplaylist, movie), method: :get %></div>
                  <div class="inner">&lt;%= button_to 'Destroy', [@subplaylist, movie], method: :delete, data: { confirm: 'Are you sure?' } %></div>
               &lt;% end %>
               <p>&lt;%= video_tag movie.video_url(:thumb).to_s, controls: true %></p>
            </div>
            <br />
            <p>Created on: &lt;%= movie.created_on.strftime("%B-%d-%Y") %></p>
            <p>Owner: &lt;%= getType(movie.user) %>&lt;%= link_to movie.user.vname, user_path(movie.user) %></p>
         </div>
         &lt;% if ((index + 1) % 3) == 0 %>
            <br />
            <br />
         &lt;% end %>
      &lt;% end %>
    </div>
    <br />
    &lt;% if current_user %>
      <p class="pagetext">&lt;%= link_to "New Movie", new_subplaylist_movie_path(@subplaylist) %></p>
      <br />
    &lt;% end %>
    <p class="pagetext">&lt;%= link_to 'Back', user_mainplaylist_path(@mainplaylist.user.vname, @subplaylist.mainplaylist.title) %></p>

    Here is the subplaylists model

    class Subplaylist &lt; ActiveRecord::Base
      attr_accessible :title, :description, :collab_mode
      belongs_to :user
      belongs_to :mainplaylist
      has_many :movies, :foreign_key => "subplaylist_id", :dependent => :destroy
      VALID_NAME = /\A[A-Za-z][A-Za-z1-9][A-Za-z1-9 ]+\z/
      validates :title, presence: true, format: {with: VALID_NAME}
      validates :description, presence: true
    end

    Here is the subplaylists controller code

    class SubplaylistsController &lt; ApplicationController
      include SubplaylistsHelper

      def index
         mode "index"
      end

      def show
         mode "show"
      end

      def new
         mode "new"
      end

      def edit
         mode "edit"
      end

      def create
         mode "create"
      end

      def update
         mode "update"
      end

      def destroy
         mode "destroy"
      end
    end

    Here is the subplaylist helper code

    module SubplaylistsHelper

      def mode(type)
         code = auto_logout
         if(code == true)
            sign_out
            redirect_to root_path
         else
            #Check if Maintenance is turned_on
            allmode = Maintenancemode.find_by_id(1)
            subplaylistmode = Maintenancemode.find_by_id(18)
            mode_turned_on = (allmode.maintenance_on || subplaylistmode.maintenance_on)
            #Determine if any maintenance is on
            if(mode_turned_on)
               #Determine if we are a regular user
               regularUser = (!current_user || !current_user.admin?)
               if(regularUser)
                  #Determine which maintenance mode is on
                  if(allmode.maintenance_on)
                     redirect_to maintenance_path
                  else
                     redirect_to subplaylists_maintenance_path
                  end
               else
                  switch type
               end
            else
               switch type
            end
         end
      end

      private
         def getType(user)
            if(user.admin)
               value = "$"
            else
               typeFound = Usertype.find_by_user_id(user.id)
               if(typeFound)
                  type = typeFound.privilege
                  if(type == "Reviewer")
                     value = "^"
                  elsif(type == "Banned")
                     value = "!"
                  else
                     value = "~"
                  end
               else
                  value = "~"
               end
            end
            return value
         end

         def switch(type)
            if(type == "show")
               subplaylistFound = Subplaylist.find_by_id(params[:id])
               if(subplaylistFound)
                  mainplaylistFound = Mainplaylist.find_by_title(params[:mainplaylist_id])
                  if(mainplaylistFound)
                     playlistMatch = (subplaylistFound.mainplaylist_id == mainplaylistFound.id)
                     if(playlistMatch)
                        @mainplaylist = mainplaylistFound
                        @subplaylist = subplaylistFound
                        subplaylistMovies = @subplaylist.movies.all
                        reviewedMovies = subplaylistMovies
                        if(subplaylistMovies.count > 0)
                           reviewedMovies = subplaylistMovies.select{|movie| movie.reviewed}
                        end
                        @movies = Kaminari.paginate_array(reviewedMovies).page(params[:page]).per(10)
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            elsif(type == "destroy")
               logged_in = current_user
               if(logged_in)
                  subplaylistFound = Subplaylist.find_by_id(params[:id]) #Need to move this below the admin section to protect it
                  if(subplaylistFound)
                     if(logged_in.admin)
                        mainplaylistFound = Mainplaylist.find_by_id(subplaylistFound.mainplaylist_id)
                        if(mainplaylistFound)
                           @subplaylist = subplaylistFound
                           @mainplaylist = mainplaylistFound
                           @subplaylist.destroy
                           redirect_to mainplaylist_subplaylists_path(@mainplaylist)
                        else
                           render "public/404"
                        end
                     else
                        redirect_to root_path
                     end
                  else
                     render "public/404"
                  end
               else
                  redirect_to root_path
               end
            end
         end
    end

    Here is the User model

    class User &lt; ActiveRecord::Base
      attr_accessible :email, :first_name, :last_name, :login_id, :vname, :password, :password_confirmation, :avatar
      has_secure_password
      mount_uploader :avatar, AvatarUploader
      before_save { |user| user.email = user.email.downcase }
      before_save { |user| user.first_name = user.first_name.humanize }

      #key
      has_one :sessionkey, :foreign_key => "user_id", :dependent => :destroy
      has_one :usertype, :foreign_key => "user_id", :dependent => :destroy

      #Video section
      has_many :mainplaylists, :foreign_key => "user_id", :dependent => :destroy
      has_many :subplaylists, :foreign_key => "user_id", :dependent => :destroy
      has_many :movies, :foreign_key => "user_id", :dependent => :destroy

      #validates :first_name, presence: true
      VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
      VALID_NAME_REGEX = /\A[a-z][a-z][a-z]+\z/i
      VALID_VNAME_REGEX = /\A[A-Za-z][A-Za-z][A-Za-z][A-Za-z0-9 ]+([-][A-Za-z0-9 ]+)?\z/
      VALID_PASSWORD_REGEX = /\A[A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!][A-Za-z0-9!]+\z/
      validates :first_name, presence: true, format: { with: VALID_NAME_REGEX}
      validates :last_name, presence: true, format: { with: VALID_NAME_REGEX}
      validates :email, presence: true, format: { with: VALID_EMAIL_REGEX}
      validates :login_id, presence: true, format: { with: VALID_VNAME_REGEX}, uniqueness: { case_sensitive: false}
      validates :vname, presence: true, format: { with: VALID_VNAME_REGEX}, uniqueness: { case_sensitive: false}
      validates :password, length: {minimum: 6}#, format: { with: VALID_PASSWORD_REGEX}
      validates :password_confirmation, presence: true #, format: { with: VALID_PASSWORD_REGEX}

      def to_param
         vname
      end
    end

    Here is the sessionkey model

    class Sessionkey &lt; ActiveRecord::Base
     belongs_to :user
    end

    Here is the usertype model

    class Usertype &lt; ActiveRecord::Base
     attr_accessible :privilege, :user_id #Only priviledge will be changeable
     belongs_to :user
    end

    Error message

    No such file or directory - ffmpeg -i /home/eric/Projects/Local/Lduelingpets/Trial/public/uploads/tmp/1466811951-3149-2702/mp4_TrialMovies.mp4