Recherche avancée

Médias (1)

Mot : - Tags -/Christian Nold

Autres articles (71)

  • Le profil des utilisateurs

    12 avril 2011, par

    Chaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
    L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)

  • XMP PHP

    13 mai 2011, par

    Dixit Wikipedia, XMP signifie :
    Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
    Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
    XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)

  • Les tâches Cron régulières de la ferme

    1er décembre 2010, par

    La gestion de la ferme passe par l’exécution à intervalle régulier de plusieurs tâches répétitives dites Cron.
    Le super Cron (gestion_mutu_super_cron)
    Cette tâche, planifiée chaque minute, a pour simple effet d’appeler le Cron de l’ensemble des instances de la mutualisation régulièrement. Couplée avec un Cron système sur le site central de la mutualisation, cela permet de simplement générer des visites régulières sur les différents sites et éviter que les tâches des sites peu visités soient trop (...)

Sur d’autres sites (7820)

  • Convert Audio Files using FFMPEG in android

    25 avril 2018, par Venkat Maddy

    I developing android application, Where I’ve asked to record the calls and convert them to WAVE(.wav) format and send to server.

    I am able to successfully record and save the audio in my mobile. The recorded file mime type is 3gpp, now I want to convert this 3gpp file to wav. I tried using FFMPEG but unable to convert it. I am posting my code here, Any help would be grateful.

    While Converting the recorded file from aac to wav, I’m getting below error

    Exception while trying to run: [Ljava.lang.String;@64075a0
       java.io.IOException: Cannot run program "/data/user/0/com.sms.example.example/files/ffmpeg": error=2, No such file or directory
           at java.lang.ProcessBuilder.start(ProcessBuilder.java:983)
           at java.lang.Runtime.exec(Runtime.java:691)
           at java.lang.Runtime.exec(Runtime.java:559)
           at com.github.hiteshsondhi88.libffmpeg.ShellCommand.run(ShellCommand.java:10)
           at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:38)
           at com.github.hiteshsondhi88.libffmpeg.FFmpegExecuteAsyncTask.doInBackground(FFmpegExecuteAsyncTask.java:10)
           at android.os.AsyncTask$2.call(AsyncTask.java:305)
           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
           at java.lang.Thread.run(Thread.java:761)
        Caused by: java.io.IOException: error=2, No such file or directory
           at java.lang.UNIXProcess.forkAndExec(Native Method)
           at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
           at java.lang.ProcessImpl.start(ProcessImpl.java:128)
           at java.lang.ProcessBuilder.start(ProcessBuilder.java:964)
    </init>

    Recorder Service

    public class CallService extends Service {

       //util object creation
       NetworkUtils networkUtils;
       SharedPref sharedPref;

       MediaRecorder recorder;
       File audiofile;
       String name, phonenumber;
       String audio_format;
       public String Audio_Type;
       int audioSource;
       Context context;
       private Handler handler;
       Timer timer;
       Boolean offHook = false, ringing = false;
       Toast toast;
       Boolean isOffHook = false;
       private boolean recordstarted = false;

       private static final String ACTION_IN = "android.intent.action.PHONE_STATE";
       private static final String ACTION_OUT = "android.intent.action.NEW_OUTGOING_CALL";
       private CallBr br_call;

       public String file_name="", recordedFileName="",uploadedFileName="", base64_file="", statusMessage="";
       public int statusCode, file_size=0, delay = 1000,period = 5000;
       public FFmpeg fFmpeg;


       @Override
       public IBinder onBind(Intent arg0) {
           // TODO Auto-generated method stub
           return null;
       }

       @Override
       public void onDestroy() {
           Log.d("service", "destroy");

           super.onDestroy();
       }

       @Override
       public int onStartCommand(Intent intent, int flags, int startId) {

           sharedPref = new SharedPref(this);
           networkUtils = new NetworkUtils(this);

           final IntentFilter filter = new IntentFilter();
           filter.addAction(ACTION_OUT);
           filter.addAction(ACTION_IN);
           this.br_call = new CallBr();
           this.registerReceiver(this.br_call, filter);

           fFmpeg = FFmpeg.getInstance(CallService.this);

           Timer task = new Timer();
           task.scheduleAtFixedRate(new TimerTask() {
               @Override
               public void run() {

                   if (networkUtils.checkConnection()){

                   }else{
          //                    Toast.makeText(CallService.this, getResources().getString(R.string.no_connection), Toast.LENGTH_SHORT).show();
                   }

               }
           }, delay, period);




           // if(terminate != null) {
           // stopSelf();
           // }
           return START_STICKY;
       }

       public class CallBr extends BroadcastReceiver {
           Bundle bundle;
           String state;
           String inCall, outCall;
           public boolean wasRinging = false;
           public File sampleDir;

           @Override
           public void onReceive(Context context, Intent intent) {


               if (intent.getAction().equals(ACTION_IN)) {
                   if ((bundle = intent.getExtras()) != null) {
                       state = bundle.getString(TelephonyManager.EXTRA_STATE);
                       if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
                           inCall = bundle.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                           wasRinging = true;
                           Toast.makeText(context, "IN : " + inCall, Toast.LENGTH_LONG).show();
                       } else if (state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
                           if (wasRinging == true) {

                               Toast.makeText(context, "ANSWERED", Toast.LENGTH_LONG).show();

                               String out = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss").format(new Date());
                               sampleDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "/OfficeRecordings/");
                               if (!sampleDir.exists()) {
                                   sampleDir.mkdirs();
                               }


                               Log.d("TService", "onReceive: "+sampleDir);
                               file_name = "Incoming";
                               String path = Environment.getExternalStorageDirectory().getAbsolutePath();
       //                            try {
       //                                audiofile =     File.createTempFile(file_name, ".wav", sampleDir);
       //                                recordedFileName =  sampleDir + String.valueOf(System.currentTimeMillis() + ".wav");
       //
       //                            } catch (IOException e) {
       //                                e.printStackTrace();
       //                            }
       //                            recordedFileName =  sampleDir+"_"+ file_name +String.valueOf(System.currentTimeMillis() + ".wav");
                               uploadedFileName = sharedPref.getStringValue("userId")+"_"+sharedPref.getStringValue("mobile_number_prefs")+"_" +file_name +String.valueOf(System.currentTimeMillis()+ ".aac");
                               recordedFileName =  sampleDir+"/"+uploadedFileName;

                               recorder = new MediaRecorder();
                               //                      recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
                               //                        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

                               recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                               recorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
                               recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);


                              // recorder.setOutputFile(audiofile.getAbsolutePath());
                               recorder.setOutputFile(recordedFileName);
                               try {
                                   recorder.prepare();
                               } catch (IllegalStateException e) {
                                   e.printStackTrace();
                               } catch (IOException e) {
                                   e.printStackTrace();
                               }
                               recorder.start();
                               recordstarted = true;
                           }
                       } else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
                           wasRinging = false;
                           Toast.makeText(context, "REJECT || DISCO", Toast.LENGTH_LONG).show();
                           if (recordstarted) {
                               recorder.stop();
                               recordstarted = false;

                               if (recordedFileName.isEmpty()){

                               }else{
                                   convertFileToBase64(context);
                               }
                           }
                       }
                   }
               } else if (intent.getAction().equals(ACTION_OUT)) {
                   if ((bundle = intent.getExtras()) != null) {
                       outCall = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
                       Toast.makeText(context, "OUT : " + outCall, Toast.LENGTH_LONG).show();

                       sampleDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "/OfficeRecordings/");
                       if (!sampleDir.exists()) {
                           sampleDir.mkdirs();
                       }


                       Log.d("TService", "onReceive: "+sampleDir);
                       file_name = "Outgoing";
                       String path = Environment.getExternalStorageDirectory().getAbsolutePath();
                       uploadedFileName = sharedPref.getStringValue("userId")+"_"+sharedPref.getStringValue("mobile_number_prefs")+"_" +file_name +String.valueOf(System.currentTimeMillis() + ".amr");
                       recordedFileName =  sampleDir+"/"+uploadedFileName;
       //                    try {
       //                        audiofile = File.createTempFile(file_name, ".wav", sampleDir);
       //                        recordedFileName = audiofile.getName();
       //
       //                    } catch (IOException e) {
       //                        e.printStackTrace();
       //                    }

                       recorder = new MediaRecorder();
                       //                      recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
                       //                        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

                       recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                       recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
                       recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
                       recorder.setOutputFile(audiofile.getAbsolutePath());
                       try {
                           recorder.prepare();
                       } catch (IllegalStateException e) {
                           e.printStackTrace();
                       } catch (IOException e) {
                           e.printStackTrace();
                       }
                       recorder.start();
                       recordstarted = true;

                       if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
                           wasRinging = false;
                           Toast.makeText(context, "REJECT || DISCO", Toast.LENGTH_LONG).show();
                           if (recordstarted) {
                               recorder.stop();
                               recordstarted = false;

                               if (recordedFileName.isEmpty()){

                               }else{

                                   convertFileToBase64(context);
                               }
                           }
                       }

                   }
               }

              // LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent("callRecord"));
           }

           public void convertFileToBase64(Context context){

               File uploadedFile = new File(recordedFileName);

               Log.d("CallService", "convertFileToBase64: "+uploadedFile);

               String[] cmd = new String[4];
               cmd[0] = "ffmpeg ";
               cmd[1] = "-i ";
               cmd[2] = recordedFileName+" ";
               cmd[3] = " "+sampleDir+"/"+"sampleAudio.wav";

               execFFmpegBinary(cmd);

               file_size = Integer.parseInt(String.valueOf(uploadedFile.length()/1024));
               Log.d("CallService", "onReceive: "+file_size);

               byte[] byteArray = new byte[1024*11];

               ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

               // File uploadedFile = new File(sampleDir+"/"+recordedFileName);

               Uri path = Uri.fromFile(uploadedFile);
               //  Uri path = Uri.fromFile(uploadedFile);


               Log.d("CallService", "convertFileToBase64: "+path);

               try {
                   InputStream inputStream = context.getContentResolver().openInputStream(path);

                   byte[] b = new byte[1024 * 11];
                   int bytesRead = 0;

                   while ((bytesRead = inputStream.read(b)) != -1) {
                       byteArrayOutputStream.write(b, 0, bytesRead);
                   }


                   byteArray = byteArrayOutputStream.toByteArray();

                   Log.e("Byte array", ">" + byteArray);

               } catch (IOException e) {
                   e.printStackTrace();
               }

               base64_file = Base64.encodeToString(byteArray, Base64.DEFAULT);

               Log.d("CallRecorder", "base64File: "+base64_file);
               if (!(base64_file.isEmpty())){
                   Log.d("CallService", "convertFileToBase64: base64 not empty");

                   if (networkUtils.checkConnection()){
                       uploadRecordedFileToServer();
                   }else{
                       saveFileToLocalDB();
                       Toast.makeText(context, getString(R.string.no_connection), Toast.LENGTH_SHORT).show();
                   }
               }

           }

           private void execFFmpegBinary(final String[] command) {
               try {
                   fFmpeg.execute(command, new ExecuteBinaryResponseHandler() {
                       @Override
                       public void onFailure(String s) {
                           Log.d("CallService", "onFailure: "+s);
                           Toast.makeText(CallService.this, "Failed to convert", Toast.LENGTH_SHORT).show();
                       }

                       @Override
                       public void onSuccess(String s) {
                           Log.d("CallService", "onSuccess: "+s);
                       }

                       @Override
                       public void onProgress(String s) {
                           Log.d("CallService", "Started command : ffmpeg "+command);
                           Log.d("CallService", "progress : "+s);
                        //  progressDialog.setMessage("Processing\n"+s);
                       }

                       @Override
                       public void onStart() {

                           Log.d("CallService", "Started command : ffmpeg " + command);
       //                        progressDialog.setMessage("Processing...");
       //                        progressDialog.show();
                       }

                       @Override
                       public void onFinish() {
                           Log.d("CallService", "Finished command : ffmpeg "+command);
                         //  progressDialog.dismiss();
                       }
                   });
               } catch (FFmpegCommandAlreadyRunningException e) {
                   // do nothing for now
               }
           }

    Amy help would be really very grateful... Thanks in advance !!!

  • How to keep transparency when scale webm file with ffmpeg

    5 octobre 2022, par Sonia Kidman

    I'm using ffmpeg to scale my WEBM file, by using below command : &#xA;ffmpeg -i in.webm -c:v libvpx -vf scale=100:100 out.webm&#xA;The output has correct resolution as I expected but the problem is transparency become black background.

    &#xA;&#xA;

    Could someone give me a solution for this.

    &#xA;&#xA;

    Thank you so much.

    &#xA;&#xA;

    Below is the log of the operation :

    &#xA;&#xA;

    ffmpeg version 3.4 Copyright (c) 2000-2017 the FFmpeg developers&#xA;  built with gcc 7.2.0 (GCC)&#xA;  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-bzlib --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-cuda --enable-cuvid --enable-d3d11va --enable-nvenc --enable-dxva2 --enable-avisynth --enable-libmfx&#xA;  libavutil      55. 78.100 / 55. 78.100&#xA;  libavcodec     57.107.100 / 57.107.100&#xA;  libavformat    57. 83.100 / 57. 83.100&#xA;  libavdevice    57. 10.100 / 57. 10.100&#xA;  libavfilter     6.107.100 /  6.107.100&#xA;  libswscale      4.  8.100 /  4.  8.100&#xA;  libswresample   2.  9.100 /  2.  9.100&#xA;  libpostproc    54.  7.100 / 54.  7.100&#xA;Splitting the commandline.&#xA;Reading option &#x27;-v&#x27; ... matched as option &#x27;v&#x27; (set logging level) with argument &#x27;56&#x27;.&#xA;Reading option &#x27;-i&#x27; ... matched as input url with argument &#x27;in.webm&#x27;.&#xA;Reading option &#x27;-c:v&#x27; ... matched as option &#x27;c&#x27; (codec name) with argument &#x27;libvpx&#x27;.&#xA;Reading option &#x27;-vf&#x27; ... matched as option &#x27;vf&#x27; (set video filters) with argument &#x27;scale=320:240&#x27;.&#xA;Reading option &#x27;out.webm&#x27; ... matched as output url.&#xA;Finished splitting the commandline.&#xA;Parsing a group of options: global .&#xA;Applying option v (set logging level) with argument 56.&#xA;Successfully parsed a group of options.&#xA;Parsing a group of options: input url in.webm.&#xA;Successfully parsed a group of options.&#xA;Opening an input file: in.webm.&#xA;[NULL @ 000002387e6322a0] Opening &#x27;in.webm&#x27; for reading&#xA;[file @ 000002387e632ea0] Setting default whitelist &#x27;file,crypto&#x27;&#xA;Probing matroska,webm score:100 size:2048&#xA;Probing mp3 score:1 size:2048&#xA;[matroska,webm @ 000002387e6322a0] Format matroska,webm probed with size=2048 and score=100&#xA;st:0 removing common factor 1000000 from timebase&#xA;[matroska,webm @ 000002387e6322a0] Before avformat_find_stream_info() pos: 634 bytes read:32768 seeks:0 nb_streams:1&#xA;[matroska,webm @ 000002387e6322a0] All info found&#xA;[matroska,webm @ 000002387e6322a0] stream 0: start_time: 0.000 duration: -9223372036854776.000&#xA;[matroska,webm @ 000002387e6322a0] format: start_time: 0.000 duration: 0.400 bitrate=1432 kb/s&#xA;[matroska,webm @ 000002387e6322a0] After avformat_find_stream_info() pos: 34843 bytes read:65536 seeks:0 frames:1&#xA;Input #0, matroska,webm, from &#x27;in.webm&#x27;:&#xA;  Metadata:&#xA;    ENCODER         : Lavf57.83.100&#xA;  Duration: 00:00:00.40, start: 0.000000, bitrate: 1432 kb/s&#xA;    Stream #0:0, 1, 1/1000: Video: vp8, 1 reference frame, yuv420p(progressive), 640x480, 0/1, SAR 1:1 DAR 4:3, 10 fps, 10 tbr, 1k tbn, 1k tbc (default)&#xA;    Metadata:&#xA;      alpha_mode      : 1&#xA;      ENCODER         : Lavc57.107.100 libvpx&#xA;      DURATION        : 00:00:00.400000000&#xA;Successfully opened the file.&#xA;Parsing a group of options: output url out.webm.&#xA;Applying option c:v (codec name) with argument libvpx.&#xA;Applying option vf (set video filters) with argument scale=320:240.&#xA;Successfully parsed a group of options.&#xA;Opening an output file: out.webm.&#xA;[file @ 000002387e658b40] Setting default whitelist &#x27;file,crypto&#x27;&#xA;Successfully opened the file.&#xA;detected 4 logical cores&#xA;Stream mapping:&#xA;  Stream #0:0 -> #0:0 (vp8 (native) -> vp8 (libvpx))&#xA;Press [q] to stop, [?] for help&#xA;cur_dts is invalid (this is harmless if it occurs once at the start per stream)&#xA;    Last message repeated 4 times&#xA;[Parsed_scale_0 @ 000002387e718a60] Setting &#x27;w&#x27; to value &#x27;320&#x27;&#xA;[Parsed_scale_0 @ 000002387e718a60] Setting &#x27;h&#x27; to value &#x27;240&#x27;&#xA;[Parsed_scale_0 @ 000002387e718a60] Setting &#x27;flags&#x27; to value &#x27;bicubic&#x27;&#xA;[Parsed_scale_0 @ 000002387e718a60] w:320 h:240 flags:&#x27;bicubic&#x27; interl:0&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] Setting &#x27;video_size&#x27; to value &#x27;640x480&#x27;&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] Setting &#x27;pix_fmt&#x27; to value &#x27;0&#x27;&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] Setting &#x27;time_base&#x27; to value &#x27;1/1000&#x27;&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] Setting &#x27;pixel_aspect&#x27; to value &#x27;1/1&#x27;&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] Setting &#x27;sws_param&#x27; to value &#x27;flags=2&#x27;&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] Setting &#x27;frame_rate&#x27; to value &#x27;10/1&#x27;&#xA;[graph 0 input from stream 0:0 @ 000002387e743b00] w:640 h:480 pixfmt:yuv420p tb:1/1000 fr:10/1 sar:1/1 sws_param:flags=2&#xA;[format @ 000002387e7fe1e0] compat: called with args=[yuv420p|yuva420p]&#xA;[format @ 000002387e7fe1e0] Setting &#x27;pix_fmts&#x27; to value &#x27;yuv420p|yuva420p&#x27;&#xA;[AVFilterGraph @ 000002387e634e60] query_formats: 4 queried, 3 merged, 0 already done, 0 delayed&#xA;[Parsed_scale_0 @ 000002387e718a60] w:640 h:480 fmt:yuv420p sar:1/1 -> w:320 h:240 fmt:yuv420p sar:1/1 flags:0x4&#xA;[libvpx @ 000002387e657fe0] v1.6.1&#xA;[libvpx @ 000002387e657fe0] --prefix=/Users/kyle/software/libvpx/win64/libvpx-1.6.1-win64 --target=x86_64-win64-gcc&#xA;[libvpx @ 000002387e657fe0] vpx_codec_enc_cfg&#xA;[libvpx @ 000002387e657fe0] generic settings&#xA;  g_usage:                      0&#xA;  g_threads:                    0&#xA;  g_profile:                    0&#xA;  g_w:                          320&#xA;  g_h:                          240&#xA;  g_bit_depth:                  8&#xA;  g_input_bit_depth:            8&#xA;  g_timebase:                   {1/30}&#xA;  g_error_resilient:            0&#xA;  g_pass:                       0&#xA;  g_lag_in_frames:              0&#xA;[libvpx @ 000002387e657fe0] rate control settings&#xA;  rc_dropframe_thresh:          0&#xA;  rc_resize_allowed:            0&#xA;  rc_resize_up_thresh:          60&#xA;  rc_resize_down_thresh:        30&#xA;  rc_end_usage:                 0&#xA;  rc_twopass_stats_in:          0000000000000000(0)&#xA;  rc_target_bitrate:            256&#xA;[libvpx @ 000002387e657fe0] quantizer settings&#xA;  rc_min_quantizer:             4&#xA;  rc_max_quantizer:             63&#xA;[libvpx @ 000002387e657fe0] bitrate tolerance&#xA;  rc_undershoot_pct:            100&#xA;  rc_overshoot_pct:             100&#xA;[libvpx @ 000002387e657fe0] decoder buffer model&#xA;  rc_buf_sz:                    6000&#xA;  rc_buf_initial_sz:            4000&#xA;  rc_buf_optimal_sz:            5000&#xA;[libvpx @ 000002387e657fe0] 2 pass rate control settings&#xA;  rc_2pass_vbr_bias_pct:        50&#xA;  rc_2pass_vbr_minsection_pct:  0&#xA;  rc_2pass_vbr_maxsection_pct:  400&#xA;[libvpx @ 000002387e657fe0] keyframing settings&#xA;  kf_mode:                      1&#xA;  kf_min_dist:                  0&#xA;  kf_max_dist:                  128&#xA;[libvpx @ 000002387e657fe0] &#xA;[libvpx @ 000002387e657fe0] vpx_codec_enc_cfg&#xA;[libvpx @ 000002387e657fe0] generic settings&#xA;  g_usage:                      0&#xA;  g_threads:                    0&#xA;  g_profile:                    0&#xA;  g_w:                          320&#xA;  g_h:                          240&#xA;  g_bit_depth:                  8&#xA;  g_input_bit_depth:            8&#xA;  g_timebase:                   {1/10}&#xA;  g_error_resilient:            0&#xA;  g_pass:                       0&#xA;  g_lag_in_frames:              25&#xA;[libvpx @ 000002387e657fe0] rate control settings&#xA;  rc_dropframe_thresh:          0&#xA;  rc_resize_allowed:            0&#xA;  rc_resize_up_thresh:          60&#xA;  rc_resize_down_thresh:        30&#xA;  rc_end_usage:                 0&#xA;  rc_twopass_stats_in:          0000000000000000(0)&#xA;  rc_target_bitrate:            200&#xA;[libvpx @ 000002387e657fe0] quantizer settings&#xA;  rc_min_quantizer:             4&#xA;  rc_max_quantizer:             63&#xA;[libvpx @ 000002387e657fe0] bitrate tolerance&#xA;  rc_undershoot_pct:            100&#xA;  rc_overshoot_pct:             100&#xA;[libvpx @ 000002387e657fe0] decoder buffer model&#xA;  rc_buf_sz:                    6000&#xA;  rc_buf_initial_sz:            4000&#xA;  rc_buf_optimal_sz:            5000&#xA;[libvpx @ 000002387e657fe0] 2 pass rate control settings&#xA;  rc_2pass_vbr_bias_pct:        50&#xA;  rc_2pass_vbr_minsection_pct:  0&#xA;  rc_2pass_vbr_maxsection_pct:  400&#xA;[libvpx @ 000002387e657fe0] keyframing settings&#xA;  kf_mode:                      1&#xA;  kf_min_dist:                  0&#xA;  kf_max_dist:                  128&#xA;[libvpx @ 000002387e657fe0] &#xA;[libvpx @ 000002387e657fe0] vpx_codec_control&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_CPUUSED:             1&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_ARNR_MAXFRAMES:      0&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_ARNR_STRENGTH:       3&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_ARNR_TYPE:           3&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_NOISE_SENSITIVITY:   0&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_TOKEN_PARTITIONS:    0&#xA;[libvpx @ 000002387e657fe0]   VP8E_SET_STATIC_THRESHOLD:    0&#xA;[libvpx @ 000002387e657fe0] Using deadline: 1000000&#xA;Output #0, webm, to &#x27;out.webm&#x27;:&#xA;  Metadata:&#xA;    encoder         : Lavf57.83.100&#xA;    Stream #0:0, 0, 1/1000: Video: vp8 (libvpx), 1 reference frame, yuv420p, 320x240 [SAR 1:1 DAR 4:3], 0/1, q=-1--1, 200 kb/s, 10 fps, 1k tbn, 10 tbc (default)&#xA;    Metadata:&#xA;      alpha_mode      : 1&#xA;      DURATION        : 00:00:00.400000000&#xA;      encoder         : Lavc57.107.100 libvpx&#xA;    Side data:&#xA;      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1&#xA;Clipping frame in rate conversion by 0.000008&#xA;[webm @ 000002387e656880] get_metadata_duration returned: 400000&#xA;[webm @ 000002387e656880] Write early duration from metadata = 400&#xA;[webm @ 000002387e656880] Writing block at offset 3, size 11223, pts 0, dts 0, duration 100, keyframe 1&#xA;[webm @ 000002387e656880] Writing block at offset 11233, size 1288, pts 100, dts 100, duration 100, keyframe 0&#xA;[webm @ 000002387e656880] Writing block at offset 12528, size 1504, pts 200, dts 200, duration 100, keyframe 0&#xA;[webm @ 000002387e656880] Writing block at offset 14039, size 2481, pts 300, dts 300, duration 100, keyframe 0&#xA;[out_0_0 @ 000002387e743d60] EOF on sink link out_0_0:default.&#xA;No more output streams to write to, finishing.&#xA;[webm @ 000002387e656880] end duration = 400&#xA;[webm @ 000002387e656880] stream 0 end duration = 400&#xA;frame=    4 fps=0.0 q=0.0 Lsize=      17kB time=00:00:00.30 bitrate= 457.8kbits/s speed=4.45x    &#xA;video:16kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.413191%&#xA;Input file #0 (in.webm):&#xA;  Input stream #0:0 (video): 4 packets read (34992 bytes); 4 frames decoded; &#xA;  Total: 4 packets (34992 bytes) demuxed&#xA;Output file #0 (out.webm):&#xA;  Output stream #0:0 (video): 4 frames encoded; 4 packets muxed (16496 bytes); &#xA;  Total: 4 packets (16496 bytes) muxed&#xA;4 frames successfully decoded, 0 decoding errors&#xA;[AVIOContext @ 000002387e698c20] Statistics: 14 seeks, 10 writeouts&#xA;[AVIOContext @ 000002387cc773e0] Statistics: 71649 bytes read, 0 seeks&#xA;

    &#xA;

  • How to record UDP stream with FFMPEG in chunks ?

    30 janvier 2018, par user1394281

    I’m looking for a way to record a video UDP stream using ffmpeg but in 10mn chunks.
    I currently use the following to get 10mn of video (with h264 transcoding).

    "ffmpeg -i udp ://239.0.77.15:5000 -map 0:0 -map 0:1 -s 640x360 -vcodec libx264 -g 100 -vb 500000 -r 25 -strict experimental -vf yadif -acodec aac -ab 96000 -ac 2 -t 600 -y /media/test.m4 "

    My problem is that using command line ffmpeg needs time to resync with the udp stream loosing 2 seconds of video each time. Is it normal ?

    Any idea if there is a way to do it in command line or should I tried to use the ffmpeg API ?

    Thanks in advance