Recherche avancée

Médias (3)

Mot : - Tags -/spip

Autres articles (50)

  • Modifier la date de publication

    21 juin 2013, par

    Comment changer la date de publication d’un média ?
    Il faut au préalable rajouter un champ "Date de publication" dans le masque de formulaire adéquat :
    Administrer > Configuration des masques de formulaires > Sélectionner "Un média"
    Dans la rubrique "Champs à ajouter, cocher "Date de publication "
    Cliquer en bas de la page sur Enregistrer

  • Les autorisations surchargées par les plugins

    27 avril 2010, par

    Mediaspip core
    autoriser_auteur_modifier() afin que les visiteurs soient capables de modifier leurs informations sur la page d’auteurs

  • 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

Sur d’autres sites (8323)

  • PHP script works when called from command line, does not when called as background via web server

    6 juin 2014, par fNek

    I am facing a problem with a certain PHP script (CLI mode) I wrote. It should take certain arguments to convert a video with FFMPEG. When I call it from the command prompt, it works fine. However, I have to call it from a web server.

    The PHP script that handles the request calls the PHP script in the background via code I found here at SE :

    if (substr(php_uname(), 0, 7) == "Windows"){
       pclose(popen("start /B ". $cmd, "r"));  
    }
    else {
       exec("nohup " . $cmd . " > /dev/null &");
    }

    When run this way, however, the PHP script does not create the files, even after a much longer time than it took via the command prompt.

    The script runs, I have checked that by letting it insert dummy entries into the database. It also has the permission to create files, which I verified by letting it create a text file.

    What could be the difference that prevents my script from working properly ? I develop and test this code with XAMPP on Windows 7.

    //EDIT : I forgot to give you this link to the background PHP script : http://pastebin.com/pfTZMfwi

    //EDIT2 : I found out that the PHP process runs for a very short time (only until next refresh of the Windows task manager). Could it be that PHP kills its children when it exits ?

    //EDIT3 : No, that seems not to be the problem. I cannot execute programs via exec() when the script is called as background from the web server. What could the problem be, and what would be a solution/workaround ?

    //EDIT4 : The command that seems to cause the trouble is not exec()/etc. but the echo command I did before the exec(). I am going to remove it, but why does it cause a problem ?

  • ffmpeg won't start until java exits

    9 août 2014, par user3925332

    I am trying to make a java program that automatically converts wtv files in an input folder to mpg files in output folder. The twist is that I make it run periodically, so it acts as a synchronizer.

    The following code works for converting the .wtv to a .dvr-ms, which is required by ffmpeg since it cannot convert .wtv files directly.

       Process p = Runtime.getRuntime().exec("C:\\Windows\\ehome\\WTVConverter C:\\Users\\Andrew\\Desktop\\test\\input\\input.wtv C:\\Users\\Andrew\\Desktop\\test\\output\\input.dvr-ms");
       p.waitFor();

    WTVConverter has no problems running from a java application. ffmpeg is a different story. Once the above line runs, I then run this...

       Process p = Runtime.getRuntime().exec("ffmpeg\\bin\\ffmpeg -y -i \"C:\\Users\\Andrew\\Desktop\\test\\output\\input.dvr-ms'" -vcodec copy -acodec copy -f dvd \"C:\Users\Andrew\Desktop\test\output\input.mpg\"");
       p.waitFor();

    Suddenly, there is a problem... The application ffmpeg shows up in the task manager, but it’s cpu usage is 0, and no mpeg files is being generated. If I force the java application to close, though, suddenly it starts working ! Huh ?

    What reason would there be for a command line application to wait for its calling application to quit before it executes ? I’m not incredibly command line savvy, so I don’t really know how to diagnose this problem.

  • Hardware accelerated decoding with FFmpeg falls back to software decoding

    9 février 2024, par iexav

    So I have followed the FFmpeg example for hardware accelerated decoding exactly as it is (I am referring to this example).

    


    https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.c#L76


    


    But I still seem to be decoding with the software decoder. When I open the task manager on windows the GPU isn't getting used. Before I make a call to av_hwframe_transfer_data() I check whether the frame is in the relevant hw_pix_fmt format and it is. Everything works, no errors, nothing, except the GPU is doing nothing. Now as an example I tried decoding a video that uses vp9 as a codec. If I specify the hardware accelerated codec I want by name it actually does work.

    


    vidCodec=avcodec_find_decoder_by_name("vp9_cuvid"); 


    


    When I do this and look at the task manager I can see that the CPU does much less work and my GPU actually does Video Decode work. Having to specify the hardware accelerated decoder for every single video I am decoding is ridiculous though.

    


    Edit : as per user4581301's answer, here are the pieces of relevant code. (It's actually in java because I am using the java FFmpeg wrapper but it's basically just making a bunch of calls to FFmpeg functions.)

    


    &#xA; ArrayList<string> deviceTypes = new ArrayList&lt;>();&#xA; int type = AV_HWDEVICE_TYPE_NONE;&#xA;                    while ((type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE) {&#xA;                        BytePointer p = av_hwdevice_get_type_name(type);&#xA;&#xA;                        deviceTypes.add(CString(p));&#xA;                    }&#xA;                    boolean flag=false;&#xA;&#xA;                    for(int j=0;j* Allocate a codec context for the decoder */&#xA;                if ((video_c = avcodec_alloc_context3(vidCodec)) == null) {&#xA;                    throw new Exception("avcodec_alloc_context3() error: Could not allocate video decoding context.");&#xA;                }&#xA;&#xA;&#xA;                /* copy the stream parameters from the muxer */&#xA;&#xA;                if ((ret = avcodec_parameters_to_context(video_c, video_st.codecpar())) &lt; 0) {&#xA;                    releaseUnsafe();&#xA;                    throw new Exception("avcodec_parameters_to_context() error " &#x2B; ret &#x2B; ": Could not copy the video stream parameters.");&#xA;                }&#xA;              &#xA;&#xA;                    video_c.get_format(AvFormatGetter.getInstance());&#xA;                    AVBufferRef hardwareDeviceContext =av_hwdevice_ctx_alloc(type);&#xA;&#xA;                    if ((ret = av_hwdevice_ctx_create(hardwareDeviceContext, type,(String) null, null, 0)) &lt; 0) {&#xA;                        System.err.println("Failed to create specified HW device. error " &#x2B; ret);&#xA;&#xA;                    }else{&#xA;                        video_c.hw_device_ctx(av_buffer_ref(hardwareDeviceContext));&#xA;&#xA;                    }&#xA;    &#xA;&#xA;&#xA;                &#xA;//The function that gets called for get_format&#xA;@Override&#xA; public int call(AVCodecContext context, IntPointer format) {&#xA;            int p;&#xA;&#xA;&#xA;            for (int i=0;;i&#x2B;&#x2B;) {&#xA;                if ((p=format.get(i)) == hw_pix_fmt) {&#xA;                    return p;&#xA;                }&#xA;                if(p==-1){&#xA;                    break;&#xA;                }&#xA;            }&#xA;&#xA;            System.out.println(hw_pix_fmt &#x2B;" is not found in the codec context");&#xA;            // Error&#xA;&#xA;            return AV_PIX_FMT_NONE;&#xA;        }&#xA;    &#xA;//The method that&#x27;s used for decoding video frames&#xA;  public Optional<boolean> decodeVideoFrame(AVPacket pkt, boolean readPacket, boolean keyFrames) throws Exception {&#xA;&#xA;        int ret;&#xA;        // Decode video frame&#xA;        if (readPacket) {&#xA;            ret = avcodec_send_packet(video_c, pkt);&#xA;          &#xA;            if (ret &lt; 0) {&#xA;                System.out.println("error during decoding");&#xA;                return Optional.empty();&#xA;            }&#xA;&#xA;            if (pkt.data() == null &amp;&amp; pkt.size() == 0) {&#xA;                pkt.stream_index(-1);&#xA;            }&#xA;           &#xA;        }&#xA;&#xA;        // Did we get a video frame?&#xA;        while (true) {&#xA;            ret = avcodec_receive_frame(video_c, picture_hw);&#xA;&#xA;            if (ret == AVERROR_EAGAIN() || ret == AVERROR_EOF()) {&#xA;                if (pkt.data() == null &amp;&amp; pkt.size() == 0) {&#xA;                    return Optional.empty();&#xA;                } else {&#xA;&#xA;                    return Optional.of(true);&#xA;&#xA;                }&#xA;            } else if (ret &lt; 0) {&#xA;&#xA;                // Ignore errors to emulate the behavior of the old API&#xA;                // throw new Exception("avcodec_receive_frame() error " &#x2B; ret &#x2B; ": Error during video decoding.");&#xA;                return Optional.of(true);&#xA;&#xA;            }&#xA;&#xA;            if (!keyFrames || picture.pict_type() == AV_PICTURE_TYPE_I) {&#xA;              &#xA;                if(picture_hw.format()==hw_pix_fmt){&#xA;                    if (av_hwframe_transfer_data(&#xA;                            picture, // The frame that will contain the usable data.&#xA;                            picture_hw, // Frame returned by avcodec_receive_frame()&#xA;                            0) &lt; 0) {&#xA;                        throw new Exception("Could not transfer data from gpu to cpu. ");&#xA;&#xA;                    }&#xA;                }&#xA;               //... The rest of the method here&#xA;                return Optional.of(false);&#xA;&#xA;            }&#xA;        }&#xA;    }&#xA;</boolean></string>

    &#xA;