Recherche avancée

Médias (0)

Mot : - Tags -/formulaire

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (84)

  • Gestion de la ferme

    2 mars 2010, par

    La ferme est gérée dans son ensemble par des "super admins".
    Certains réglages peuvent être fais afin de réguler les besoins des différents canaux.
    Dans un premier temps il utilise le plugin "Gestion de mutualisation"

  • La gestion des forums

    3 novembre 2011, par

    Si les forums sont activés sur le site, les administrateurs ont la possibilité de les gérer depuis l’interface d’administration ou depuis l’article même dans le bloc de modification de l’article qui se trouve dans la navigation de la page.
    Accès à l’interface de modération des messages
    Lorsqu’il est identifié sur le site, l’administrateur peut procéder de deux manières pour gérer les forums.
    S’il souhaite modifier (modérer, déclarer comme SPAM un message) les forums d’un article particulier, il a à sa (...)

  • Gestion des droits de création et d’édition des objets

    8 février 2011, par

    Par défaut, beaucoup de fonctionnalités sont limitées aux administrateurs mais restent configurables indépendamment pour modifier leur statut minimal d’utilisation notamment : la rédaction de contenus sur le site modifiables dans la gestion des templates de formulaires ; l’ajout de notes aux articles ; l’ajout de légendes et d’annotations sur les images ;

