Recherche avancée

Médias (3)

Mot : - Tags -/spip

Autres articles (62)

  • Les formats acceptés

    28 janvier 2010, par

    Les commandes suivantes permettent d’avoir des informations sur les formats et codecs gérés par l’installation local de ffmpeg :
    ffmpeg -codecs ffmpeg -formats
    Les format videos acceptés en entrée
    Cette liste est non exhaustive, elle met en exergue les principaux formats utilisés : h264 : H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 m4v : raw MPEG-4 video format flv : Flash Video (FLV) / Sorenson Spark / Sorenson H.263 Theora wmv :
    Les formats vidéos de sortie possibles
    Dans un premier temps on (...)

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • Demande de création d’un canal

    12 mars 2010, par

    En fonction de la configuration de la plateforme, l’utilisateur peu avoir à sa disposition deux méthodes différentes de demande de création de canal. La première est au moment de son inscription, la seconde, après son inscription en remplissant un formulaire de demande.
    Les deux manières demandent les mêmes choses fonctionnent à peu près de la même manière, le futur utilisateur doit remplir une série de champ de formulaire permettant tout d’abord aux administrateurs d’avoir des informations quant à (...)

Sur d’autres sites (9435)

  • Call to avformat_find_stream_info prevents decoding of simple PNG image ?

    10 avril 2014, par kloffy

    I am running into a problem decoding a simple PNG image with libav. The decode_ok flag after the call to avcodec_decode_video2 is set to 0, even though the packet contains the entire image. Through some experimentation, I have managed to pinpoint the issue and it seems related to calling avformat_find_stream_info. If the call is removed, the example runs successfully. However, I would like to use the same code for other media, and calling avformat_find_stream_info is recommended in the documentation.

    The following minimal example illustrates the behavior (unfortunately still a bit lengthy) :

    #include <iostream>

    extern "C"
    {
    #include <libavformat></libavformat>avformat.h>
    #include <libavcodec></libavcodec>avcodec.h>
    }

    // Nothing to see here, it&#39;s just a helper function
    AVCodecContext* open(AVMediaType mediaType, AVFormatContext* formatContext)
    {
       auto ret = 0;
       if ((ret = av_find_best_stream(formatContext, mediaType, -1, -1, nullptr, 0)) &lt; 0)
       {
           std::cerr &lt;&lt; "Failed to find video stream." &lt;&lt; std::endl;
           return nullptr;
       }

       auto codecContext = formatContext->streams[ret]->codec;
       auto codec = avcodec_find_decoder(codecContext->codec_id);
       if (!codec)
       {
           std::cerr &lt;&lt; "Failed to find codec." &lt;&lt; std::endl;
           return nullptr;
       }

       if ((ret = avcodec_open2(codecContext, codec, nullptr)) != 0)
       {
           std::cerr &lt;&lt; "Failed to open codec context." &lt;&lt; std::endl;
           return nullptr;
       }

       return codecContext;
    }

    // All the interesting bits are here
    int main(int argc, char* argv[])
    {
       auto path = "/path/to/test.png"; // Replace with valid path to PNG
       auto ret = 0;

       av_log_set_level(AV_LOG_DEBUG);

       av_register_all();
       avcodec_register_all();

       auto formatContext = avformat_alloc_context();
       if ((ret = avformat_open_input(&amp;formatContext, path, NULL, NULL)) != 0)
       {
           std::cerr &lt;&lt; "Failed to open input." &lt;&lt; std::endl;
           return -1;
       }
       av_dump_format(formatContext, 0, path, 0);

    //*/ Info is successfully found, but interferes with decoding
       if((ret = avformat_find_stream_info(formatContext, nullptr)) &lt; 0)
       {
           std::cerr &lt;&lt; "Failed to find stream info." &lt;&lt; std::endl;
           return -1;
       }
       av_dump_format(formatContext, 0, path, 0);
    //*/

       auto codecContext = open(AVMEDIA_TYPE_VIDEO, formatContext);

       AVPacket packet;
       av_init_packet(&amp;packet);

       if ((ret = av_read_frame(formatContext, &amp;packet)) &lt; 0)
       {
           std::cerr &lt;&lt; "Failed to read frame." &lt;&lt; std::endl;
           return -1;
       }

       auto frame = av_frame_alloc();
       auto decode_ok = 0;
       if ((ret = avcodec_decode_video2(codecContext, frame, &amp;decode_ok, &amp;packet)) &lt; 0 || !decode_ok)
       {
           std::cerr &lt;&lt; "Failed to decode frame." &lt;&lt; std::endl;
           return -1;
       }

       av_frame_free(&amp;frame);
       av_free_packet(&amp;packet);

       avcodec_close(codecContext);

       avformat_close_input(&amp;formatContext);
       av_free(formatContext);

       return 0;
    }
    </iostream>

    The format dump before avformat_find_stream_info prints :

    Input #0, image2, from '/path/to/test.png' :
      Duration : N/A, bitrate : N/A
        Stream #0:0, 0, 1/25 : Video : png, 25 tbn

    The format dump after avformat_find_stream_info prints :

    Input #0, image2, from '/path/to/test.png' :
      Duration : 00:00:00.04, start : 0.000000, bitrate : N/A
        Stream #0:0, 1, 1/25 : Video : png, rgba, 512x512 [SAR 3780:3780 DAR 1:1], 1/25, 25 tbr, 25 tbn, 25 tbc

    So it looks like the search yields potentially useful information. Can anybody shed some light on this problem ? Other image formats seem to work fine. I assume that this is a simple user error rather than a bug.

    Edit : Debug logging was already enabled, but the PNG decoder does not produce a lot of output. I have also tried setting a custom logging callback.

    Here is what I get without the call to avformat_find_stream_info, when decoding succeeds :

    Statistics : 52125 bytes read, 0 seeks

    And here is what I get with the call to avformat_find_stream_info, when decoding fails :

    Statistics : 52125 bytes read, 0 seeks
    

    detected 8 logical cores

    The image is 52125 bytes, so the whole file is read. I am not sure what the logical cores are referring to.

  • FFMPEG Video Cropping slower [duplicate]

    23 juin 2016, par syed imty

    This question already has an answer here :

    I am trying to crop rectangular video into a square one using FFMPEG. The video conversion take too much time.

    For a video of 30 secs, it takes around 60-70secs to convert

    FFMPEG Command

    String commandStr =" -i "+videoPath+"  -vcodec libx264 -b:v 880k -vf crop=" + videoSize.height + ":"+ videoSize.height + ":" + cropStart +":0 -preset ultrafast -strict -2 " +compressedVideoPath;

    Progress Log

    D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
    I/System.out: Video converison : /storage/emulated/0/IHH_y/147.mp4 /storage/emulated/0/IHH_y/147upload.mp4  wxh1080:1080:420
    I/System.out: FFMpeg lib onStart
    D/FFmpeg: Running publishing updates method
    I/System.out: FFMpeg lib onProgressWARNING: linker: /data/data/com.x.y/files/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix.
    I/System.out: FFMpeg lib onProgressffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
    I/System.out: FFMpeg lib onProgress  built on Oct  7 2014 15:08:46 with gcc 4.8 (GCC)
    I/System.out: FFMpeg lib onProgress  configuration: --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
    I/System.out: FFMpeg lib onProgress  libavutil      54.  7.100 / 54.  7.100
    I/System.out: FFMpeg lib onProgress  libavcodec     56.  1.100 / 56.  1.100
    I/System.out: FFMpeg lib onProgress  libavformat    56.  4.101 / 56.  4.101
    I/System.out: FFMpeg lib onProgress  libavdevice    56.  0.100 / 56.  0.100
    I/System.out: FFMpeg lib onProgress  libavfilter     5.  1.100 /  5.  1.100
    I/System.out: FFMpeg lib onProgress  libswscale      3.  0.100 /  3.  0.100
    I/System.out: FFMpeg lib onProgress  libswresample   1.  1.100 /  1.  1.100
    I/System.out: FFMpeg lib onProgress  libpostproc    53.  0.100 / 53.  0.100
    I/System.out: FFMpeg lib onProgressInput #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/IHH_y/147.mp4':
    I/System.out: FFMpeg lib onProgress  Metadata:
    I/System.out: FFMpeg lib onProgress    major_brand     : mp42
    I/System.out: FFMpeg lib onProgress    minor_version   : 0
    I/System.out: FFMpeg lib onProgress    compatible_brands: isommp42
    I/System.out: FFMpeg lib onProgress    creation_time   : 2016-06-23 20:00:50
    I/System.out: FFMpeg lib onProgress  Duration: 00:00:08.92, start: 0.000000, bitrate: 8966 kb/s
    I/System.out: FFMpeg lib onProgress    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 8983 kb/s, 16.66 fps, 16.67 tbr, 90k tbn, 180k tbc (default)
    I/System.out: FFMpeg lib onProgress    Metadata:
    I/System.out: FFMpeg lib onProgress      rotate          : 90
    I/System.out: FFMpeg lib onProgress      creation_time   : 2016-06-23 20:00:50
    I/System.out: FFMpeg lib onProgress      handler_name    : VideoHandle
    I/System.out: FFMpeg lib onProgress    Side data:
    I/System.out: FFMpeg lib onProgress      displaymatrix: rotation of -90.00 degrees
    I/System.out: FFMpeg lib onProgress    Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 254 kb/s (default)
    I/System.out: FFMpeg lib onProgress    Metadata:
    I/System.out: FFMpeg lib onProgress      creation_time   : 2016-06-23 20:00:50
    I/System.out: FFMpeg lib onProgress      handler_name    : SoundHandle
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] using cpu capabilities: none!
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] profile Constrained Baseline, level 3.2
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=16 scenecut=0 intra_refresh=0 rc=abr mbtree=0 bitrate=880 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
    I/System.out: FFMpeg lib onProgressOutput #0, mp4, to '/storage/emulated/0/IHH_y/147upload.mp4':
    I/System.out: FFMpeg lib onProgress  Metadata:
    I/System.out: FFMpeg lib onProgress    major_brand     : mp42
    I/System.out: FFMpeg lib onProgress    minor_version   : 0
    I/System.out: FFMpeg lib onProgress    compatible_brands: isommp42
    I/System.out: FFMpeg lib onProgress    encoder         : Lavf56.4.101
    I/System.out: FFMpeg lib onProgress    Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1080x1080, q=-1--1, 880 kb/s, 16.67 fps, 12800 tbn, 16.67 tbc (default)
    I/System.out: FFMpeg lib onProgress    Metadata:
    I/System.out: FFMpeg lib onProgress      rotate          : 90
    I/System.out: FFMpeg lib onProgress      creation_time   : 2016-06-23 20:00:50
    I/System.out: FFMpeg lib onProgress      handler_name    : VideoHandle
    I/System.out: FFMpeg lib onProgress      encoder         : Lavc56.1.100 libx264
    I/System.out: FFMpeg lib onProgress    Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
    I/System.out: FFMpeg lib onProgress    Metadata:
    I/System.out: FFMpeg lib onProgress      creation_time   : 2016-06-23 20:00:50
    I/System.out: FFMpeg lib onProgress      handler_name    : SoundHandle
    I/System.out: FFMpeg lib onProgress      encoder         : Lavc56.1.100 aac
    I/System.out: FFMpeg lib onProgressStream mapping:
    I/System.out: FFMpeg lib onProgress  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    I/System.out: FFMpeg lib onProgress  Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    I/System.out: FFMpeg lib onProgressPress [q] to stop, [?] for help
    I/System.out: FFMpeg lib onProgressframe=    0 fps=0.0 q=0.0 size=       0kB time=00:00:00.96 bitrate=   0.4kbits/s    
    I/System.out: FFMpeg lib onProgressframe=    7 fps=6.8 q=0.0 size=       0kB time=00:00:01.05 bitrate=   0.4kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   15 fps=9.7 q=35.0 size=      87kB time=00:00:01.07 bitrate= 660.5kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   15 fps=7.3 q=35.0 size=      87kB time=00:00:01.88 bitrate= 376.7kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   25 fps=9.6 q=35.0 size=     154kB time=00:00:02.05 bitrate= 613.4kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   32 fps= 10 q=35.0 size=     199kB time=00:00:02.07 bitrate= 784.7kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   32 fps=8.8 q=35.0 size=     199kB time=00:00:02.93 bitrate= 556.4kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   42 fps= 10 q=35.0 size=     263kB time=00:00:03.06 bitrate= 705.2kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   49 fps= 10 q=36.0 size=     328kB time=00:00:03.08 bitrate= 870.9kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   50 fps=9.5 q=36.0 size=     341kB time=00:00:04.06 bitrate= 687.2kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   59 fps= 10 q=36.0 size=     407kB time=00:00:04.06 bitrate= 821.2kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   66 fps= 10 q=36.0 size=     462kB time=00:00:04.10 bitrate= 922.7kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   66 fps=9.7 q=36.0 size=     462kB time=00:00:05.00 bitrate= 757.4kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   77 fps= 10 q=35.0 size=     534kB time=00:00:05.06 bitrate= 864.0kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   83 fps= 11 q=34.0 size=     566kB time=00:00:05.44 bitrate= 850.2kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   89 fps= 11 q=34.0 size=     600kB time=00:00:06.06 bitrate= 810.6kbits/s    
    I/System.out: FFMpeg lib onProgressframe=   95 fps= 11 q=35.0 size=     636kB time=00:00:06.06 bitrate= 859.0kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  100 fps= 11 q=34.0 size=     676kB time=00:00:06.28 bitrate= 881.8kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  104 fps= 11 q=33.0 size=     702kB time=00:00:07.07 bitrate= 812.8kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  114 fps= 11 q=34.0 size=     765kB time=00:00:07.07 bitrate= 885.7kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  117 fps= 11 q=33.0 size=     787kB time=00:00:07.26 bitrate= 887.7kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  117 fps= 10 q=33.0 size=     787kB time=00:00:08.03 bitrate= 802.8kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  129 fps= 11 q=33.0 size=     857kB time=00:00:08.07 bitrate= 869.1kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  138 fps= 11 q=34.0 size=     922kB time=00:00:08.07 bitrate= 935.1kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  140 fps= 11 q=33.0 size=     937kB time=00:00:08.58 bitrate= 894.1kbits/s    
    I/System.out: FFMpeg lib onProgressframe=  144 fps= 11 q=-1.0 Lsize=    1032kB time=00:00:08.96 bitrate= 943.0kbits/s    
    I/System.out: FFMpeg lib onProgressvideo:889kB audio:138kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.512610%
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] frame I:1     Avg QP:33.00  size: 21090
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] frame P:143   Avg QP:34.49  size:  6217
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] mb I  I16..4: 100.0%  0.0%  0.0%
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] mb P  I16..4: 10.3%  0.0%  0.0%  P16..4: 21.2%  0.0%  0.0%  0.0%  0.0%    skip:68.5%
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] final ratefactor: 34.56
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] coded y,uvDC,uvAC intra: 16.9% 5.8% 0.1% inter: 6.2% 0.9% 0.0%
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] i16 v,h,dc,p: 55% 30%  8%  7%
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] i8c dc,h,v,p: 55% 18% 24%  3%
    I/System.out: FFMpeg lib onProgress[libx264 @ 0xb5e08800] kb/s:842.72
    I/System.out: FFMpeg lib onSuccessWARNING: linker: /data/data/com.x.y/files/ffmpeg has text relocations. This is wasting memory and prevents security hardening. Please fix.
    I/System.out: ffmpeg version n2.4.2 Copyright (c) 2000-2014 the FFmpeg developers
    I/System.out:   built on Oct  7 2014 15:08:46 with gcc 4.8 (GCC)
    I/System.out:   configuration: --target-os=linux --cross-prefix=/home/sb/Source-Code/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/sb/Source-Code/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-fontconfig --enable-pthreads --disable-debug --disable-ffserver --enable-version3 --enable-hardcoded-tables --disable-ffplay --disable-ffprobe --enable-gpl --enable-yasm --disable-doc --disable-shared --enable-static --pkg-config=/home/sb/Source-Code/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/sb/Source-Code/ffmpeg-android/build/armeabi-v7a-neon --extra-cflags='-I/home/sb/Source-Code/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all -mfpu=neon' --extra-ldflags='-L/home/sb/Source-Code/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
    I/System.out:   libavutil      54.  7.100 / 54.  7.100
    I/System.out:   libavcodec     56.  1.100 / 56.  1.100
    I/System.out:   libavformat    56.  4.101 / 56.  4.101
    I/System.out:   libavdevice    56.  0.100 / 56.  0.100
    I/System.out:   libavfilter     5.  1.100 /  5.  1.100
    I/System.out:   libswscale      3.  0.100 /  3.  0.100
    I/System.out:   libswresample   1.  1.100 /  1.  1.100
    I/System.out:   libpostproc    53.  0.100 / 53.  0.100
    I/System.out: Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/IHH_y/147.mp4':
    I/System.out:   Metadata:
    I/System.out:     major_brand     : mp42
    I/System.out:     minor_version   : 0
    I/System.out:     compatible_brands: isommp42
    I/System.out:     creation_time   : 2016-06-23 20:00:50
    I/System.out:   Duration: 00:00:08.92, start: 0.000000, bitrate: 8966 kb/s
    I/System.out:     Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 8983 kb/s, 16.66 fps, 16.67 tbr, 90k tbn, 180k tbc (default)
    I/System.out:     Metadata:
    I/System.out:       rotate          : 90
    I/System.out:       creation_time   : 2016-06-23 20:00:50
    I/System.out:       handler_name    : VideoHandle
    I/System.out:     Side data:
    I/System.out:       displaymatrix: rotation of -90.00 degrees
    I/System.out:     Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 254 kb/s (default)
    I/System.out:     Metadata:
    I/System.out:       creation_time   : 2016-06-23 20:00:50
    I/System.out:       handler_name    : SoundHandle
    I/System.out: [libx264 @ 0xb5e08800] using cpu capabilities: none!
    I/System.out: [libx264 @ 0xb5e08800] profile Constrained Baseline, level 3.2
    I/System.out: [libx264 @ 0xb5e08800] 264 - core 142 - H.264/MPEG-4 AVC codec - Copyleft 2003-2014 - http://www.videolan.org/x264.html - options: cabac=0 ref=1 deblock=0:0:0 analyse=0:0 me=dia subme=0 psy=1 psy_rd=1.00:0.00 mixed_ref=0 me_range=16 chroma_me=1 trellis=0 8x8dct=0 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=0 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=0 weightp=0 keyint=250 keyint_min=16 scenecut=0 intra_refresh=0 rc=abr mbtree=0 bitrate=880 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=0
    I/System.out: Output #0, mp4, to '/storage/emulated/0/IHH_y/147upload.mp4':
    I/System.out:   Metadata:
    I/System.out:     major_brand     : mp42
    I/System.out:     minor_version   : 0
    I/System.out:     compatible_brands: isommp42
    I/System.out:     encoder         : Lavf56.4.101
    I/System.out:     Stream #0:0(eng): Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 1080x1080, q=-1--1, 880 kb/s, 16.67 fps, 12800 tbn, 16.67 tbc (default)
    I/System.out:     Metadata:
    I/System.out:       rotate          : 90
    I/System.out:       creation_time   : 2016-06-23 20:00:50
    I/System.out:       handler_name    : VideoHandle
    I/System.out:       encoder         : Lavc56.1.100 libx264
    I/System.out:     Stream #0:1(eng): Audio: aac ([64][0][0][0] / 0x0040), 48000 Hz, stereo, fltp, 128 kb/s (default)
    I/System.out:     Metadata:
    I/System.out:       creation_time   : 2016-06-23 20:00:50
    I/System.out:       handler_name    : SoundHandle
    I/System.out:       encoder         : Lavc56.1.100 aac
    I/System.out: Stream mapping:
    I/System.out:   Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
    I/System.out:   Stream #0:1 -> #0:1 (aac (native) -> aac (native))
    I/System.out: Press [q] to stop, [?] for help
    I/System.out: frame=    0 fps=0.0 q=0.0 size=       0kB time=00:00:00.96 bitrate=   0.4kbits/s    
    I/System.out: frame=    7 fps=6.8 q=0.0 size=       0kB time=00:00:01.05 bitrate=   0.4kbits/s    
    I/System.out: frame=   15 fps=9.7 q=35.0 size=      87kB time=00:00:01.07 bitrate= 660.5kbits/s    
    I/System.out: frame=   15 fps=7.3 q=35.0 size=      87kB time=00:00:01.88 bitrate= 376.7kbits/s    
    I/System.out: frame=   25 fps=9.6 q=35.0 size=     154kB time=00:00:02.05 bitrate= 613.4kbits/s    
    I/System.out: frame=   32 fps= 10 q=35.0 size=     199kB time=00:00:02.07 bitrate= 784.7kbits/s    
    I/System.out: frame=   32 fps=8.8 q=35.0 size=     199kB time=00:00:02.93 bitrate= 556.4kbits/s    
    I/System.out: frame=   42 fps= 10 q=35.0 size=     263kB time=00:00:03.06 bitrate= 705.2kbits/s    
    I/System.out: frame=   49 fps= 10 q=36.0 size=     328kB time=00:00:03.08 bitrate= 870.9kbits/s    
    I/System.out: frame=   50 fps=9.5 q=36.0 size=     341kB time=00:00:04.06 bitrate= 687.2kbits/s    
    I/System.out: frame=   59 fps= 10 q=36.0 size=     407kB time=00:00:04.06 bitrate= 821.2kbits/s    
    I/System.out: frame=   66 fps= 10 q=36.0 size=     462kB time=00:00:04.10 bitrate= 922.7kbits/s    
    I/System.out: frame=   66 fps=9.7 q=36.0 size=     462kB time=00:00:05.00 bitrate= 757.4kbits/s    
    I/System.out: frame=   77 fps= 10 q=35.0 size=     534kB time=00:00:05.06 bitrate= 864.0kbits/s    
    I/System.out: frame=   83 fps= 11 q=34.0 size=     566kB time=00:00:05.44 bitrate= 850.2kbits/s    
    I/System.out: frame=   89 fps= 11 q=34.0 size=     600kB time=00:00:06.06 bitrate= 810.6kbits/s    
    I/System.out: frame=   95 fps= 11 q=35.0 size=     636kB time=00:00:06.06 bitrate= 859.0kbits/s    
    I/System.out: frame=  100 fps= 11 q=34.0 size=     676kB time=00:00:06.28 bitrate= 881.8kbits/s    
    I/System.out: frame=  104 fps= 11 q=33.0 size=     702kB time=00:00:07.07 bitrate= 812.8kbits/s    
    I/System.out: frame=  114 fps= 11 q=34.0 size=     765kB time=00:00:07.07 bitrate= 885.7kbits/s    
    I/System.out: frame=  117 fps= 11 q=33.0 size=     787kB time=00:00:07.26 bitrate= 887.7kbits/s    
    I/System.out: frame=  117 fps= 10 q=33.0 size=     787kB time=00:00:08.03 bitrate= 802.8kbits/s    
    I/System.out: frame=  129 fps= 11 q=33.0 size=     857kB time=00:00:08.07 bitrate= 869.1kbits/s    
    I/System.out: frame=  138 fps= 11 q=34.0 size=     922kB time=00:00:08.07 bitrate= 935.1kbits/s    
    I/System.out: frame=  140 fps= 11 q=33.0 size=     937kB time=00:00:08.58 bitrate= 894.1kbits/s    
    I/System.out: frame=  144 fps= 11 q=-1.0 Lsize=    1032kB time=00:00:08.96 bitrate= 943.0kbits/s    
    I/System.out: video:889kB audio:138kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.512610%
    I/System.out: [libx264 @ 0xb5e08800] frame I:1     Avg QP:33.00  size: 21090
    I/System.out: [libx264 @ 0xb5e08800] frame P:143   Avg QP:34.49  size:  6217
    I/System.out: [libx264 @ 0xb5e08800] mb I  I16..4: 100.0%  0.0%  0.0%
    I/System.out: [libx264 @ 0xb5e08800] mb P  I16..4: 10.3%  0.0%  0.0%  P16..4: 21.2%  0.0%  0.0%  0.0%  0.0%    skip:68.5%
    I/System.out: [libx264 @ 0xb5e08800] final ratefactor: 34.56
    I/System.out: [libx264 @ 0xb5e08800] coded y,uvDC,uvAC intra: 16.9% 5.8% 0.1% inter: 6.2% 0.9% 0.0%
    I/System.out: [libx264 @ 0xb5e08800] i16 v,h,dc,p: 55% 30%  8%  7%

    As you can see from the log, the conversion fps is very low
    Need help to make it faster.

    Note : The source file is MP4 and output file is MP4 as well

  • 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