Recherche avancée

Médias (1)

Mot : - Tags -/Christian Nold

Autres articles (45)

  • 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

  • Ajouter notes et légendes aux images

    7 février 2011, par

    Pour pouvoir ajouter notes et légendes aux images, la première étape est d’installer le plugin "Légendes".
    Une fois le plugin activé, vous pouvez le configurer dans l’espace de configuration afin de modifier les droits de création / modification et de suppression des notes. Par défaut seuls les administrateurs du site peuvent ajouter des notes aux images.
    Modification lors de l’ajout d’un média
    Lors de l’ajout d’un média de type "image" un nouveau bouton apparait au dessus de la prévisualisation (...)

  • Contribute to a better visual interface

    13 avril 2011

    MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
    Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community.

Sur d’autres sites (10221)

  • ffmpeg : mix/merge multiple mp3 files, some do not mix

    28 août 2018, par C. Ovidiu

    I am trying to merge multiple mp3 files on top of each other on a CentOS 7 server.

    I am trying with ffmpeg but I have mixed results. When mixing 4 files, the last one for example does not mix with the others and is not audible in the final output.

    If I mix this file with another one or two(so max 3 files merged), it works.

    Is there a limit when merging ? For reference, each file is about 10mb is size and 5:00 minutes long.

    This is the command I am using

    ffmpeg -i /var/www/vhosts/site/httpdocs/uploads/tracks/1.mp3 -i /var/www/vhosts/site/httpdocs/uploads/tracks/2.mp3 -i /var/www/vhosts/site/httpdocs/uploads/tracks/3.mp3 -i /var/www/vhosts/site/httpdocs/uploads/tracks/4.mp3 -filter_complex amerge -ac 2 -c:a libmp3lame -q:a 4 /var/www/vhosts/site/httpdocs/uploads/mix.mp3

    The output after merging is this :

    ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers
     built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-28)
     configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect
     libavutil      54. 31.100 / 54. 31.100
     libavcodec     56. 60.100 / 56. 60.100
     libavformat    56. 40.101 / 56. 40.101
     libavdevice    56.  4.100 / 56.  4.100
     libavfilter     5. 40.101 /  5. 40.101
     libavresample   2.  1.  0 /  2.  1.  0
     libswscale      3.  1.101 /  3.  1.101
     libswresample   1.  2.101 /  1.  2.101
     libpostproc    53.  3.100 / 53.  3.100
    [mp3 @ 0x1c8ba60] Skipping 0 bytes of junk at 1044.
    Input #0, mp3, from '/var/www/vhosts/site/httpdocs/uploads/tracks/1.mp3':
     Duration: 00:05:44.08, start: 0.025057, bitrate: 320 kb/s
       Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
       Metadata:
         encoder         : LAME3.98r
       Side data:
         replaygain: track gain - 6.000000, track peak - unknown, album gain - unknown, album peak - unknown,
    [mp3 @ 0x1c8eac0] Skipping 0 bytes of junk at 2446.
    [mp3 @ 0x1c8eac0] Estimating duration from bitrate, this may be inaccurate
    Input #1, mp3, from '/var/www/vhosts/site/httpdocs/uploads/tracks/2.mp3':
     Metadata:
       genre           : Other
     Duration: 00:05:44.19, start: 0.000000, bitrate: 320 kb/s
       Stream #1:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
    [mp3 @ 0x1c9d640] Skipping 0 bytes of junk at 1044.
    Input #2, mp3, from '/var/www/vhosts/site/httpdocs/uploads/tracks/3.mp3':
     Duration: 00:05:44.08, start: 0.025057, bitrate: 320 kb/s
       Stream #2:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
       Metadata:
         encoder         : LAME3.98r
       Side data:
         replaygain: track gain - 3.400000, track peak - unknown, album gain - unknown, album peak - unknown,
    [mp3 @ 0x1cc2b80] Skipping 0 bytes of junk at 1044.
    Input #3, mp3, from '/var/www/vhosts/site/httpdocs/uploads/tracks/4.mp3':
     Duration: 00:05:44.08, start: 0.025057, bitrate: 320 kb/s
       Stream #3:0: Audio: mp3, 44100 Hz, stereo, s16p, 320 kb/s
       Metadata:
         encoder         : LAME3.98r
       Side data:
         replaygain: track gain - 12.100000, track peak - unknown, album gain - unknown, album peak - unknown,
    [Parsed_amerge_0 @ 0x1cc34e0] No channel layout for input 1
    [Parsed_amerge_0 @ 0x1cc34e0] Input channel layouts overlap: output layout will be determined by the number of distinct input channels
    Output #0, mp3, to '/var/www/vhosts/site/httpdocs/uploads/mix.mp3':
     Metadata:
       TSSE            : Lavf56.40.101
       Stream #0:0: Audio: mp3 (libmp3lame), 44100 Hz, stereo, s16p (default)
       Metadata:
         encoder         : Lavc56.60.100 libmp3lame
    Stream mapping:
     Stream #0:0 (mp3) -> amerge:in0
     Stream #1:0 (mp3) -> amerge:in1
     amerge -> Stream #0:0 (libmp3lame)
    Press [q] to stop, [?] for help
    size=    2360kB time=00:05:44.03 bitrate=  56.2kbits/s
    video:0kB audio:2360kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.010468%

    Is there a way to solve this, or at least to know what the issue is ?

    Also, some people recommended sox, but I can’t figure how to install it on CentOS.

    Any other alternatives will also help.

    Thank you

  • Python cv2 script that scans a giant image to a video. Raises error : Unknown C++ exception from OpenCV code

    26 avril 2022, par Nolrenea

    I wrote a script that scans a giant image to make a video. Normally I just post my scripts straight to my Code Review account, but this script is ugly, needs to be refactored, implements only horizontal scrolling and contains a bug that I can't get rid of.

    


    It is working but not perfect, I can't get the last line at the bottom of the image, with height of image_height % 1080. If I ignore it, the code is working fine, if I try to fix it, it throws exceptions.

    


    Example :

    


    Original image (Google Drive)

    


    Video Output (Google Drive)

    


    As you can see from the video, everything is working properly except the fact that I can't get the bottom line.

    


    Full working code

    



    

    import cv2
