Recherche avancée

Médias (0)

Mot : - Tags -/objet éditorial

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (30)

  • Websites made ​​with MediaSPIP

    2 mai 2011, par

    This page lists some websites based on MediaSPIP.

  • Keeping control of your media in your hands

    13 avril 2011, par

    The vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
    While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
    MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
    MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...)

  • Creating farms of unique websites

    13 avril 2011, par

    MediaSPIP platforms can be installed as a farm, with a single "core" hosted on a dedicated server and used by multiple websites.
    This allows (among other things) : implementation costs to be shared between several different projects / individuals rapid deployment of multiple unique sites creation of groups of like-minded sites, making it possible to browse media in a more controlled and selective environment than the major "open" (...)

Sur d’autres sites (4707)

  • Integrate necessary ffmpeg libraries in own project for MCU (microcontrolers) [closed]

    16 septembre 2023, par Borel Kamnang

    I use two ffmpeg commands here :

    


    ffmpeg -i BigBuckBunny_320x180.mp4 -vf scale=192:96,setsar=1:1 outputBBB.mp4
ffmpeg -i outputBBB.mp4 -vf "fps=12,scale=-1:96:flags=lanczos,crop=192:in_h:(in_w-192)/2:0" -c:v rawvideo -pix_fmt rgb565be BigBuckBunny_192x96_12fps.rgb


    


    The first is to downscale an original video and the second is to convert the scaled video to a .rgb format.

    


    As anew user of ffmpeg, I would like to know what are libraries used for that two command to just integrate them in my Arduino IDE C++ project an just call the necessary functions to do the downscale and the conversion.

    


    And another of my concerns is knowing how I can run any ffmpeg in an Raspberry Pi Pico W (RP2040) or ESP32 microcontroller ?

    


    I tried to include the ffmpeg libraries folder in a created Arduino IDE project for Raspberry pico w and the link for files doesn't work. In addition to having the config.h and config components.h files missing in the folder downloaded from the ffmpeg site, there are too many dependencies between .h and .c files.

    


    extern "C" {
  #include "src/ffmpeg/libavcodec/avcodec.h"       
  #include "src/ffmpeg/libavutil/mathematics.h"
}
void setup() {
   Serial.begin(115200);
   delay(10000);
 }
 loop(){
 }


    


    It's been three days today that I've been trying to compile from Arduino IDE, and correct the links in the files.
