Recherche avancée

Médias (91)

Autres articles (80)

  • 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 ;

  • Soumettre bugs et patchs

    10 avril 2011

    Un logiciel n’est malheureusement jamais parfait...
    Si vous pensez avoir mis la main sur un bug, reportez le dans notre système de tickets en prenant bien soin de nous remonter certaines informations pertinentes : le type de navigateur et sa version exacte avec lequel vous avez l’anomalie ; une explication la plus précise possible du problème rencontré ; si possibles les étapes pour reproduire le problème ; un lien vers le site / la page en question ;
    Si vous pensez avoir résolu vous même le bug (...)

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

  • aarch64 : vp9 : Implement NEON loop filters

    13 novembre 2016, par Martin Storsjö
    aarch64 : vp9 : Implement NEON loop filters
    

    This work is sponsored by, and copyright, Google.

    These are ported from the ARM version ; thanks to the larger
    amount of registers available, we can do the loop filters with
    16 pixels at a time. The implementation is fully templated, with
    a single macro which can generate versions for both 8 and
    16 pixels wide, for both 4, 8 and 16 pixels loop filters
    (and the 4/8 mixed versions as well).

    For the 8 pixel wide versions, it is pretty close in speed (the
    v_4_8 and v_8_8 filters are the best examples of this ; the h_4_8
    and h_8_8 filters seem to get some gain in the load/transpose/store
    part). For the 16 pixels wide ones, we get a speedup of around
    1.2-1.4x compared to the 32 bit version.

    Examples of runtimes vs the 32 bit version, on a Cortex A53 :
    ARM AArch64
    vp9_loop_filter_h_4_8_neon : 144.0 127.2
    vp9_loop_filter_h_8_8_neon : 207.0 182.5
    vp9_loop_filter_h_16_8_neon : 415.0 328.7
    vp9_loop_filter_h_16_16_neon : 672.0 558.6
    vp9_loop_filter_mix2_h_44_16_neon : 302.0 203.5
    vp9_loop_filter_mix2_h_48_16_neon : 365.0 305.2
    vp9_loop_filter_mix2_h_84_16_neon : 365.0 305.2
    vp9_loop_filter_mix2_h_88_16_neon : 376.0 305.2
    vp9_loop_filter_mix2_v_44_16_neon : 193.2 128.2
    vp9_loop_filter_mix2_v_48_16_neon : 246.7 218.4
    vp9_loop_filter_mix2_v_84_16_neon : 248.0 218.5
    vp9_loop_filter_mix2_v_88_16_neon : 302.0 218.2
    vp9_loop_filter_v_4_8_neon : 89.0 88.7
    vp9_loop_filter_v_8_8_neon : 141.0 137.7
    vp9_loop_filter_v_16_8_neon : 295.0 272.7
    vp9_loop_filter_v_16_16_neon : 546.0 453.7

    The speedup vs C code in checkasm tests is around 2-7x, which is
    pretty much the same as for the 32 bit version. Even if these functions
    are faster than their 32 bit equivalent, the C version that we compare
    to also became around 1.3-1.7x faster than the C version in 32 bit.

    Based on START_TIMER/STOP_TIMER wrapping around a few individual
    functions, the speedup vs C code is around 4-5x.

    Examples of runtimes vs C on a Cortex A57 (for a slightly older version
    of the patch) :
    A57 gcc-5.3 neon
    loop_filter_h_4_8_neon : 256.6 93.4
    loop_filter_h_8_8_neon : 307.3 139.1
    loop_filter_h_16_8_neon : 340.1 254.1
    loop_filter_h_16_16_neon : 827.0 407.9
    loop_filter_mix2_h_44_16_neon : 524.5 155.4
    loop_filter_mix2_h_48_16_neon : 644.5 173.3
    loop_filter_mix2_h_84_16_neon : 630.5 222.0
    loop_filter_mix2_h_88_16_neon : 697.3 222.0
    loop_filter_mix2_v_44_16_neon : 598.5 100.6
    loop_filter_mix2_v_48_16_neon : 651.5 127.0
    loop_filter_mix2_v_84_16_neon : 591.5 167.1
    loop_filter_mix2_v_88_16_neon : 855.1 166.7
    loop_filter_v_4_8_neon : 271.7 65.3
    loop_filter_v_8_8_neon : 312.5 106.9
    loop_filter_v_16_8_neon : 473.3 206.5
    loop_filter_v_16_16_neon : 976.1 327.8

    The speed-up compared to the C functions is 2.5 to 6 and the cortex-a57
    is again 30-50% faster than the cortex-a53.

    Signed-off-by : Martin Storsjö <martin@martin.st>

    • [DBH] libavcodec/aarch64/Makefile
    • [DBH] libavcodec/aarch64/vp9dsp_init_aarch64.c
    • [DBH] libavcodec/aarch64/vp9lpf_neon.S
  • command line settings for audio equalizer ffmpeg sox

    9 novembre 2016, par user1320370

    I need to add an equalizer effect on some flac files :

    f=4043, 1.65q, g=9.5; f=7024, 1.09q, g=3.7; f=9254, 0.94q, g=-2.5

    I have tried ffmpeg :

    ffmpeg -i solovoce_compress.flac -af equalizer=f=4043:width_type=q:w=1.65:g=9.5, equalizer=f=7024:width_type=q:w=1.09:g=3.7,equalizer=f=9254:width_type=q:w=0.94:g=-2.5 solovoce_equalizzato.flac

    but the result different to what I expect. These values were calculated by izotope ozone (professional audio editor software) and tested.

    I used the equivalent with sox and the result is the same.

    At this point I would like to try ffmpeg ’anequalizer’ filter that shows the graph so I can ’see’ the difference, but the documentation to show the graph is not clear and I have not found anything about it on the web.

    Can someone can please give me an example of how to use ’anequalizer’ with the plot enabled ?

  • How do terminal pipes in Python differ from those in Rust ?

    5 octobre 2022, par rust_convert

    To work on learning Rust (in a Tauri project) I am converting a Python 2 program that uses ffmpeg to create a custom video format from a GUI. The video portion converts successfully, but I am unable to get the audio to work. With the debugging I have done for the past few days, it looks like I am not able to read in the audio data in Rust correctly from the terminal pipe - what is working to read in the video data is not working for the audio. I have tried reading in the audio data as a string and then converting it to bytes but then the byte array appears empty. I have been researching the 'Pipe'-ing of data from the rust documentation and python documentation and am unsure how the Rust pipe could be empty or incorrect if it's working for the video.

    &#xA;

    From this python article and this rust stack overflow exchange, it looks like the python stdout pipe is equivalent to the rust stdin pipe ?

    &#xA;

    The python code snippet for video and audio conversion :

    &#xA;

    output=open(self.outputFile, &#x27;wb&#x27;)&#xA;devnull = open(os.devnull, &#x27;wb&#x27;)&#xA;&#xA;vidcommand = [ FFMPEG_BIN,&#xA;            &#x27;-i&#x27;, self.inputFile,&#xA;            &#x27;-f&#x27;, &#x27;image2pipe&#x27;,&#xA;            &#x27;-r&#x27;, &#x27;%d&#x27; % (self.outputFrameRate),&#xA;            &#x27;-vf&#x27;, scaleCommand,&#xA;            &#x27;-vcodec&#x27;, &#x27;rawvideo&#x27;,&#xA;            &#x27;-pix_fmt&#x27;, &#x27;bgr565be&#x27;,&#xA;            &#x27;-f&#x27;, &#x27;rawvideo&#x27;, &#x27;-&#x27;]&#xA;        &#xA;vidPipe = &#x27;&#x27;;&#xA;if os.name==&#x27;nt&#x27; :&#xA;    startupinfo = sp.STARTUPINFO()&#xA;    startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW&#xA;    vidPipe=sp.Popen(vidcommand, stdin = sp.PIPE, stdout = sp.PIPE, stderr = devnull, bufsize=self.inputVidFrameBytes*10, startupinfo=startupinfo)&#xA;else:&#xA;    vidPipe=sp.Popen(vidcommand, stdin = sp.PIPE, stdout = sp.PIPE, stderr = devnull, bufsize=self.inputVidFrameBytes*10)&#xA;&#xA;vidFrame = vidPipe.stdout.read(self.inputVidFrameBytes)&#xA;&#xA;audioCommand = [ FFMPEG_BIN,&#xA;    &#x27;-i&#x27;, self.inputFile,&#xA;    &#x27;-f&#x27;, &#x27;s16le&#x27;,&#xA;    &#x27;-acodec&#x27;, &#x27;pcm_s16le&#x27;,&#xA;    &#x27;-ar&#x27;, &#x27;%d&#x27; % (self.outputAudioSampleRate),&#xA;    &#x27;-ac&#x27;, &#x27;1&#x27;,&#xA;    &#x27;-&#x27;]&#xA;&#xA;audioPipe=&#x27;&#x27;&#xA;if (self.audioEnable.get() == 1):&#xA;    if os.name==&#x27;nt&#x27; :&#xA;        startupinfo = sp.STARTUPINFO()&#xA;        startupinfo.dwFlags |= sp.STARTF_USESHOWWINDOW&#xA;        audioPipe = sp.Popen(audioCommand, stdin = sp.PIPE, stdout=sp.PIPE, stderr = devnull, bufsize=self.audioFrameBytes*10, startupinfo=startupinfo)&#xA;    else:&#xA;        audioPipe = sp.Popen(audioCommand, stdin = sp.PIPE, stdout=sp.PIPE, stderr = devnull, bufsize=self.audioFrameBytes*10)&#xA;&#xA;    audioFrame = audioPipe.stdout.read(self.audioFrameBytes) &#xA;&#xA;currentFrame=0;&#xA;&#xA;while len(vidFrame)==self.inputVidFrameBytes:&#xA;    currentFrame&#x2B;=1&#xA;    if(currentFrame%30==0):&#xA;        self.progressBarVar.set(100.0*(currentFrame*1.0)/self.totalFrames)&#xA;    if (self.videoBitDepth.get() == 16):&#xA;        output.write(vidFrame)&#xA;    else:&#xA;        b16VidFrame=bytearray(vidFrame)&#xA;        b8VidFrame=[]&#xA;        for p in range(self.outputVidFrameBytes):&#xA;            b8VidFrame.append(((b16VidFrame[(p*2)&#x2B;0]>>0)&amp;0xE0)|((b16VidFrame[(p*2)&#x2B;0]&lt;&lt;2)&amp;0x1C)|((b16VidFrame[(p*2)&#x2B;1]>>3)&amp;0x03))&#xA;        output.write(bytearray(b8VidFrame))&#xA;&#xA;    vidFrame = vidPipe.stdout.read(self.inputVidFrameBytes) # Read where vidframe is to match up with audio frame and output?&#xA;    if (self.audioEnable.get() == 1):&#xA;&#xA;&#xA;        if len(audioFrame)==self.audioFrameBytes:&#xA;            audioData=bytearray(audioFrame) &#xA;&#xA;            for j in range(int(round(self.audioFrameBytes/2))):&#xA;                sample = ((audioData[(j*2)&#x2B;1]&lt;&lt;8) | audioData[j*2]) &#x2B; 0x8000&#xA;                sample = (sample>>(16-self.outputAudioSampleBitDepth)) &amp; (0x0000FFFF>>(16-self.outputAudioSampleBitDepth))&#xA;&#xA;                audioData[j*2] = sample &amp; 0xFF&#xA;                audioData[(j*2)&#x2B;1] = sample>>8&#xA;&#xA;            output.write(audioData)&#xA;            audioFrame = audioPipe.stdout.read(self.audioFrameBytes)&#xA;&#xA;        else:&#xA;            emptySamples=[]&#xA;            for samples in range(int(round(self.audioFrameBytes/2))):&#xA;                emptySamples.append(0x00)&#xA;                emptySamples.append(0x00)&#xA;            output.write(bytearray(emptySamples))&#xA;&#xA;self.progressBarVar.set(100.0)&#xA;&#xA;vidPipe.terminate()&#xA;vidPipe.stdout.close()&#xA;vidPipe.wait()&#xA;&#xA;if (self.audioEnable.get() == 1):&#xA;    audioPipe.terminate()&#xA;    audioPipe.stdout.close()&#xA;    audioPipe.wait()&#xA;&#xA;output.close()&#xA;

    &#xA;

    The Rust snippet that should accomplish the same goals :

    &#xA;

    let output_file = OpenOptions::new()&#xA;    .create(true)&#xA;    .truncate(true)&#xA;    .write(true)&#xA;    .open(&amp;output_path)&#xA;    .unwrap();&#xA;let mut writer = BufWriter::with_capacity(&#xA;    options.video_frame_bytes.max(options.audio_frame_bytes),&#xA;    output_file,&#xA;);&#xA;let ffmpeg_path = sidecar_path("ffmpeg");&#xA;#[cfg(debug_assertions)]&#xA;let timer = Instant::now();&#xA;&#xA;let mut video_cmd = Command::new(&amp;ffmpeg_path);&#xA;#[rustfmt::skip]&#xA;video_cmd.args([&#xA;    "-i", options.path,&#xA;    "-f", "image2pipe",&#xA;    "-r", options.frame_rate,&#xA;    "-vf", options.scale,&#xA;    "-vcodec", "rawvideo",&#xA;    "-pix_fmt", "bgr565be",&#xA;    "-f", "rawvideo",&#xA;    "-",&#xA;])&#xA;.stdin(Stdio::null())&#xA;.stdout(Stdio::piped())&#xA;.stderr(Stdio::null());&#xA;&#xA;// windows creation flag CREATE_NO_WINDOW: stops the process from creating a CMD window&#xA;// https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags&#xA;#[cfg(windows)]&#xA;video_cmd.creation_flags(0x08000000);&#xA;&#xA;let mut video_child = video_cmd.spawn().unwrap();&#xA;let mut video_stdout = video_child.stdout.take().unwrap();&#xA;let mut video_frame = vec![0; options.video_frame_bytes];&#xA;&#xA;let mut audio_cmd = Command::new(&amp;ffmpeg_path);&#xA;#[rustfmt::skip]&#xA;audio_cmd.args([&#xA;    "-i", options.path,&#xA;    "-f", "s16le",&#xA;    "-acodec", "pcm_s16le",&#xA;    "-ar", options.sample_rate,&#xA;    "-ac", "1",&#xA;    "-",&#xA;])&#xA;.stdin(Stdio::null())&#xA;.stdout(Stdio::piped())&#xA;.stderr(Stdio::null());&#xA;&#xA;#[cfg(windows)]&#xA;audio_cmd.creation_flags(0x08000000);&#xA;&#xA;let mut audio_child = audio_cmd.spawn().unwrap();&#xA;let mut audio_stdout = audio_child.stdout.take().unwrap();&#xA;let mut audio_frame = vec![0; options.audio_frame_bytes];&#xA;&#xA;while video_stdout.read_exact(&amp;mut video_frame).is_ok() {&#xA;    writer.write_all(&amp;video_frame).unwrap();&#xA;&#xA;    if audio_stdout.read_to_end(&amp;mut audio_frame).is_ok() {&#xA;        if audio_frame.len() == options.audio_frame_bytes {&#xA;            for i in 0..options.audio_frame_bytes / 2 {&#xA;                let temp_sample = ((u32::from(audio_frame[(i * 2) &#x2B; 1]) &lt;&lt; 8)&#xA;                    | u32::from(audio_frame[i * 2]))&#xA;                    &#x2B; 0x8000;&#xA;                let sample = (temp_sample >> (16 - 10)) &amp; (0x0000FFFF >> (16 - 10));&#xA;&#xA;                audio_frame[i * 2] = (sample &amp; 0xFF) as u8;&#xA;                audio_frame[(i * 2) &#x2B; 1] = (sample >> 8) as u8;&#xA;            }&#xA;        } else {&#xA;            audio_frame.fill(0x00);&#xA;        }&#xA;    }&#xA;    writer.write_all(&amp;audio_frame).unwrap();&#xA;}&#xA;&#xA;&#xA;video_child.wait().unwrap();&#xA;audio_child.wait().unwrap();&#xA;&#xA;#[cfg(debug_assertions)]&#xA;{&#xA;    let elapsed = timer.elapsed();&#xA;    dbg!(elapsed);&#xA;}&#xA;&#xA;writer.flush().unwrap();&#xA;

    &#xA;

    I have looked at the hex data of the files using HxD - regardless of how I alter the Rust program, I am unable to get data different from what is previewed in the attached image - so the audio pipe is incorrectly interfaced. I included a screenshot of the hex data from the working python program that converts the video and audio correctly.

    &#xA;

    HxD Python program hex output :

    &#xA;

    HxD Python program hex output

    &#xA;

    HxD Rust program hex output :

    &#xA;

    HxD Rust program hex output

    &#xA;