import numpy as np
import random
import rpack
from fractions import Fraction
from math import prod

def resize_guide(image_size, target_area):
    aspect_ratio = Fraction(*image_size).limit_denominator()
    horizontal = aspect_ratio.numerator
    vertical = aspect_ratio.denominator
    unit_length = (target_area/(horizontal*vertical))**.5
    return (int(horizontal*unit_length), int(vertical*unit_length))

fourcc = cv2.VideoWriter_fourcc(*'h264')
FRAME = np.zeros((1080, 1920, 3), dtype=np.uint8)

def new_frame():
    return np.ndarray.copy(FRAME)

def center(image):
    frame = new_frame()
    h, w = image.shape[:2]
    yoff = round((1080-h)/2)
    xoff = round((1920-w)/2)
    frame[yoff:yoff+h, xoff:xoff+w] = image
    return frame

def image_scanning(file, fps=60, pan_increment=64, horizontal_increment=8, fast_decrement=256):
    image = cv2.imread(file)
    height, width = image.shape[:2]
    assert width*height >= 1920*1080
    video_writer = cv2.VideoWriter(file+'.mp4', fourcc, fps, (1920, 1080))
    fit_height = True
    if height < 1080:
        width = width*1080/height
        image = cv2.resize(image, (width, 1080), interpolation = cv2.INTER_AREA)
    aspect_ratio = width / height
    zooming_needed = False
    if 4/9 <= aspect_ratio <= 16/9:
        new_width = round(width*1080/height)
        fit = cv2.resize(image, (new_width, 1080), interpolation = cv2.INTER_AREA)
        zooming_needed = True
    
    elif 16/9 < aspect_ratio <= 32/9:
        new_height = round(height*1920/width)
        fit = cv2.resize(image, (1920, new_height), interpolation = cv2.INTER_AREA)
        fit_height = False
        zooming_needed = True
    
    centered = center(fit)
    for i in range(fps):
        video_writer.write(centered)
    if fit_height:
        xoff = round((1920 - new_width)/2)
        while xoff:
            if xoff - pan_increment >= 0:
                xoff -= pan_increment
            else:
                xoff = 0
            frame = new_frame()
            frame[0:1080, xoff:xoff+new_width] = fit
            video_writer.write(frame)
    else:
        yoff = round((1080 - new_height)/2)
        while yoff:
            if yoff - pan_increment >= 0:
                yoff -= pan_increment
            else:
                yoff = 0
            frame = new_frame()
            frame[yoff:yoff+new_height, 0:1920] = fit
            video_writer.write(frame)
    
    if zooming_needed:
        if fit_height:
            width_1, height_1 = new_width, 1080
        else:
            width_1, height_1 = 1920, new_height
        new_area = width_1 * height_1
        original_area = width * height
        area_diff = original_area - new_area
        unit_diff = area_diff / fps
        for i in range(1, fps+1):
            zoomed = cv2.resize(image, resize_guide((width_1, height_1), new_area+unit_diff*i), interpolation=cv2.INTER_AREA)
            zheight, zwidth = zoomed.shape[:2]
            zheight = min(zheight, 1080)
            zwidth = min(zwidth, 1920)
            frame = new_frame()
            frame[0:zheight, 0:zwidth] = zoomed[0:zheight, 0:zwidth]
            video_writer.write(frame)
    y, x = 0, 0
    completed = False
    while y != height - 1080:
        x = 0
        while x != width - 1920:
            if x + horizontal_increment + 1920 <= width:
                x += horizontal_increment
                frame = image[y:y+1080, x:x+1920]
                video_writer.write(frame)
            else:
                x = width - 1920
                frame = image[y:y+1080, x:x+1920]
                for i in range(round(fps/3)):
                    video_writer.write(frame)
                if y == height - 1080:
                    completed = True
        while x != 0:
            if x - fast_decrement - 1920 >= 0:
                x -= fast_decrement
            else:
                x = 0
            frame = image[y:y+1080, x:x+1920]
            video_writer.write(frame)
        if y + 2160 <= height:
            y += 1080
        else:
            y = height - 1080
    cv2.destroyAllWindows()
    video_writer.release()
    del video_writer


    


    The above the the code needed to produce the example video. It is working but the bottom line is missing.

    


    Now if I change the last few lines to this :

    


            if y + 2160 <= height:
            y += 1080
        else:
            y = height - 1080
            x = 0
            while x != width - 1920:
                if x + horizontal_increment + 1920 <= width:
                    x += horizontal_increment
                    frame = image[y:y+1080, x:x+1920]
                    video_writer.write(frame)
    cv2.destroyAllWindows()
    video_writer.release()
    del video_writer


    


    I expect it to include the bottom line, but it just throws exceptions instead :

    


    OpenCV: FFMPEG: tag 0x34363268/&#x27;h264&#x27; is not supported with codec id 27 and format &#x27;mp4 / MP4 (MPEG-4 Part 14)&#x27;&#xA;OpenCV: FFMPEG: fallback to use tag 0x31637661/&#x27;avc1&#x27;&#xA;---------------------------------------------------------------------------&#xA;error                                     Traceback (most recent call last)&#xA; in <module>&#xA;----> 1 image_scanning("D:/collages/91f53ebcea2a.png")&#xA;&#xA; in image_scanning(file, fps, pan_increment, horizontal_increment, fast_decrement)&#xA;    122                     x &#x2B;= horizontal_increment&#xA;    123                     frame = image[y:y&#x2B;1080, x:x&#x2B;1920]&#xA;--> 124                     video_writer.write(frame)&#xA;    125     cv2.destroyAllWindows()&#xA;    126     video_writer.release()&#xA;&#xA;error: Unknown C&#x2B;&#x2B; exception from OpenCV code&#xA;</module>

    &#xA;

    (If you can't get the example code working I can't help you, but I am using Python 3.9.10 x64 on Windows 10, and I have this file : "C :\Windows\System32\openh264-1.8.0-win64.dll", the '.avi' format generates video files with Gibibytes (binary unit, not SI Gigabyte) of size)

    &#xA;

    How to get rid of the exception ?

    &#xA;

  • Errors while ffmpeg compiling

    10 mai 2012, par iSun

    I trying to compile ffmpeg through the following script, but I got errors while compiling : (Using windows 7 - android ndk 7rb and cygwin)

    s@s-PC /cygdrive/f/export/ffmpeg-0.8.10
    $ ./setup.sh
    F:/Compiler/android-ndk-r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/wind                                                                                                    ows/bin/arm-linux-androideabi-gcc is unable to create an executable file.
    C compiler test failed.

    If you think configure made a mistake, make sure you are using the latest
    version from Git.  If the latest version fails, report the problem to the
    ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.
    Include the log file "config.log" produced by configure as this will help
    solving the problem.
    ./setup.sh: line 48: --extra-cflags=: command not found
    ./setup.sh: line 51: --extra-ldflags=: command not found
    ./setup.sh: line 53: --extra-ldflags=: command not found
    Makefile:1: config.mak: No such file or directory
    libavutil/Makefile:1: libavutil/../config.mak: No such file or directory
    libavutil/../subdir.mak:96: warning: overriding recipe for target `libavutil/&#39;
    libavutil/../subdir.mak:26: warning: ignoring old recipe for target `libavutil/&#39;
    libavutil/../subdir.mak:96: warning: overriding recipe for target `libavutil/&#39;
    libavutil/../subdir.mak:96: warning: ignoring old recipe for target `libavutil/&#39;
    Makefile:239: /tests/fate.mak: No such file or directory
    Makefile:240: /tests/fate2.mak: No such file or directory
    Makefile:242: /tests/fate/aac.mak: No such file or directory
    Makefile:243: /tests/fate/als.mak: No such file or directory
    Makefile:244: /tests/fate/fft.mak: No such file or directory
    Makefile:245: /tests/fate/h264.mak: No such file or directory
    Makefile:246: /tests/fate/mp3.mak: No such file or directory
    Makefile:247: /tests/fate/vorbis.mak: No such file or directory
    Makefile:248: /tests/fate/vp8.mak: No such file or directory
    make: *** No rule to make target `/tests/fate/vp8.mak&#39;.  Stop.
    Makefile:1: config.mak: No such file or directory
    libavutil/Makefile:1: libavutil/../config.mak: No such file or directory
    libavutil/../subdir.mak:96: warning: overriding recipe for target `libavutil/&#39;
    libavutil/../subdir.mak:26: warning: ignoring old recipe for target `libavutil/&#39;
    libavutil/../subdir.mak:96: warning: overriding recipe for target `libavutil/&#39;
    libavutil/../subdir.mak:96: warning: ignoring old recipe for target `libavutil/&#39;
    Makefile:239: /tests/fate.mak: No such file or directory
    Makefile:240: /tests/fate2.mak: No such file or directory
    Makefile:242: /tests/fate/aac.mak: No such file or directory
    Makefile:243: /tests/fate/als.mak: No such file or directory
    Makefile:244: /tests/fate/fft.mak: No such file or directory
    Makefile:245: /tests/fate/h264.mak: No such file or directory
    Makefile:246: /tests/fate/mp3.mak: No such file or directory
    Makefile:247: /tests/fate/vorbis.mak: No such file or directory
    Makefile:248: /tests/fate/vp8.mak: No such file or directory
    make: *** No rule to make target `/tests/fate/vp8.mak&#39;.  Stop.

    Here is my script :

       #!/bin/bash

       export TMPDIR=C:/cygwin/tmp

       ANDROID_API=android-8
       export ANDROID_NDK=F:/Compiler/android-ndk-r7b
       export ANDROID_SDK=F:/Compiler/android-sdk
       SYSROOT=$ANDROID_NDK/platforms/$ANDROID_API/arch-arm
       ANDROID_BIN=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin
       CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-
       export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

       export ARM_ROOT=$ANDROID_NDK
       export ARM_INC=$ARM_ROOT/platforms/android-5/arch-arm/usr/include
       export ARM_LIB=$ARM_ROOT/platforms/android-5/arch-arm/usr/lib
       export LIB_INC=${HOME}/include
       export LIB_LIB=${HOME}/lib


       CFLAGS=" -I$ARM_INC -fPIC -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID  -Wa,--noexecstack -MMD -MP "
       LDFLAGS=" -nostdlib -Bdynamic  -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$ARM_LIB -nostdlib $ARM_LIB/crtbegin_dynamic.o $ARM_LIB/crtend_android.o -lc -lm -ldl -lgcc "

       FLAGS="--target-os=linux
       --enable-cross-compile
       --cross-prefix=$CROSS_COMPILE
       --arch=arm --prefix=$HOME
       --disable-shared
       --enable-static
       --extra-libs=-static
       --extra-cflags=--static
       --enable-small
       --disable-asm
       --disable-yasm
       --disable-amd3dnow
       --disable-amd3dnowext
       --disable-mmx
       --disable-mmx2
       --disable-sse
       --disable-ssse3
       --disable-indevs"


       export CFLAGS=$EXTRA_CFLAGS
       export LDFLAGS=$EXTRA_LDFLAGS


    ./configure $FLAGS
    --extra-cflags="$CFLAGS"
    --extra-ldflags="$LDFLAGS" \
    --cc="${CROSS_COMPILE}gcc
    --sysroot=${SYSROOT}"
    --extra-ldflags="$LDFLAGS" \
    --cxx="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}" \
    --nm="${CROSS_COMPILE}nm" \
    --ar="${CROSS_COMPILE}ar"


    make clean
    make -j4 || exit 1
    make install || exit 1

    Any ideas ?