The problem is also that I don't even have the certainty of what it will work in the Raspberry Pi PicoW or ESP32 afterwards.

    


  • How to preserve data stream with none codec from a video while compressing it using ffmpeg ?

    5 octobre 2022, par rj_7

    I'm using the following command to compress a video of size 1.5GB to 80 MB.

    


    ffmpeg -i input.mp4 -copy_unknown -map_metadata 0 -c copy -c:v h264 -b:v 5000k -c:a aac -b:a 48k -map 0:v -map 0:a -map 0:d output.mp4


    


    The problem I'm facing is - it doesn't copy the data stream to the output video even when I explicitly mention it via mapping. If I don't use the -map options for each kind of stream, it just process the video and audio as expected. But I also want the data stream in my output video.

    


    The logs for the above command are -

    


    ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --disable-static --enable-shared --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --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-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000022581bc0f80] stream 0, timescale not set
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41isomiso2
    creation_time   : 2021-09-16T16:10:08.000000Z
    artist          : AnafiThermal-H006560
    title           : Thu, 16 Sep 2021 09:10:08 -0700
    date            : 2021-09-16T09:10:08-07:00
    make            : Parrot
    model           : AnafiThermal
    encoder         : PI040445AC0H006560
    location        : +33.67128695-117.61610583+415.50/
    com.apple.quicktime.artist: AnafiThermal-H006560
    com.apple.quicktime.title: Thu, 16 Sep 2021 09:10:08 -0700
    com.apple.quicktime.creationdate: 2021-09-16T09:10:08-07:00
    com.apple.quicktime.make: Parrot
    com.apple.quicktime.model: AnafiThermal
    com.apple.quicktime.software: 1.8.0
    com.apple.quicktime.location.ISO6709: +33.67128695-117.61610583+415.50/
    com.parrot.model.id: 0919
    com.parrot.serial: PI040445AC0H006560
    com.parrot.build.id: anafi-thermal-1.8.0
    com.parrot.run.date: 2021-09-16T09:04:29-07:00
    com.parrot.run.id: 0B3D536B2F1A425EFA8978850B4C2C71
    com.parrot.boot.id: 992D5FBA74A04BA5077C3FCA3BE9C707
    com.parrot.video.mode: Standard
  Duration: 00:02:05.49, start: 0.000000, bitrate: 100391 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 3840x2160 [SAR 1:1 DAR 16:9], 99998 kb/s, 29.98 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      creation_time   : 2021-09-16T16:10:08.000000Z
      handler_name    : DefaultVideo
    Stream #0:1(eng): Data: none (mett / 0x7474656D), 27 kb/s (default)
    Metadata:
      creation_time   : 2021-09-16T16:10:08.000000Z
      handler_name    : ParrotVideoMetadata
    Stream #0:2(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 384 kb/s (default)
    Metadata:
      creation_time   : 2021-09-16T16:10:08.000000Z
      handler_name    : DefaultAudio
    Stream #0:3: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 320x180 [SAR 1:1 DAR 16:9], 90k tbr, 90k tbn, 90k tbc (attached pic)
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:3 -> #0:1 (mjpeg (native) -> h264 (libx264))
  Stream #0:2 -> #0:2 (aac (native) -> aac (native))
  Stream #0:1 -> #0:3 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0000022581c5e280] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
[libx264 @ 0000022582975a00] using SAR=1/1
[libx264 @ 0000022582975a00] MB rate (21600000) > level limit (16711680)
[libx264 @ 0000022582975a00] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0000022582975a00] profile High, level 6.2, 4:2:0, 8-bit
[libx264 @ 0000022582975a00] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=5000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[libx264 @ 000002258241c980] using SAR=1/1
[libx264 @ 000002258241c980] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 000002258241c980] profile High, level 5.1, 4:2:0, 8-bit
[libx264 @ 000002258241c980] 264 - core 159 - H.264/MPEG-4 AVC codec - Copyleft 2003-2019 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=12 lookahead_threads=2 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=5000 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
[mp4 @ 0000022581c5e280] Could not find tag for codec h264 in stream #1, codec not currently supported in container
Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
Error initializing output stream 0:0 --
[libx264 @ 000002258241c980] final ratefactor: 25.51
[libx264 @ 0000022582975a00] final ratefactor: 73.59
[aac @ 00000225829747c0] Qavg: 63100.754
[aac @ 00000225829747c0] 2 frames left in the queue on closing
Conversion failed!


    


    I've also tried mapping the streams via number, that doesn't work either (shows same logs as above).

    


    ffmpeg -i input.mp4 -copy_unknown -map_metadata 0 -c copy -c:v h264 -b:v 5000k -c:a aac -b:a 48k -map 0:0 -map 0:1 -map 0:2 output.mp4


    


    So, essentially my question is - How to preserve data stream (packed) with none codec from a video while compressing it using ffmpeg ?

    


  • How to grab ffmpeg's output as binary and write it to a file on the fly such that video players can play it in real time ?

    29 décembre 2022, par Mister Mystère

    I want to stream a RTSP-streaming device to a video player such as VLC but the catch is that, in between, the binary data needs to go through a custom high-speed serial link. I control what goes in this link from a C++ program.

    


    I was happily surprised to see that the following line allowed me to watch the RTSP stream by just opening "out.bin" from VLC which was a good lead for fast and efficient binary transmission of the stream :

    


    ffmpeg -i "rtsp://admin:password@X.X.X.X:554/h264Preview_01_main" -c:v copy -c:a copy -f mpegts out.bin


    


    I already wondered how ffmpeg manages to allow VLC to read that file, while itself writing to it at the same time. Turns out I was right to wonder, see below.

    


    I told myself I could make this command pipe its output to the standard output, and then in turn pipe the standard output to a file that I can read, (later, slice it, transmit the chunks and reconstruct it) and then write to an output file. However, this does not work :

    


    #include 
