Extracting the h264 part of a video file (demuxing)

后端 未结 1 1200
日久生厌
日久生厌 2021-01-17 06:19

I am trying to demux a video file into the video part (h264, mpeg4, h265, vp8, etc) and the audio part (mp3, aac, ac3, etc) and the subtitle part <

1条回答
  •  执笔经年
    2021-01-17 07:03

    You need to convert an H.264 bitstream from length prefixed mode to start code prefixed mode.This is required by some streaming formats, typically the MPEG-2 transport stream format ("mpegts").

    Take a look at https://www.ffmpeg.org/ffmpeg-bitstream-filters.html#h264_005fmp4toannexb

    Look at lines from 402 to 424 and from 842 to 843. https://www.ffmpeg.org/doxygen/0.7/crystalhd_8c-source.html

    I used it, to extract h264 from mp4.

    //Use this filter on your first h264 input AVPacket
    AVFormatContext *ifmt_ctx = NULL;
    //...
    //...   //init input
    //...
    AVPacket *firstPacket;
    //...
    //...   //get packet from stream
    //...
    uint8_t *dummy_p;
    int dummy_int;
    AVBitStreamFilterContext *filter = v_bitstream_filter_init("h264_mp4toannexb");
    if (!filter)
    {
        printf("Can't open filter\n");
        exit(1);
    }
    ret = av_bitstream_filter_filter(filter, ifmt_ctx->streams[videoindex]->codec, NULL,
                                               &dummy_p, &dummy_int,
                                               firstPacket->data, firstPacket->size, 0);
    if( ret < 0 )
    {
         printf("Can't filter\n");
         exit(1);
    }
    //  use dummy_p to write to file, as first packet
    

    0 讨论(0)
提交回复
热议问题