ffmpeg:一个简单的格式转换器

本文介绍了如何利用ffmpeg API实现一个简单的视频格式转换器,重点关注H264的AVC1和带有起始码的H264封装格式之间的转换。在实际操作中,通常MP4、MKV、FLV等格式不含起始码,而AVI格式则包含。ffmpeg的'h264_mp4toannexb'过滤器可以实现从不含起始码的格式到含起始码格式的转换。
摘要由CSDN通过智能技术生成

        参考ffmpegAPI提供的例子实现了一个简单的封装格式转换器,在实际转换时候,需要考虑对h264的两种封装格式分别是h264和avc1。
       AVC1 描述:H.264 bitstream without start codes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的。
      H264 描述:H.264 bitstream with start codes.一般对于一下HDVD等电影的压制格式,是带有起始码0×00000001的。
       一般的像(mp4、mkv、flv)的封装格式都是没有startcode的AVC1。 而像avi的封装格式则是有start codes的H264 。ffmpeg提供了一个名称为“h264_mp4toannexb”的bitstream filter。其会将像mp4这样的没有start code的格式转换为像avi这样的有start code。 使用方法如下: 

//注册filter
 AVBitStreamFilterContext * vbsf = av_bitstream_filter_init("h264_mp4toannexb");

//转换
if (pkt.stream_index == AVMEDIA_TYPE_VIDEO &&
                    in_stream->codecpar->codec_id == AV_CODEC_ID_H264) {
                AVPacket fpkt = pkt;
                int a = av_bitstream_filter_filter(vbsf,
                                                   out_stream->codec, NULL, &fpkt.data, &fpkt.size,
                                                   pkt.data, pkt.size, pkt.flags & AV_PKT_FLAG_KEY);
                pkt.data = fpkt.data;
                pkt.size = fpkt.size;
            }
一个完整的格式转换代码如下:
if(In
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值