Recherche avancée

Médias (1)

Mot : - Tags -/publishing

Autres articles (84)

  • Diogene : création de masques spécifiques de formulaires d’édition de contenus

    26 octobre 2010, par

    Diogene est un des plugins ? SPIP activé par défaut (extension) lors de l’initialisation de MediaSPIP.
    A quoi sert ce plugin
    Création de masques de formulaires
    Le plugin Diogène permet de créer des masques de formulaires spécifiques par secteur sur les trois objets spécifiques SPIP que sont : les articles ; les rubriques ; les sites
    Il permet ainsi de définir en fonction d’un secteur particulier, un masque de formulaire par objet, ajoutant ou enlevant ainsi des champs afin de rendre le formulaire (...)

  • MediaSPIP version 0.1 Beta

    16 avril 2011, par

    MediaSPIP 0.1 beta est la première version de MediaSPIP décrétée comme "utilisable".
    Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
    Pour avoir une installation fonctionnelle, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
    Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)

  • 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 (8896)

  • Get total time/progress from multiple FFmpeg terminal commands

    24 septembre 2018, par kataroty

    I have a class that executes multiple FFmpeg commands in Android. The problem is that I have no idea how to get total time and then update the progress as the commands run.

    Since there are so many I am not even sure if it is possible.

    So hence my question : Is it possible to get total time/progress or at least estimated time/progress and then update it onProgress.

    And here is my class :

    public class AudioProcessor {

       private Context context;
       private FFmpeg ffmpeg;
       private AudioProcessorListener listener;

       private File micPcmFile;
       private File backgroundMp3File;

       private File pcmtowavTempFile;
       private File mp3towavTempFile;
       private File combinedwavTempFile;

       private File outputFile;
       private File volumeChangedTempFile;


       public AudioProcessor(Context context) {
           ffmpeg = FFmpeg.getInstance(context);
           this.context = context;
       }

       /**
        * Program main method. Starts running program
        * @throws Exception
        */
       public void process() throws Exception {
           if (!ffmpeg.isSupported()) {
               Log.e("AudioProcessor", "FFMPEG not supported! Cannot convert audio!");
               throw new Exception("FFMPeg has to be supported");
           }
           if (!checkIfAllFilesPresent()) {
               Log.e("AudioProcessor", "All files are not set yet. Please set file first");
               throw new Exception("Files are not set!");
           }
           listener.onStart();
           prepare();
           convertPCMToWav();
       }

       /**
        * Prepares program
        */
       private void prepare() {
           prepareTempFiles();
       }

       /**
        * Converts PCM to wav file. Automatically create new file.
        */
       private void convertPCMToWav() {
           System.out.println("AudioProcessor: Convert PCM TO Wav");
           //ffmpeg -f s16le -ar 44.1k -ac 2 -i file.pcm file.wav
           String[] cmd = { "-f" , "s16le", "-ar", "44.1k",  "-i", micPcmFile.toString(), pcmtowavTempFile.toString()};
           ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
               @Override
               public void onSuccess(String message) {
                   super.onSuccess(message);
                   convertMP3ToWav();
               }
               @Override
               public void onFailure(String message) {
                   super.onFailure(message);
                   onError(message);
               }
           });
       }

       /**
        * Converts mp3 file to wav file.
        * Automatically creates Wav file
        */
       private void convertMP3ToWav() {
           //ffmpeg -i file.mp3 file.wav
           String[] cmd = { "-i" , backgroundMp3File.toString(), mp3towavTempFile.toString() };
           ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
               @Override
               public void onSuccess(String message) {
                   super.onSuccess(message);
                   changeMicAudio();
               }
               @Override
               public void onFailure(String message) {
                   super.onFailure(message);
                   onError(message);
               }
           });
       }

       /**
        * Combines 2 wav files into one wav file. Overlays audio
        */
       private void combineWavs() {
           //ffmpeg -i C:\Users\VR1\Desktop\_mp3.wav -i C:\Users\VR1\Desktop\_pcm.wav -filter_complex amix=inputs=2:duration=first:dropout_transition=3 C:\Users\VR1\Desktop\out.wav

           String[] cmd = { "-i" , pcmtowavTempFile.toString(), "-i", volumeChangedTempFile.toString(), "-filter_complex", "amix=inputs=2:duration=first:dropout_transition=3", combinedwavTempFile.toString()};
           ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

               @Override
               public void onSuccess(String message) {
                   super.onSuccess(message);
                   encodeWavToAAC();
               }
               @Override
               public void onFailure(String message) {
                   super.onFailure(message);
                   onError(message);
               }
           });
       }

       private void changeMicAudio(){
           //ffmpeg -i input.wav -filter:a "volume=1.5" output.wav

           String[] cmdy = { "-i", mp3towavTempFile.toString(),  "-af", "volume=0.9", volumeChangedTempFile.toString()};
           ffmpeg.execute(cmdy, new ExecuteBinaryResponseHandler() {

               @Override
               public void onSuccess(String message) {
                   combineWavs();
                   super.onSuccess(message);
               }
               @Override
               public void onFailure(String message) {
                   super.onFailure(message);

               }
           });
       }


       /**
        * Do something on error. Releases program data (deletes files)
        * @param message
        */
       private void onError(String message) {
           release();
           if (listener != null) {
               listener.onError(message);
           }
       }
       /**
        * Encode to AAC
        */
       private void encodeWavToAAC() {
           //ffmpeg -i file.wav -c:a aac -b:a 128k -f adts output.m4a
           String[] cmd = { "-i" , combinedwavTempFile.toString(), "-c:a", "aac", "-b:a", "128k", "-f", "adts", outputFile.toString()};
           ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

               @Override
               public void onSuccess(String message) {
                   super.onSuccess(message);
                   if (listener != null) {
                       listener.onSuccess(outputFile);
                   }
                   release();
               }
               @Override
               public void onFailure(String message) {
                   super.onFailure(message);
                   onError(message);
               }
           });
       }

       /**
        * Uninitializes class
        */
       private void release() {
           if (listener != null) {
               listener.onFinish();
           }
           destroyTempFiles();
       }

       /**
        * Prepares temp required files by deleteing them if they exsist.
        * Files cannot exists before ffmpeg actions. FFMpeg automatically creates those files.
        */
       private void prepareTempFiles() {
           pcmtowavTempFile = new File(context.getFilesDir()+ Common.TEMP_LOCAL_DIR + "/" + "_pcm.wav");
           mp3towavTempFile = new File(context.getFilesDir()+ Common.TEMP_LOCAL_DIR + "/" + "_mp3.wav");
           combinedwavTempFile = new File(context.getFilesDir()+ Common.TEMP_LOCAL_DIR + "/" + "_combined.wav");
           volumeChangedTempFile = new File(context.getFilesDir()+ Common.TEMP_LOCAL_DIR + "/" + "_volumeChanged.wav");

           if (pcmtowavTempFile.exists()) {
               destroyTempFiles();
           }
       }

       /**
        * Destroys temp required files
        */
       private void destroyTempFiles() {
           pcmtowavTempFile.delete();
           mp3towavTempFile.delete();
           combinedwavTempFile.delete();
           volumeChangedTempFile.delete();
       }

       /**
        * Checks if all files are set, so we can process them
        * @return - all files ready
        */
       private boolean checkIfAllFilesPresent() {
           if(micPcmFile == null || backgroundMp3File == null || outputFile == null) {
               Log.e("AudioProcessor", "All files are not set! Set all files!");
               return false;
           }
           return true;
       }

       public void setOutputFile(File outputFile) {
           this.outputFile = outputFile;
       }

       public void setListener(AudioProcessorListener listener) {
           this.listener = listener;
       }

       public void setMicPcmFile(File micPcmFile) {


           this.micPcmFile = micPcmFile;
       }

       public void setBackgroundMp3File(File backgroundMp3File) {
           this.backgroundMp3File = backgroundMp3File;
       }


       public interface AudioProcessorListener {
           void onStart();
           void onSuccess(File output);
           void onError(String message);
           void onFinish();
       }
    }

    Since the whole thing is taking a long time, if someone can recommend something that would take less time, then it would also help. A 2 minute video usually takes like 50s.

  • FFMpeg Error initializing filter 'drawtext'

    4 octobre 2018, par user3884677

    I try to draw a text on a video using FFMpeg but I have the error :

    ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
         built with gcc 4.8 (GCC)
         configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --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/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
         libavutil      55. 17.103 / 55. 17.103
         libavcodec     57. 24.102 / 57. 24.102
         libavformat    57. 25.100 / 57. 25.100
         libavdevice    57.  0.101 / 57.  0.101
         libavfilter     6. 31.100 /  6. 31.100
         libswscale      4.  0.100 /  4.  0.100
         libswresample   2.  0.101 /  2.  0.101
         libpostproc    54.  0.100 / 54.  0.100
       Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/mediapicker/videos/eb89fc80-ebcc-4848-a95c-6983b2c5b09d.mp4':
         Metadata:
           major_brand     : 3gp4
           minor_version   : 0
           compatible_brands: isom3gp4
           creation_time   : 2018-10-03 15:46:13
           com.android.version: 6.0
         Duration: 00:00:04.78, start: 0.000000, bitrate: 6167 kb/s
           Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 6122 kb/s, SAR 1:1 DAR 16:9, 19.95 fps, 19.92 tbr, 90k tbn, 180k tbc (default)
           Metadata:
             rotate          : 90
             creation_time   : 2018-10-03 15:46:13
             handler_name    : VideoHandle
           Side data:
             displaymatrix: rotation of -90.00 degrees
           Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
           Metadata:
             creation_time   : 2018-10-03 15:46:13
             handler_name    : SoundHandle
       Fontconfig error: Cannot load default config file
       [Parsed_drawtext_0 @ 0xb561e040] impossible to init fontconfig
       [AVFilterGraph @ 0xb5609140] Error initializing filter 'drawtext' with args '"fontfile=/usr/share/fonts/TTF/Vera.ttf: text=Test Heading"'
       Error opening filters!

    This is my code :

    private GLSurfaceView mGLView;
       private Button chooseVideo;
       private Button valideButton;
       private String SelectedVideo;
       private VideoView videoView;

       @Override
       protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

           chooseVideo= findViewById(R.id.choose_video);
           chooseVideo.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {

                   new VideoPicker.Builder(MainActivity.this)
                           .mode(VideoPicker.Mode.GALLERY)
                           .directory(VideoPicker.Directory.DEFAULT)
                           .extension(VideoPicker.Extension.MP4)
                           .enableDebuggingMode(true)
                           .build();
               }
           });
           videoView = (VideoView) findViewById(R.id.videoView);
           final FFmpeg ffmpeg = FFmpeg.getInstance(MainActivity.this);
           try {
               ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
                   @Override
                   public void onStart() {
                   }

                   @Override
                   public void onFailure() {
                   }

                   @Override
                   public void onSuccess() {
                   }

                   @Override
                   public void onFinish() {
                   }
               });
           } catch (FFmpegNotSupportedException e) {
           }
           valideButton= findViewById(R.id.valide);
           valideButton.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {
                   try {
                       String[] cmd = {"-y" , "-i", SelectedVideo,
                               "-vf", "drawtext=\"fontfile=/usr/share/fonts/TTF/Vera.ttf: text=\'Test Heading\'\"",
                               "-acodec",
                               "copy",                       Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_MOVIES+"/output.mp4"};

                       ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

                           @Override
                           public void onStart() {
                           }

                           @Override
                           public void onProgress(String message) {
                           }

                           @Override
                           public void onFailure(String message) {
                               Log.i("ffmpegFailure",message);
                           }

                           @Override
                           public void onSuccess(String message) {
                               Log.i("ffmpegExecute",message);
                               videoView.setVideoPath(Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_MOVIES+"/output.mp4");
                               videoView.requestFocus();
                               videoView.start();
                           }
                           @Override
                           public void onFinish() {
                           }
                       });
                   } catch (FFmpegCommandAlreadyRunningException e) {
                       // Handle if FFmpeg is already running
                   }
               }
           });
    }

    My problem is that I can not use the option ’drawtext’. When I don’t use the option ’drawtext’ it’s work. I do not know which syntax I should use.
    I tried a lot of possibilities without success.
    I use this library : http://writingminds.github.io/ffmpeg-android-java/

    Can you help me ?

  • FFMpeg Error initializing filter 'drawtext' on Android project

    14 janvier 2019, par user3884677

    I try to draw a text on a video using FFMpeg but I have the error :

    ffmpeg version n3.0.1 Copyright (c) 2000-2016 the FFmpeg developers
         built with gcc 4.8 (GCC)
         configuration: --target-os=linux --cross-prefix=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/bin/arm-linux-androideabi- --arch=arm --cpu=cortex-a8 --enable-runtime-cpudetect --sysroot=/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/sysroot --enable-pic --enable-libx264 --enable-libass --enable-libfreetype --enable-libfribidi --enable-libmp3lame --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/vagrant/SourceCode/ffmpeg-android/ffmpeg-pkg-config --prefix=/home/vagrant/SourceCode/ffmpeg-android/build/armeabi-v7a --extra-cflags='-I/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/include -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fstack-protector-all' --extra-ldflags='-L/home/vagrant/SourceCode/ffmpeg-android/toolchain-android/lib -Wl,-z,relro -Wl,-z,now -pie' --extra-libs='-lpng -lexpat -lm' --extra-cxxflags=
         libavutil      55. 17.103 / 55. 17.103
         libavcodec     57. 24.102 / 57. 24.102
         libavformat    57. 25.100 / 57. 25.100
         libavdevice    57.  0.101 / 57.  0.101
         libavfilter     6. 31.100 /  6. 31.100
         libswscale      4.  0.100 /  4.  0.100
         libswresample   2.  0.101 /  2.  0.101
         libpostproc    54.  0.100 / 54.  0.100
       Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/storage/emulated/0/mediapicker/videos/eb89fc80-ebcc-4848-a95c-6983b2c5b09d.mp4':
         Metadata:
           major_brand     : 3gp4
           minor_version   : 0
           compatible_brands: isom3gp4
           creation_time   : 2018-10-03 15:46:13
           com.android.version: 6.0
         Duration: 00:00:04.78, start: 0.000000, bitrate: 6167 kb/s
           Stream #0:0(eng): Video: h264 (Baseline) (avc1 / 0x31637661), yuv420p, 1280x720, 6122 kb/s, SAR 1:1 DAR 16:9, 19.95 fps, 19.92 tbr, 90k tbn, 180k tbc (default)
           Metadata:
             rotate          : 90
             creation_time   : 2018-10-03 15:46:13
             handler_name    : VideoHandle
           Side data:
             displaymatrix: rotation of -90.00 degrees
           Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default)
           Metadata:
             creation_time   : 2018-10-03 15:46:13
             handler_name    : SoundHandle
       Fontconfig error: Cannot load default config file
       [Parsed_drawtext_0 @ 0xb561e040] impossible to init fontconfig
       [AVFilterGraph @ 0xb5609140] Error initializing filter 'drawtext' with args '"fontfile=/usr/share/fonts/TTF/Vera.ttf: text=Test Heading"'
       Error opening filters!

    This is my code :

    private GLSurfaceView mGLView;
       private Button chooseVideo;
       private Button valideButton;
       private String SelectedVideo;
       private VideoView videoView;

       @Override
       protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

           chooseVideo= findViewById(R.id.choose_video);
           chooseVideo.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {

                   new VideoPicker.Builder(MainActivity.this)
                           .mode(VideoPicker.Mode.GALLERY)
                           .directory(VideoPicker.Directory.DEFAULT)
                           .extension(VideoPicker.Extension.MP4)
                           .enableDebuggingMode(true)
                           .build();
               }
           });
           videoView = (VideoView) findViewById(R.id.videoView);
           final FFmpeg ffmpeg = FFmpeg.getInstance(MainActivity.this);
           try {
               ffmpeg.loadBinary(new LoadBinaryResponseHandler() {
                   @Override
                   public void onStart() {
                   }

                   @Override
                   public void onFailure() {
                   }

                   @Override
                   public void onSuccess() {
                   }

                   @Override
                   public void onFinish() {
                   }
               });
           } catch (FFmpegNotSupportedException e) {
           }
           valideButton= findViewById(R.id.valide);
           valideButton.setOnClickListener(new View.OnClickListener() {
               public void onClick(View v) {
                   try {
                       String[] cmd = {"-y" , "-i", SelectedVideo,
                               "-vf", "drawtext=\"fontfile=/usr/share/fonts/TTF/Vera.ttf: text=\'Test Heading\'\"",
                               "-acodec",
                               "copy",                       Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_MOVIES+"/output.mp4"};

                       ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {

                           @Override
                           public void onStart() {
                           }

                           @Override
                           public void onProgress(String message) {
                           }

                           @Override
                           public void onFailure(String message) {
                               Log.i("ffmpegFailure",message);
                           }

                           @Override
                           public void onSuccess(String message) {
                               Log.i("ffmpegExecute",message);
                               videoView.setVideoPath(Environment.getExternalStorageDirectory()+"/"+Environment.DIRECTORY_MOVIES+"/output.mp4");
                               videoView.requestFocus();
                               videoView.start();
                           }
                           @Override
                           public void onFinish() {
                           }
                       });
                   } catch (FFmpegCommandAlreadyRunningException e) {
                       // Handle if FFmpeg is already running
                   }
               }
           });
    }

    My problem is that I can not use the option ’drawtext’. When I don’t use the option ’drawtext’ it’s work. I do not know which syntax I should use.
    I tried a lot of possibilities without success.
    I use this library : http://writingminds.github.io/ffmpeg-android-java/

    Can you help me ?