wmv转换mp4格式转换器_avi可以转化成什么格式

wmv转换mp4格式转换器_avi可以转化成什么格式MP4的视频H264封装有2种格式:h264和avc1,对于这个细节,很容易被忽略。笔者也是在改编LIVE555流媒体时,增加mp4文件类型支持时遇到了该问题。(一)首先,从原理上了解一下这2种格式的区别:AVC1描述:H.264bitstreamwithoutstartcodes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的。H264描述:H.26

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

原文:http://www.mworkbox.com/wp/work/314.html
MP4的视频H264封装有2种格式:h264和avc1,对于这个细节,很容易被忽略。笔者也是在改编LIVE555流媒体时,增加mp4文件类型支持时遇到了该问题。
(一)首先,从原理上了解一下这2种格式的区别:
AVC1 描述:H.264 bitstream without start codes.一般通过ffmpeg转码生成的视频,是不带起始码0×00000001的。
H264 描述:H.264 bitstream with start codes.一般对于一下HDVD等电影的压制格式,是带有起始码0×00000001的。
(二)其次,通过VLC播放器,可以查看到具体的格式。打开视频后,通过菜单【工具】/【编解码信息】可以查看到【编解码器】具体格式,举例如下,编解码器信息:
编码: H264 – MPEG-4 AVC (part 10) (avc1)
编码: H264 – MPEG-4 AVC (part 10) (h264)
(三)最后,分享一下ffmpeg demux MP4文件后,转换视频流为live555可直接使用的h264 ES流的经验和方法:
针对(avc1),av_read_frame后,取前四个字节为长度,把前四字节直接替换为0×00,0×00,0×00,0×01即可,但注意每个frame可以有多个NAUL:

  AVPacket pkt;
    AVPacket* packet = &pkt;
    av_init_packet(packet);
    av_read_frame(ctx, packet);

if(packet->stream_index == 0)
    {//is video stream

       const char start_code[4] = { 0, 0, 0, 1 };
            if(is_avc_ || memcmp(start_code, packet->data, 4) != 0)
            {//is avc1 code, have no start code of H264
                int len = 0;
                uint8_t *p = packet->data;

                is_avc_ = True;
                do 
                {//add start_code for each NAL, one frame may have multi NALs.
                    len = ntohl(*((long*)p));
                    memcpy(p, start_code, 4);

                    p += 4;
                    p += len;
                    if(p >= packet->data + packet->size)
                    {
                        break;
                    }
                } while (1);
            }
        }
//对于另外一种格式,(h264), 则直接对每个packet调用
//av_bitstream_filter_filter处理每个packet即可:

bsfc_ = av_bitstream_filter_init("h264_mp4toannexb");

   if(pkt->stream_index == 0)
   {//is video stream

      AVBitStreamFilterContext* bsfc = bsfc_;
        int a;
        while (bsfc) {
            AVPacket new_pkt = *pkt;
            a = av_bitstream_filter_filter(bsfc, encode_ctx_, NULL,
                &new_pkt.data, &new_pkt.size,
                pkt->data, pkt->size,
                pkt->flags & AV_PKT_FLAG_KEY);
            if(a == 0 && new_pkt.data != pkt->data && new_pkt.destruct) { uint8_t *t = (uint8_t*)(new_pkt.size + FF_INPUT_BUFFER_PADDING_SIZE); //the new should be a subset of the old so cannot overflow if(t) { memcpy(t, new_pkt.data, new_pkt.size); memset(t + new_pkt.size, 0, FF_INPUT_BUFFER_PADDING_SIZE); new_pkt.data = t; a = 1; } else
                    a = AVERROR(ENOMEM);
            }
            if (a > 0 && pkt->data != new_pkt.data) { av_free_packet(pkt); new_pkt.destruct = av_destruct_packet; } else if (a < 0) { envir() << "!!!!!!!!!!av_bitstream_filter_filter failed" << ",res=" << a << "\n"; }
            *pkt = new_pkt;

            bsfc = bsfc->next;
        }
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181195.html原文链接:https://javaforall.net

(0)
上一篇 2022年10月16日 下午10:16
下一篇 2022年10月16日 下午10:16


相关推荐

  • Ubuntu下VLC播放器的字幕乱码问题

    Ubuntu下VLC播放器的字幕乱码问题为了为可能进入的实验室实习做准备,今天重新装上了Ubuntu,今天的安装总的来说还是顺利多了。在播放软件上,这次我选择了VLC,因为感觉mplayer虽然强大,但是始终界面不是十分友好。而VLC也是灰常强大的。但是,在Linux下播放电影时,经常会遇到乱码的问题,下面就谈谈我的经验。造成字幕乱码的原因可能有两个:1.GB字符的解码:因为Linux下中文默认采取utf-

    2022年7月15日
    21
  • opencv cv2.imread()「建议收藏」

    opencv cv2.imread()「建议收藏」cv2.imread()用于读取图片文件imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式,有三种:cv2.IMREAD_COLOR:加载彩色图片,这个是默认参数,可以直接写1。cv2.IMREAD_GRAYSCALE:以灰度模式加载图片,可以直接写0。cv2.IMREAD_UNCHANGED:包括alpha,可以直接写-1cv2.imread()读…

    2022年10月15日
    4
  • jdk1.8 HashMap扩容机制变化「建议收藏」

    jdk1.8 HashMap扩容机制变化「建议收藏」概述JDK1.8中的HashMap较于前代有了较大的变更,主要变化在于扩容机制的改变。在JDK1.7及之前HashMap在扩容进行数组拷贝的时候采用的是头插法,因此会造成并发情景下形成环状链表造成死循环的问题。JDK1.8中改用了尾插法进行数组拷贝,修复了这个问题。其次,JDK1.8开始HashMap改用数组+链表/红黑树组合的数据结构来提高查询效率,降低哈希冲突产生的链表过长导致的查询效率减缓现象。本文的主要内容是对JDK1.8中的扩容机制与前代进行比较。JDK1.8之前的扩容由res

    2022年6月22日
    28
  • python解析json文件

    python解析json文件认识json数据json有两种数据结构:对象和数组。对象:用大括号表示,由键值对组成,每个键值对用逗号隔开。其中key必须为字符串且是双引号,value可以是多种数据类型。数组:用中括号表示,每个元素之间用逗号隔开。json中的字符串都要用双括号表示。json数据可以嵌套表示出结构更加复杂的数据。json格式与python格式的对应Python JSONd…

    2026年4月13日
    4
  • win10开虚拟机就重启_虚拟机装win10怎么用

    win10开虚拟机就重启_虚拟机装win10怎么用win10虚拟机自动关机可能是因为系统未激活导致!右键查看属性,可看到虚拟机的激活状态!如果显示未激活,需要激活!命令激活步骤:1.以管理员身份运行windowspowershell2.键入命令slmgr/ipkP9C2R-NM3BW-JR7DG-2R38J-D9MPF弹出窗口提示:“成功的安装了产品密钥”。红色部分为激活码,不可用的话,试试其他的(W269N-WFGW…

    2025年11月14日
    6
  • k8s配置admission-plugins

    k8s配置admission-plugins

    2021年5月14日
    138

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号