Recherche avancée

Médias (1)

Mot : - Tags -/publishing

Autres articles (73)

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire de création d’une catégorie
    Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
    Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
    On peut modifier ce formulaire dans la partie :
    Administration > Configuration des masques de formulaire.
    Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
    Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Other interesting software

    13 avril 2011, par

    We don’t claim to be the only ones doing what we do ... and especially not to assert claims to be the best either ... What we do, we just try to do it well and getting better ...
    The following list represents softwares that tend to be more or less as MediaSPIP or that MediaSPIP tries more or less to do the same, whatever ...
    We don’t know them, we didn’t try them, but you can take a peek.
    Videopress
    Website : http://videopress.com/
    License : GNU/GPL v2
    Source code : (...)

Sur d’autres sites (11952)

  • Measuring success for your SEO content

    20 mars 2020, par Jake Thornton — Uncategorized

    With over a billion searches every day in search engines, it’s hard to underestimate the importance of having your business present on page one (ideally in positions 1 – 3) ranking for the keywords that impact your sales and conversions.

    "In 2019, Google received nearly 2.3 trillion searches and on page one alone, the first five organic results accounted for 67.60% of all the clicks."

    So how is your business performing when it comes to ranking in the crucial top three spots of search for your most important keywords ?

    Accurately measuring the success of your content

    Once you’ve done your keyword research, created compelling content, optimised it to be search-friendly, and hit ‘publish’, you then need to accurately measure the success of your efforts.

    4 tips for measuring the success of your SEO content

    1. Create a custom segment for "Visitors from Search Engines only"

    By creating this custom segment, you’ll be able to analyse the behavioural patterns of the visitors who found your website through a search engine. 

    This way you can use many of Matomo’s powerful features (Visitors, Behaviour, Acquisition, Ecommerce, Goals etc.) focused entirely on search engine visitors only.

    Once you’ve created this segment, you can begin to see key metrics like which entry pages are responsible for referring visitors to your website. For example : Visit Behaviour – Entry Pages, this is a great way to analyse your most effective SEO pages.You may be surprised at what pages currently bring in the most traffic.

    As well as discovering which content resonates with your search audience, you will also be able to create more content focused on your targeted audience. Do this by learning which locations your search visitors are from, which device they use, what time of the day they visited your website and much more.

    >> Learn more about creating custom segments

    2. Website visits, time on site, pages per session, and bounce rate.

    “The top four ranking factors are website visits, time on site, pages per session, and bounce rate.”

    These four metrics set the benchmark for your SEO success.

    First, you need to get as many of the ‘right’ users to see your content. If you feel you’ve exhausted channels such as social media, email and possibly paid posts ; think about who your ideal audience is. Where are they likely to hang out online ? Are there community groups or forum sites that are interested in what you’re writing about ? 

    Whatever the case, putting yourself out there and getting more traffic to your website will help show search engines that people are interested in your website. As a result, they’ll likely rank you higher for that.

    When we say getting more of the ‘right’ users, we mean users who are generally interested in the topic/subject you’re writing about and interested in the work you do. 

    This is important for the next three metrics – increasing users time on your website, increasing the amount of pages your users explore on your website, and reducing the overall bounce rate for users who leave your website in a matter of seconds.

    To evaluate these metrics, go to Behaviour Pages in your Matomo and see how these metrics vary on previous posts or pages you’ve created. Which pages are already showing you the best results ? Why do they get the results ? Can you focus on creating more content like this ?

    Understanding what content is resonating with your users through these metrics is easy and is the starting point for measuring the success of your SEO content strategy.

    >> Learn more about the Behaviour feature

    3. Row Evolution

    The Row Evolution feature embedded within the Search Engine Keywords Performance plugin lets you see how your ranking positions have changed over time for your important keywords. It also lets you see how the incoming traffic, related to your keywords, has changed over time.

    This is valuable when measuring the changes you’ve made to your landing pages to see if it has a positive or negative effect on your ranking efforts. 

    This also lets you see how search engine algorithm changes affect your search rankings over time, and to see if the effects of these algorithm updates are temporary or long lasting.

    Row evolution allows you to report on keyword performance with ease. If you only check your insights once a week or once a fortnight, you’ll see how ranking positions for your important keywords have changed daily (or even weekly, monthly or yearly however you prefer.)

    >> Learn more about Row Evolution

    4. What results are you getting from the lesser known search engines ?

    "In 2019 (to date), Google accounted for just over 75% of all global desktop search traffic, followed by Bing at 9.97%, Baidu at 9.34%, and Yahoo at 2.77%."

    For most of us, we want to be ranking in the top three spots in Google Search because that’s where the majority of search users are. However, don’t shy away from opportunities you could be missing with lesser known search engines.

    If you sell a product aimed at 55-65 year olds who use a PC computer, chances are they are using Bing. If you have customers in China the majority will be using Baidu, or in our case at Matomo, many of our loyal users use a privacy-friendly search engine like DuckDuckGo or Qwant.

    Some of your ideal customers might be finding you through these alternative search engines, so be sure to measure the impact that these referrals may have on your conversions.

    Strategically including important keywords that impact your business

    While search is an important acquisition channel for most businesses, it’s also one of the most competitive.

    We recommend analysing your keyword and content performance regularly and alter content that isn’t performing as well as you’d like. You need to continually learn from the content that is successful, and focus on creating more content like this. 

    The final thing to remember with search keyword performance is to be patient. If you have had little success in the past with attracting customers through search, it can take time to build this reputation with search engines.

  • how to give random name to the file in ffmpeg

    18 mars 2020, par amit9867

    How can i give random name to a output file in ffmpeg.

    I want to give the filename as current date_time (ex.2020-3-18-10-13-4.mkv).

    I don’t want to give a fix name such as output.mkv.

    import os
    import subprocess
    import tkinter as tk
    import datetime

    root = tk.Tk()

    os.chdir(f'C://Users/{os.getlogin()}/desktop/')
    def recording_voice():
     global p
     p =subprocess.Popen('ffmpeg -i video.avi -i audio.wav -c:v copy -c:a aac -strict experimental -strftime 1 "%Y-%m-%d_%H-%M-%S.mkv"' ,stdin=subprocess.PIPE)


    rec_btn = tk.Button(text='Start merging', width=20, command=recording_voice)
    rec_btn.pack()


    root.mainloop()
  • Error while opening encoder for output stream #0:0 for Creating Video from image,Gif,music

    29 février 2020, par brijesh

    I am trying to create a video from image,gif and music.

    Here is the code I used :

    {"-y", "-i", imagepath, "-ignore_loop", "0", "-i", gif, "-filter_complex", "[1:v]scale=" + filterdBitmap.getWidth() + ":" + filterdBitmap.getHeight() + "[ovrl];[0:v][ovrl]overlay=0:0", "-ss", "" + startMs / 1000, "-t", "" + endMs / 1000, "-i", songpath, "-c:v", "libx264", "-preset", "ultrafast", "-r", "30", "-pix_fmt", "yuva420p", "-c:a", "aac", "-shortest", outputLocation.getPath()};

    The error I received was this :

    Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

    Specifically, here is the complete response :

    2020-02-29 10:16:01.043 14913-14913/com.photocreator E/fail: 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, png_pipe, from 'file:///storage/emulated/0/1582951553006.jpg':
         Duration: N/A, bitrate: N/A
           Stream #0:0: Video: png, rgba(pc), 639x812, 25 tbr, 25 tbn, 25 tbc
       Input #1, gif, from 'http://13.232.145.224:3003/getpath/video_maker/new/35.gif':
         Duration: N/A, bitrate: N/A
           Stream #1:0: Video: gif, bgra, 288x480, 15 fps, 15 tbr, 100 tbn, 100 tbc
       [mp3 @ 0xaea97200] Skipping 0 bytes of junk at 253.
       Input #2, mp3, from '/storage/emulated/0/Download/supnaringtone-49332.mp3':
         Metadata:
           encoder         : Lavf58.20.100
         Duration: 00:00:21.76, start: 0.025057, bitrate: 64 kb/s
           Stream #2:0: Audio: mp3, 44100 Hz, stereo, s16p, 64 kb/s
           Metadata:
             encoder         : Lavc58.35
       Incompatible pixel format 'yuva420p' for codec 'libx264', auto-selecting format 'yuv420p'
       [libx264 @ 0xaeacfc00] width not divisible by 2 (639x812)
       Output #0, mp4, to '/storage/emulated/0/allkotlin/video/movie_1582951554388.mp4':
           Stream #0:0: Video: h264, none, q=2-31, 128 kb/s, 30 fps (default)
           Metadata:
             encoder         : Lavc57.24.102 libx264
           Stream #0:1: Audio: aac, 0 channels, 128 kb/s
           Metadata:
             encoder         : Lavc57.24.102 aac
       Stream mapping:
         Stream #0:0 (png) -> overlay:main (graph 0)
         Stream #1:0 (gif) -> scale (graph 0)
         overlay (graph 0) -> Stream #0:0 (libx264)
         Stream #2:0 -> #0:1 (mp3 (native) -> aac (native))
       Error while opening encoder for output stream #0:0 - maybe incorrect parameters such as bit_rate, rate, width or height

    If I use -s 560x560 , it works great, except then I can’t keep on using my aspect ratio :

    And here is my code :

    public class PhotoEditing extends AppCompatActivity implements GetGifAdapter.GlideInterface, SdCardSongAdapter.MediaInterface
           , FiltersListFragmentListener, EmojiFragmentListener, AddTextFragmentListener {

       public static final String FILE_PROVIDER_AUTHORITY = "com.burhanrashid52.photoeditor.fileprovider";
       @Nullable
       @VisibleForTesting
       Uri mSaveImageUri;
       PhotoEditorView image_preview;
       ImageView image_gif/*,image_preview*/;
       ImageView save, back;
       LinearLayout linearLayout;
       public String sessionId, sessionId1;
       Uri image_selected_uri;

       public Bitmap originalBitmap, filterdBitmap, finalBitmap;
       LinearLayout btn_music_list, btn_music_cut, btn_add_gif, btn_filters_list, btn_emoji, btn_add_text;
       MediaPlayer mediaPlayer;
       String mediaData;
       LinearLayout relativeLayout;
       RelativeLayout seekbar_layout, fm;
       RelativeLayout.LayoutParams layoutparam;
       RangeSeekBar rangeSeekBar;
       Runnable r;
       Handler mHandler;
       private int duration;
       private TextView tvLeft, tvRight;
       RelativeLayout rl_replace, music_fragment;
       FilterListFragment filterListFragment;
       EmojiFragment emojiFragment;
       PhotoEditor photoEditor;
       int screenWidth, screenHeight;
       Bitmap bitmap;
       int brightnessFinal = 0;
       int saturationFinal = 0;
       int constrantFinal = 0;
       int hue = 0;
       String glideData;
       FFmpeg ffmpeg;
       String s;
       String imageHeight;
       String imageWidth ;


       private static final String TAG = "BRIJESH";

       Context context = this;

       static {
           System.loadLibrary("NativeImageProcessor");
       }

       public Bitmap resizeImageToNewSize(Bitmap bitmap, int i, int i2) {
           try {
               int width = bitmap.getWidth();
               int height = bitmap.getHeight();
               float f = (float) i;
               float f2 = (float) i2;
               if (!(height == i2 && width == i)) {
                   float f3 = (float) width;
                   float f4 = f / f3;
                   float f5 = (float) height;
                   float f6 = f2 / f5;
                   if (f4 < f6) {
                       f6 = f4;
                   }
                   f = f3 * f6;
                   f2 = f5 * f6;
               }
               Bitmap bitmap1 = Bitmap.createScaledBitmap(bitmap, (int) f, (int) f2, true);
               fm.removeView(image_preview);
               RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(bitmap1.getWidth(), bitmap1.getHeight());

               params.addRule(RelativeLayout.CENTER_HORIZONTAL);
               image_preview.setLayoutParams(params);

               fm.addView(image_preview);
               return bitmap1;
           } catch (Exception unused) {
               fm.removeView(image_preview);
               RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(200, 100);

               params.addRule(RelativeLayout.CENTER_IN_PARENT);
               image_preview.setLayoutParams(params);
               fm.addView(image_preview);

               return bitmap;
           }
       }

       @Override
       protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_photo_editing);

           initialize(this);
           image_preview = findViewById(R.id.image_preview);
           image_preview.getSource().setScaleType(ImageView.ScaleType.FIT_XY);
           photoEditor = new PhotoEditor.Builder(this, image_preview)
                   .setPinchTextScalable(true)
                   .build();
           image_gif = findViewById(R.id.image_gif);
           linearLayout = findViewById(R.id.linearLayout);
           btn_music_list = findViewById(R.id.btn_music_list);
    //        btn_music_cut = findViewById(R.id.btn_music_cut);
           btn_add_gif = findViewById(R.id.btn_add_gif);
           btn_filters_list = findViewById(R.id.btn_filters_list);
           btn_emoji = findViewById(R.id.btn_emoji);
           btn_add_text = findViewById(R.id.btn_add_text);
           fm = findViewById(R.id.frame);
           rl_replace = findViewById(R.id.replace_fragment);
           music_fragment = findViewById(R.id.music_fragment);
           seekbar_layout = findViewById(R.id.seekbar_layout);
           rangeSeekBar = findViewById(R.id.rangeSeekBar);
           rangeSeekBar.setNotifyWhileDragging(true);
           mHandler = new Handler();
           tvLeft = findViewById(R.id.tvLeft);
           tvRight = findViewById(R.id.tvRight);
           relativeLayout = findViewById(R.id.relativeLayout);
           save = findViewById(R.id.btndone);
           back = findViewById(R.id.btnhome);
           mediaPlayer = new MediaPlayer();
           back.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   if (mediaPlayer.isPlaying()) {
                       mediaPlayer.stop();
                       onBackPressed();
                   } else onBackPressed();
               }
           });

           sessionId1 = getIntent().getStringExtra("gallary");
           sessionId = getPathFromUri(PhotoEditing.this, Uri.parse(sessionId1));
           image_selected_uri = Uri.parse(sessionId);
           loadImage();

           btn_music_list.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
    //                if (seekbar_layout.getVisibility() == View.GONE){
                   if (mediaPlayer != null && mediaPlayer.isPlaying()) {
                       mediaPlayer.stop();
                   }
                   MusicListFragment musicListFragment = new MusicListFragment();
                   FragmentManager fragmentManager = getSupportFragmentManager();
                   FragmentTransaction transaction = fragmentManager.beginTransaction();
                   transaction.replace(R.id.replace_fragment, musicListFragment);
                   transaction.addToBackStack(null);
                   transaction.commit();
                   seekbar_layout.setVisibility(View.VISIBLE);

    //                }
    //                else if (seekbar_layout.getVisibility() == View.VISIBLE) {
    //                    seekbar_layout.setVisibility(View.GONE);
    //                }
               }
           });

    //        btn_music_cut.setOnClickListener(new View.OnClickListener() {
    //            @Override
    //            public void onClick(View v) {
    //                if (seekbar_layout.getVisibility() == View.GONE) {
    //                    if (mediaPlayer != null && mediaPlayer.isPlaying()) {
    //                        seekbar_layout.setVisibility(View.VISIBLE);
    //                    }
    //                } else if (seekbar_layout.getVisibility() == View.VISIBLE) {
    //                    seekbar_layout.setVisibility(View.GONE);
    //                }
    //            }
    //        });

           btn_add_gif.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
                   GIfFragment gIfFragment = new GIfFragment();
                   FragmentManager fragmentManager = getSupportFragmentManager();
                   FragmentTransaction transaction = fragmentManager.beginTransaction();
                   transaction.replace(R.id.replace_fragment, gIfFragment);
                   transaction.addToBackStack(null);
                   transaction.commit();
               }
           });



           save.setOnClickListener(new View.OnClickListener() {
               @Override
               public void onClick(View v) {
    //                image_preview.getSource().setDrawingCacheEnabled(true);
    //                Bitmap b = image_preview.getSource().getDrawingCache();
    //                MediaStore.Images.Media.insertImage(context.getContentResolver(), b,"", "");
                   saveImageToGallery();

               }
           });
       }

       private void loadImage() {
           bitmap = BitmapFactory.decodeFile(image_selected_uri.toString());
           originalBitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
           originalBitmap = modifyOrientation(originalBitmap, sessionId);
           finalBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true);
           filterdBitmap = originalBitmap.copy(Bitmap.Config.ARGB_8888, true);

           DisplayMetrics displayMetrics = new DisplayMetrics();
           getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
           int f3672y = displayMetrics.widthPixels;
           int f3673z = displayMetrics.heightPixels;
           float f = getResources().getDisplayMetrics().density;
           int i = f3672y - ((int) (40.0f * f));
           int i2 = f3673z - ((int) (f * 100.0f));
           image_preview.getSource().setImageBitmap(resizeImageToNewSize(bitmap, i, i2));
       }

       private void getDropboxIMGSize(Uri uri){

           BitmapFactory.Options options = new BitmapFactory.Options();
           options.inJustDecodeBounds = true;
           BitmapFactory.decodeFile(new File(uri.getPath()).getAbsolutePath(), options);
           imageHeight= String.valueOf(options.outHeight);
           imageWidth = String.valueOf(options.outWidth);

       }

       @SuppressLint("MissingPermission")
       private void saveImageToGallery() {
           File file = new File(Environment.getExternalStorageDirectory()
                   + File.separator + ""
                   + System.currentTimeMillis() + ".jpg");
           try {
               file.createNewFile();

               SaveSettings saveSettings = new SaveSettings.Builder()
                       .setClearViewsEnabled(true)
                       .setTransparencyEnabled(true)
                       .build();

               photoEditor.saveAsFile(file.getAbsolutePath(), saveSettings, new PhotoEditor.OnSaveListener() {
                   @Override
                   public void onSuccess(@NonNull String imagePath) {
                       Toast.makeText(context, "Image Saved", Toast.LENGTH_SHORT).show();

                       mSaveImageUri = Uri.fromFile(new File(imagePath));
                       getDropboxIMGSize(mSaveImageUri);
                       executeCmd(String.valueOf(mSaveImageUri), mediaData, glideData, rangeSeekBar.getSelectedMinValue().intValue() * 1000, rangeSeekBar.getSelectedMaxValue().intValue() * 1000);

                   }

                   @Override
                   public void onFailure(@NonNull Exception exception) {
                   }
               });
           } catch (IOException e) {
               e.printStackTrace();
           }
       }


       private void executeCmd(String imagepath, String songpath, String gif, int startMs, int endMs) {
           File outputLocation = getConvertedFile(outputPath() + "video", "movie_" + System.currentTimeMillis() + ".mp4");
           Log.e("videofilepath", songpath);
           String[] complexCommand = {"-y", "-i", imagepath,
                   "-ignore_loop", "0",
                   "-i", gif, "-filter_complex", "[1:v]scale=w='bitand(iw,65534)':h='bitand(ih,65534)' [ovrl];[0:v][ovrl]overlay=0:0",
                   "-ss", "" + startMs / 1000, "-t", "" + endMs / 1000, "-i", songpath,
                   "-c:v", "libx264", "-preset", "ultrafast", "-r", "30", "-pix_fmt", "yuva420p", "-c:a", "aac", "-shortest", outputLocation.getPath()};

           try {
               ffmpeg.execute(complexCommand, new ExecuteBinaryResponseHandler() {

                   @Override
                   public void onSuccess(String s) {
                       Log.e("onSuccess", s);
                   }

                   @Override
                   public void onFailure(String s) {
                       Log.e("fail", s);
                   }
               });
           } catch (FFmpegCommandAlreadyRunningException e) {
               Log.e("catch", e.getMessage());
           }
       }
    }

    Any idea what is going on here ? Thanks !