#include 
#include 

#define BUFSIZE 188 //MPEG-TS packet size

int main()
{
    char *cmd = (char*)"ffmpeg -i \"rtsp://admin:password@X.X.X.X:554/h264Preview_01_main\" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet";
    char buf[BUFSIZE];
    FILE *ptr, *file;

    file = fopen("./out.bin", "w");

    if (!file)
    {
        printf("Failed to open output file for writing, aborting");
       abort();
    }

    if ((ptr = popen(cmd, "r")) != NULL) {
       printf("Writing RTSP stream to file...");

       while (!kbhit())
       {
            if(fread(&buf, sizeof(char), BUFSIZE, ptr) != 0)
            {
               fwrite(buf, sizeof(char), BUFSIZE, file);
            }
            else
            {
                printf("No data\n");
            }
       }
       pclose(ptr);
    }
    else
    {
        printf("Failed to open pipe from ffmpeg command, aborting");
    }

    printf("End of program");

    fclose(file);
    return 0;
}


    


    Since VLC says "your input can't be opened" - whereas this works just fine :

    


    ffmpeg -i "rtsp://admin:password@X.X.X.X:554/h264Preview_01_main" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet > out.bin


    


    This is what ends up in the file after I close the program, versus the result of the command immediately above :
enter image description here

    


    The file is always 2kB regardless of how long I run the program : "No data" is shown repeatedly in the console output.

    


    Why doesn't it work ? If it is not just a bug, how can I grab the stream as binary at some point, and write it at the end to a file that VLC can read ?

    


    Update

    


    New code after applying Craig Estey's fix to my stupid mistake. The end result is that the MPEG-TS frames don't seem to shift anymore but the file writing stops partway into one of the first few frames (the console only shows a few ">" symbols and then stays silent, c.f. code).

    


    #include 
#include 
#include 

#define BUFSIZE 188                     // MPEG-TS packet size

int
main()
{
    char *cmd = (char *) "ffmpeg -i \"rtsp://127.0.0.1:8554/test.sdp\" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet";
    char buf[BUFSIZE];
    FILE *ptr,
    *file;

    file = fopen("./out.ts", "w");

    if (!file) {
        printf("Failed to open output file for writing, aborting");
        abort();
    }

    if ((ptr = popen(cmd, "r")) != NULL) {
        printf("Writing RTSP stream to file...");

        while(!kbhit()) {
            ssize_t rlen = fread(&buf, sizeof(char), BUFSIZE, ptr);
            if(rlen != 0)
            {
                printf(">");
                fwrite(buf, sizeof(char), rlen, file);
                fflush(file);
            }
        }
        pclose(ptr);
    }
    else {
        printf("Failed to open pipe from ffmpeg command, aborting");
    }

    printf("End of program");

    fclose(file);
    return 0;
}


    


    This can be tested on any computer with VLC and a webcam : open VLC, open capture device, capture mode directshow, (switch "play" for "stream"), next, display locally, select RTSP, Add, path=/test.sdp, next, transcoding=H264+MP3 (TS), replace rtsp ://:8554/ with rtsp ://127.0.0.1:8554/ in the generated command line, stream.

    


    To test that streaming is ok, you can just open a command terminal and enter "ffmpeg -i "rtsp ://127.0.0.1:8554/test.sdp" -c:v copy -c:a copy -f mpegts pipe:1 -loglevel quiet", the terminal should fill up with binary data.

    


    To test the program, just compile, run, and open out.ts after the program has run.