Sur d’autres sites (9433)

  • ffmpeg Get time of frames from trimmed video

    17 novembre 2017, par TheOtherguyz4kj

    I am using FFmpeg in my application to extract frames from a video, the frames will be added to a trim video view where you get an illustration as to what is happening in the video at a specific time within the video. So each frame needs to represent some time within the video.

    I dont quite understand how FFmpeg is producing the frames. Here is my code :

    "-i",
    videoCroppedFile.getAbsolutePath(),
    "-vf",
    "fps=1/" + frameSeperation,
    mediaStorageDir.getAbsolutePath() +
    "/%d.jpg"

    My app allows you to record a video at a max length of 20s. The number of frames extracted from the video depnds on how long the captured video is. frameSeperation is calculated doing the below code.

    String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
       long videoLength = Long.parseLong(time) / 1000;
       double frameSeperationDouble = (double) videoLength;
       // Divide by 11 because there is a maximum of 11 frames on trim video view
       frameSeperationDouble /= 11;
       frameSeperationDouble = Math.ceil(frameSeperationDouble);
       int frameSeperation = (int) frameSeperationDouble;

    Maybe the above logic is very bad, if there is a better way please can somebody tell me.

    Anyway I run the code and below are a few test cases :

    • A video captured with a length of 6 seconds has 7 frames.
    • A video captured with a length of 2 seconds has 3 frames.
    • A video captured with a length of 10 seconds has 12 frames.
    • A video captured with a length of 15 seconds has 9 frames.
    • A video captured with a length of 20 seconds has 11 frames.

    There is no consistency, and I find it hard to put timestamps against each frame because of this. I feel like my logic is wrong or im not understanding. Any help is much appreciated

    Update 1

    So I did what you said in comments :

    final FFmpeg ffmpeg = FFmpeg.getInstance(mContext);
           final File mediaStorageDir = new File(Environment.getExternalStorageDirectory()
                   + "/Android/data/"
                   + mContext.getPackageName()
                   + "/vFrames");

       if (!mediaStorageDir.exists()){
           mediaStorageDir.mkdirs();
       }

       MediaMetadataRetriever retriever = new MediaMetadataRetriever();
       retriever.setDataSource(mContext, Uri.fromFile(videoCroppedFile));
       String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
       long videoLength = Long.parseLong(time) / 1000;
       double frameSeperationDouble = (double) videoLength / 8;

       retriever.release();

       final String cmd[] = {

               "-i",
               videoCroppedFile.getAbsolutePath(),
               "-vf",
               "fps=1/" + frameSeperationDouble,
               "-vframes," + 8,
               mediaStorageDir.getAbsolutePath() +
               "/%d.jpg"
       };

    I also tried "-vframes=" + 8 at the same point where I put vFrames in cmd. It doesnt seem to work at all now no frames are being extracted from the video

  • MediaMetadataRetriever setDataSource failed : status = 0xFFFFFFED

    10 octobre 2019, par darja

    I need to fetch frames from video located in the web. That’s how I do this :

    class PlayerWrapper {
       private static final MediaMetadataRetriever mMediaMetadataRetriever = new MediaMetadataRetriever();

       …

       public void initPlayback(final Context context, final VideoSurfaceView videoSurface, final String url) {
           new Thread(new Runnable() {
               @Override
               public void run() {
                   …

                   try {
                       mMediaMetadataRetriever.setDataSource(url, new HashMap());
                   } catch (Exception e) {
                       DPLog(e);
                   }

               }
           }).start();
       }

       public Bitmap getFrameAt(int positionMillis) {
           if (mMediaMetadataRetriever != null) {
               DPLog.d("Creating frame for position [%s]", positionMillis);
               try {
                   return mMediaMetadataRetriever.getFrameAtTime(positionMillis * 1000);
               } catch (Exception e) {
                   …
                   return null;
               }
           } else {
               return null;
           }
       }
    }

    This works fine on several devices with Android 4.4, 5 and 6. But on one device with Android 4.1.2 setDataSource function fails with following stack trace :

    java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFED
          at android.media.MediaMetadataRetriever._setDataSource(MediaMetadataRetriever.java)
          at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:99)
          at co.unreel.videoapp.playback.UnreelPlayer$3.run(UnreelPlayer.java:138)
          at java.lang.Thread.run(Thread.java:856)

    Also tried this code on emulator, got almost the same but with status 0x80000000

    Url is got from YouTube API, looks like this :

    https://r2---sn-n3toxu-axqe.googlevideo.com/videoplayback?gcr=ru&sver=3&mm=31&mn=sn-n3toxu-axqe&key=yt6&signature=D1CE7B8615F3D96A58A9D2679057D676E7777E05.5A318AD8C5F48FCED2D1A9149348CD269F466FA9&mt=1456173450&pl=24&mv=m&ms=au&lmt=1455616987173757&itag=22&requiressl=yes&ip=188.242.217.203&source=youtube&dur=848.248&id=o-ABIn_CbRwqIO6qpvlaWe_ekyTZPLVd0w_eM80awd6uRQ&fexp=9408087%2C9416126%2C9419451%2C9420452%2C9421340%2C9422596%2C9423661%2C9423662%2C9425078%2C9425963%2C9427767%2C9427801%2C9428013%2C9428432%2C9428660%2C9429602&mime=video%2Fmp4&upn=P5qxGGbPoc0&sparams=dur%2Cgcr%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&expire=1456195127&initcwndbps=3140000&ratebypass=yes&ipbits=0

    Permissions :

    Why this can happen and what to do ?

    I also tried to use FFmpegMediaMetadataRetriever with the same logic, but it doesn’t work at all, setDataSource causes exceptions with status 0xFFFFFFFF on all devices. As I found on SO, that means that url is invalid, but it is ok and played by MediaPlayer without any issues. Also I found that ffmpeg has issues with urls longer than 1024, but that’s not my case too.

    May be there are another way to get frames from video ?

  • MediaMetadataRetriever setDataSource failed : status = 0xFFFFFFED

    22 février 2016, par darja

    I need to fetch frames from video located in the web. That’s how I do this :

    class PlayerWrapper {
       private static final MediaMetadataRetriever mMediaMetadataRetriever = new MediaMetadataRetriever();

       …

       public void initPlayback(final Context context, final VideoSurfaceView videoSurface, final String url) {
           new Thread(new Runnable() {
               @Override
               public void run() {
                   …

                   try {
                       mMediaMetadataRetriever.setDataSource(url, new HashMap());
                   } catch (Exception e) {
                       DPLog(e);
                   }

               }
           }).start();
       }

       public Bitmap getFrameAt(int positionMillis) {
           if (mMediaMetadataRetriever != null) {
               DPLog.d("Creating frame for position [%s]", positionMillis);
               try {
                   return mMediaMetadataRetriever.getFrameAtTime(positionMillis * 1000);
               } catch (Exception e) {
                   …
                   return null;
               }
           } else {
               return null;
           }
       }
    }

    This works fine on several devices with Android 4.4, 5 and 6. But on one device with Android 4.1.2 setDataSource function fails with following stack trace :

    java.lang.RuntimeException: setDataSource failed: status = 0xFFFFFFED
          at android.media.MediaMetadataRetriever._setDataSource(MediaMetadataRetriever.java)
          at android.media.MediaMetadataRetriever.setDataSource(MediaMetadataRetriever.java:99)
          at co.unreel.videoapp.playback.UnreelPlayer$3.run(UnreelPlayer.java:138)
          at java.lang.Thread.run(Thread.java:856)

    Also tried this code on emulator, got almost the same but with status 0x80000000

    Url is got from YouTube API, looks like this :

    https://r2---sn-n3toxu-axqe.googlevideo.com/videoplayback?gcr=ru&sver=3&mm=31&mn=sn-n3toxu-axqe&key=yt6&signature=D1CE7B8615F3D96A58A9D2679057D676E7777E05.5A318AD8C5F48FCED2D1A9149348CD269F466FA9&mt=1456173450&pl=24&mv=m&ms=au&lmt=1455616987173757&itag=22&requiressl=yes&ip=188.242.217.203&source=youtube&dur=848.248&id=o-ABIn_CbRwqIO6qpvlaWe_ekyTZPLVd0w_eM80awd6uRQ&fexp=9408087%2C9416126%2C9419451%2C9420452%2C9421340%2C9422596%2C9423661%2C9423662%2C9425078%2C9425963%2C9427767%2C9427801%2C9428013%2C9428432%2C9428660%2C9429602&mime=video%2Fmp4&upn=P5qxGGbPoc0&sparams=dur%2Cgcr%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cupn%2Cexpire&expire=1456195127&initcwndbps=3140000&ratebypass=yes&ipbits=0

    Permissions :

    Why this can happen and what to do ?

    I also tried to use FFmpegMediaMetadataRetriever with the same logic, but it doesn’t work at all, setDataSource causes exceptions with status 0xFFFFFFFF on all devices. As I found on SO, that means that url is invalid, but it is ok and played by MediaPlayer without any issues. Also I found that ffmpeg has issues with urls longer than 1024, but that’s not my case too.

    May be there are another way to get frames from video ?