Recherche avancée

Médias (29)

Mot : - Tags -/Musique

Autres articles (42)

  • Qu’est ce qu’un éditorial

    21 juin 2013, par

    Ecrivez votre de point de vue dans un article. Celui-ci sera rangé dans une rubrique prévue à cet effet.
    Un éditorial est un article de type texte uniquement. Il a pour objectif de ranger les points de vue dans une rubrique dédiée. Un seul éditorial est placé à la une en page d’accueil. Pour consulter les précédents, consultez la rubrique dédiée.
    Vous pouvez personnaliser le formulaire de création d’un éditorial.
    Formulaire de création d’un éditorial Dans le cas d’un document de type éditorial, les (...)

  • La sauvegarde automatique de canaux SPIP

    1er avril 2010, par

    Dans le cadre de la mise en place d’une plateforme ouverte, il est important pour les hébergeurs de pouvoir disposer de sauvegardes assez régulières pour parer à tout problème éventuel.
    Pour réaliser cette tâche on se base sur deux plugins SPIP : Saveauto qui permet une sauvegarde régulière de la base de donnée sous la forme d’un dump mysql (utilisable dans phpmyadmin) mes_fichiers_2 qui permet de réaliser une archive au format zip des données importantes du site (les documents, les éléments (...)

  • Script d’installation automatique de MediaSPIP

    25 avril 2011, par

    Afin de palier aux difficultés d’installation dues principalement aux dépendances logicielles coté serveur, un script d’installation "tout en un" en bash a été créé afin de faciliter cette étape sur un serveur doté d’une distribution Linux compatible.
    Vous devez bénéficier d’un accès SSH à votre serveur et d’un compte "root" afin de l’utiliser, ce qui permettra d’installer les dépendances. Contactez votre hébergeur si vous ne disposez pas de cela.
    La documentation de l’utilisation du script d’installation (...)

Sur d’autres sites (5460)

  • H.264 muxing to MP4 from CCTV (HW) encoder using ffmpeg library in C / C++, how to fetch AVCodecContext::extradata

    26 mai 2016, par Dom

    I am trying to mux a video to mp4 file from packets received via SDK API of CCTV camera. The stream from CCTV seems to consist of packets of h264 I and P-frames only (no B-frames).

    The problem is, that the file is not playable in Daum PotPlayer when I leave the AVCodecContext::extradata empty, however, I can play the file in VLC. If I feed the extra data (probably not correctly - I just copy the first 50 bytes from the packet received from the HW encoder), the file is playable in PotPlayer, but not in VLC.

    I do not know, how to prepare the extradata properly.

    The code below shows the muxing.

    void WriteVideo()
    {
       AVFormatContext* formatContext = nullptr;
       AVStream* stream = nullptr;

       int ret = 0;

       ret = avformat_alloc_output_context2(&formatContext, nullptr, "mp4", OUTPUT_V_FILE_NAME);
       if (ret < 0)
       {
           fprintf(stderr, "Error occurred when allocating output context: %d\n", ret);
           return;
       }

       stream = avformat_new_stream(formatContext, nullptr);
       if (!stream)
       {
           avformat_free_context(formatContext);
           formatContext = nullptr;
           fprintf(stderr, "Error occurred creating new stream");
           return;
       }

       stream->codec->codec_tag = 0;

       if (formatContext->oformat->flags & AVFMT_GLOBALHEADER)
       {
           stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
       }


       stream->codec->codec_type = AVMEDIA_TYPE_VIDEO;
       stream->codec->codec_id = AV_CODEC_ID_H264;
       stream->codec->pix_fmt = AV_PIX_FMT_YUV420P;
       stream->codec->bit_rate = 4096000; // 8192000; // 4096000; // 384000;
       stream->codec->width = 1920; // 352
       stream->codec->height = 1080; // 288
       stream->codec->gop_size = 50;

       AVRational tb;
       tb.num = 1;
       tb.den = 25;
       stream->codec->time_base = tb;
       //stream->codec->field_order = AVFieldOrder::AV_FIELD_UNKNOWN;
       //stream->codec->color_primaries = AVColorPrimaries::AVCOL_PRI_BT470BG;
       //stream->codec->color_trc = AVColorTransferCharacteristic::AVCOL_TRC_GAMMA22;
       //stream->codec->colorspace = AVColorSpace::AVCOL_SPC_BT470BG;
       //stream->codec->chroma_sample_location = AVChromaLocation::AVCHROMA_LOC_CENTER;
       AVRational aratio;
       aratio.num = 1;
       aratio.den = 1;
       stream->codec->sample_aspect_ratio = aratio;
       // stream->codec->delay = 0;
       // stream->codec->color_range = AVColorRange::AVCOL_RANGE_MPEG;

       av_dump_format(formatContext, 0, formatContext->filename, 1);

       if (!(formatContext->oformat->flags & AVFMT_NOFILE))
       {
           if (avio_open(&formatContext->pb, formatContext->filename, AVIO_FLAG_WRITE) < 0)
           {
               avformat_free_context(formatContext);
               formatContext = nullptr;
               fprintf(stderr, "Error occurred when opening output file.");
               return;

           }
       }

       avformat_write_header(formatContext, nullptr);

       int frameIdx = 0;
       int pts = 0;
       int dts = 0;
       int pkt_pos = 0;
       int size = static_cast<int>(tmpRawFrameBuffer.size());

       AVPacket pkt = { 0 };
       av_init_packet(&amp;pkt);

       while (frameIdx &lt; size)
       {
           pkt.data = tmpRawFrameBuffer[frameIdx];
           pkt.size = tmpRawFrameSizes[frameIdx];

           // debug purphose start
           FILE* f;
           char filename[MAX_PATH];
           sprintf_s(filename, MAX_PATH, OUTPUT_PACKET_FILE_PATTERN_NAME, frameIdx);
           auto err = fopen_s(&amp;f, filename, "wb");
           if (err != 0)
           {
               fprintf(stderr, "Could not open %s\n", OUTPUT_V_FILE_NAME);
               exit(1);
           }

           fflush(stdout);
           fwrite(pkt.data, 1, pkt.size, f);
           fclose(f);
           // debug purphose end

           if (tmpRawFrameTypes[frameIdx] == VIDEO_I_FRAME)
           {
               pkt.flags |= AV_PKT_FLAG_KEY;
               stream->codec->extradata_size = 50;
               stream->codec->extradata = (uint8_t*)av_malloc(stream->codec->extradata_size);
               memcpy(stream->codec->extradata, pkt.data, stream->codec->extradata_size);
           }
           pkt.pts = pts++;
           pkt.dts = dts++;
           /* rescale output packet timestamp values from codec to stream timebase */
           // av_packet_rescale_ts(&amp;pkt, stream->codec->time_base, stream->time_base);
           pkt.pts = av_rescale_q(pkt.pts, stream->codec->time_base, stream->time_base);
           pkt.dts = av_rescale_q(pkt.dts, stream->codec->time_base, stream->time_base);
           pkt.duration = 512; // should be calculated (derived from FPS 25, and 12800)
           pkt.pos = -1;
           pkt.stream_index = stream->index;

           auto ret = av_write_frame(formatContext, &amp;pkt);
           if (ret &lt; 0)
           {
               fprintf(stderr, "Error while writing video frame: %d\n", ret);
               break;
           }
           av_packet_unref(&amp;pkt);
           ++frameIdx;
       }

       if (formatContext)
       {
           av_write_trailer(formatContext);
           if (!(formatContext->oformat->flags &amp; AVFMT_NOFILE)) avio_close(formatContext->pb); // close the output file
           avformat_free_context(formatContext);
           formatContext = nullptr;
       }
    }
    </int>

    It seems, the packet from camera (buffered in tmpRawFrameBuffer vector) contains some headers, but I am not able to parse them, I do not understand the meaning of the header.

    The first bytes of the I-frame packet looks like the dump bellow :

    00 00 01 FC 02 19 F0 87 A0 23 73 41 B6 C0 01 00
    00 00 00 01 67 4D 00 2A 95 A8 1E 00 89 F9 61 00
    00 03 00 01 00 00 03 00 32 84 00 00 00 01 68 EE
    3C 80 00 00 00 01 06 E5 01 19 80 00 00 00 01 65
    B8 00 00 08 C7 B0 23 FF F7 80 EE FE 63 B6 FB F5
    ...

    The first bytes of the first P-frame :

    00 00 01 FD E5 24 00 00 00 00 00 01 61 E0 22 27
    FF D6 B0 D7 A4 2B 71 6B 19 C5 87 CA BB 8B BF 60
    14 59 B4 00 CC BC 0F C0 9E FD 84 B5 FB C4 83 DB
    5A 8B 80 FC EC D6 33 6D DE 10 96 6F 31 41 86 5C
    D4 22 F9 33 48 5B CE 77 38 17 0C D6 DD C7 6C E8
    ...

    first bytes of next P-frame :

    00 00 01 FD 5E 2F 00 00 00 00 00 01 61 E0 42 2F
    FF E7 06 DD 3C 66 26 15 94 93 7A F1 30 8A 6D B8
    AD DD 6B 0F 38 89 1D 1B 5C AC 44 6A D7 D1 21 3B
    E2 29 F8 14 BB 98 1C 06 4D B6 10 BB DB B9 CA 4F
    0B ED B1 A9 06 78 8C EC 06 6D 9F 4F 79 0C 35 5B
    ...

    ...

    begining of next I-frame :

    00 00 01 FC 02 19 F0 87 A2 23 73 41 75 89 01 00
    00 00 00 01 67 4D 00 2A 95 A8 1E 00 89 F9 61 00
    00 03 00 01 00 00 03 00 32 84 00 00 00 01 68 EE
    3C 80 00 00 00 01 06 E5 01 1B 80 00 00 00 01 65
    B8 00 00 0F 07 F0 7F F6 6C 69 43 0F F0 28 DF 97
    ...

    Does anybody know, how to fill correctly the extradata ? I just made a copy of first 50 bytes, but it seems, this is not correct.

    Probably the headers are (AUD)(SPS)(PPS)(I-Slice)(PPS)(P-Slice)(PPS)(P-Slice) ... (AUD)(SPS)(PPS)(I-Slice) (http://stackoverflow.com/a/20686267/1699328), however, I do not know, how to extract data for the

    stream->codec->extradata

    I tried to get some inspiration in this post H.264 muxed to MP4 using libavformat not playing back, but I am not able to figure out what are values of spsFrameLen, ppsFrameLen and spsFrame.

    The result of the muxer (first and last bytes of the mp4 file) :

    00 00 00 20 66 74 79 70 69 73 6F 6D 00 00 02 00
    69 73 6F 6D 69 73 6F 32 61 76 63 31 6D 70 34 31
    00 00 00 08 66 72 65 65 00 26 2E 6D 6D 64 61 74
    00 00 00 0D FC 02 19 F0 87 A0 23 73 41 B6 C0 01
    00 00 00 00 16 67 4D 00 2A 95 A8 1E 00 89 F9 61
    00 00 03 00 01 00 00 03 00 32 84 00 00 00 04 68
    EE 3C 80 00 00 00 05 06 E5 01 19 80 00 01 C0 87
    65 B8 00 00 08 C7 B0 23 FF F7 80 EE FE 63 B6 FB
    F5 97 A8 6B 48 39 61 99 FD 99 27 41 F2 78 54 EE
    D1 38 8E E8 18 DD 05 E4 BA F4 EB 69 CF 91 5C 34
    ...
    ...
    ...
    95 B8 D8 D4 C3 AF A1 BA AC 28 F0 D4 D4 7C 48 9A
    0C A6 8C 4C 98 00 00 05 1E 6D 6F 6F 76 00 00 00
    6C 6D 76 68 64 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 03 E8 00 00 13 B0 00 01 00 00 01 00 00
    00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 40 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 02 00 00 04 48 74 72 61
    6B 00 00 00 5C 74 6B 68 64 00 00 00 03 00 00 00
    00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 13
    B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 40 00 00 00 07 80 00 00 04 38 00 00 00 00 00
    24 65 64 74 73 00 00 00 1C 65 6C 73 74 00 00 00
    00 00 00 00 01 00 00 13 B0 00 00 00 00 00 01 00
    00 00 00 03 C0 6D 64 69 61 00 00 00 20 6D 64 68
    64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 32
    00 00 00 FC 00 55 C4 00 00 00 00 00 2D 68 64 6C
    72 00 00 00 00 00 00 00 00 76 69 64 65 00 00 00
    00 00 00 00 00 00 00 00 00 56 69 64 65 6F 48 61
    6E 64 6C 65 72 00 00 00 03 6B 6D 69 6E 66 00 00
    00 14 76 6D 68 64 00 00 00 01 00 00 00 00 00 00
    00 00 00 00 00 24 64 69 6E 66 00 00 00 1C 64 72
    65 66 00 00 00 00 00 00 00 01 00 00 00 0C 75 72
    6C 20 00 00 00 01 00 00 03 2B 73 74 62 6C 00 00
    00 93 73 74 73 64 00 00 00 00 00 00 00 01 00 00
    00 83 61 76 63 31 00 00 00 00 00 00 00 01 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 80
    04 38 00 48 00 00 00 48 00 00 00 00 00 00 00 01
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    00 18 FF FF 00 00 00 2D 61 76 63 43 01 4D 00 2A
    FF E1 00 16 67 4D 00 2A 95 A8 1E 00 89 F9 61 00
    00 03 00 01 00 00 03 00 32 84 01 00 04 68 EE 3C
    80 00 00 00 18 73 74 74 73 00 00 00 00 00 00 00
    01 00 00 00 7E 00 00 02 00 00 00 00 1C 73 74 73
    73 00 00 00 00 00 00 00 03 00 00 00 01 00 00 00
    33 00 00 00 65 00 00 00 34 73 74 73 63 00 00 00
    00 00 00 00 03 00 00 00 01 00 00 00 3B 00 00 00
    01 00 00 00 02 00 00 00 37 00 00 00 01 00 00 00
    03 00 00 00 0C 00 00 00 01 00 00 02 0C 73 74 73
    7A 00 00 00 00 00 00 00 00 00 00 00 7E 00 01 C0
    C7 00 00 24 EE 00 00 2F 67 00 00 1D 83 00 00 2E
    8F 00 00 30 B6 00 00 2F 44 00 00 2F 50 00 00 34
    6B 00 00 30 BE 00 00 31 0C 00 00 31 E7 00 00 30
    EA 00 00 31 4E 00 00 31 A8 00 00 32 21 00 00 31
    E6 00 00 31 B5 00 00 31 14 00 00 31 AF 00 00 31
    9D 00 00 33 60 00 00 32 11 00 00 32 4C 00 00 31
    F0 00 00 32 91 00 00 43 43 00 00 44 29 00 00 44
    EC 00 00 44 20 00 00 44 86 00 00 45 AD 00 00 47
    47 00 00 46 9F 00 00 46 D9 00 00 47 BE 00 00 48
    CD 00 00 3E 50 00 00 40 98 00 00 41 0E 00 00 40
    43 00 00 41 07 00 00 41 BB 00 00 41 FF 00 00 30
    5E 00 00 33 C7 00 00 34 B7 00 00 33 F1 00 00 33
    0D 00 00 32 DB 00 01 89 86 00 00 3B E1 00 00 3C
    55 00 00 3C 64 00 00 3C B7 00 00 3C FD 00 00 3E
    54 00 00 3E C5 00 00 3E 1C 00 00 3E 94 00 00 3E
    44 00 00 3E D7 00 00 3F CC 00 00 3E D6 00 00 40
    00 00 00 40 4D 00 00 40 04 00 00 3F A9 00 00 40
    82 00 00 41 0F 00 00 41 64 00 00 41 E5 00 00 42
    1E 00 00 42 2C 00 00 42 80 00 00 42 4D 00 00 43
    9F 00 00 43 DA 00 00 44 45 00 00 44 21 00 00 44
    B7 00 00 45 22 00 00 45 E3 00 00 45 BF 00 00 46
    18 00 00 47 4B 00 00 45 05 00 00 47 34 00 00 46
    60 00 00 46 97 00 00 46 66 00 00 46 29 00 00 46
    38 00 00 47 1D 00 00 47 42 00 00 47 18 00 00 47
    13 00 00 46 52 00 00 47 48 00 00 46 F8 00 01 BE
    E3 00 00 3F 56 00 00 3B 32 00 00 38 F8 00 00 37
    56 00 00 36 2D 00 00 35 DA 00 00 34 6B 00 00 3E
    BE 00 00 3E B5 00 00 3F 33 00 00 3F AC 00 00 3F
    38 00 00 42 32 00 01 1B DC 00 01 80 50 00 01 14
    06 00 00 C2 BB 00 00 96 12 00 00 6D EC 00 00 54
    E6 00 00 3A AC 00 00 32 00 00 00 2F 0A 00 00 2D
    F1 00 00 1B 7F 00 00 00 1C 73 74 63 6F 00 00 00
    00 00 00 00 03 00 00 00 30 00 0F DD AB 00 1F 7D
    9E 00 00 00 62 75 64 74 61 00 00 00 5A 6D 65 74
    61 00 00 00 00 00 00 00 21 68 64 6C 72 00 00 00
    00 00 00 00 00 6D 64 69 72 61 70 70 6C 00 00 00
    00 00 00 00 00 00 00 00 00 2D 69 6C 73 74 00 00
    00 25 A9 74 6F 6F 00 00 00 1D 64 61 74 61 00 00
    00 01 00 00 00 00 4C 61 76 66 35 37 2E 32 33 2E
    31 30 30

    Thanks a lot for any advices.

  • Extract subtitle by language code via ffmpeg

    7 mai 2023, par TrustFound

    I have a simple task - extract subtitle for exact language from tvshows.&#xA;For example, I want to extract English subtitles from Netflix's show.&#xA;As you know there're a few different types of subtitles : forced, full and SDH.&#xA;So I want to extract all of them if it has eng language code.

    &#xA;

    To extract 1 subtitle from file I used this code for windows :

    &#xA;

    FOR %%i IN (*.mkv) DO (ffmpeg.exe -i "%%i" -map 0:s:m:language:eng -c copy "%%~ni".eng.srt)&#xA;

    &#xA;

    It worked fine with 1 english subtitle per file. But if it contains 2, ffmpeg shows error

    &#xA;

    &#xA;

    SRT supports only a single subtitles stream

    &#xA;

    &#xA;


    &#xA;

    MI is...

    &#xA;

      &#xA;
    • Stream #0:2(eng) : Subtitle : subrip
    • &#xA;

    • Stream #0:3(eng) : Subtitle : subrip
    • &#xA;

    • Stream #0:4(ara) : Subtitle : subrip
    • &#xA;

    • ...
    • &#xA;

    &#xA;


    &#xA;

    So I should set 2 or more output files. I tried to figure out how to do this and found similar threads on reddit and stacksoverflow. They said there's no way to do this without ffprobe.&#xA;So I used ffprobe to parse all subtitle tracks and their language code.

    &#xA;

    FOR %%i IN (*.mkv) DO (ffprobe -loglevel error -select_streams s -show_entries stream=index:stream_tags=language -of csv=p=0 -i %%i > subs.txt)&#xA;

    &#xA;

    File contains this info :

    &#xA;

      &#xA;
    • 2,eng
    • &#xA;

    • 3,eng
    • &#xA;

    • 4,ara
    • &#xA;

    • ...
    • &#xA;

    &#xA;


    &#xA;

    As I understand I should use integers and set them values 2 and 3. I want to get output like this

    &#xA;

    &#xA;
      &#xA;
    • MovieName.2.eng.srt
    • &#xA;

    • MovieName.3.eng.srt
    • &#xA;

    &#xA;

    &#xA;

    If it easier to extract all subs, let it be. I tried to do this too but I dont know how to set integers and use them :(&#xA;So what I should do ?&#xA;Thanks in advance

    &#xA;

  • What's the most elegant way to get the language codes from an MKV file with multiple audio tracks ?

    30 janvier 2017, par WackGet

    I need a way to get the language codes from MKV files which have multiple audio tracks.

    ffmpeg produces output which I could then filter using regular expressions but it doesn’t seem very elegant :

    $ ffmpeg -i file.mkv 2>&amp;1 | grep Audio
    Stream #0:1(eng): Audio: mp2, 48000 Hz, stereo, s16, 192 kb/s (default)
    Stream #0:2(nar): Audio: mp2, 48000 Hz, mono, s16, 64 kb/s (default)

    mediainfo has the ability to extract language information but in files with multiple tracks, it concatenates the codes into a single string :

    $ mediainfo file.mkv --inform="Audio;%Language%"  
    ennar

    Is there a tool or command which will return language codes for multiple tracks in a nicer way, or a tool which would let me specify a track number and return the language code for that track only ?