一次ffmpeg -c copy 在avformat_write_header函数处报错:Could not find tag for codec rawvideo in stream #0的原因分析

在处理视频转换时,使用ffmpeg -c copy模式并在avformat_write_header函数遇到错误:Could not find tag for codec rawvideo in stream #0。问题源于tag与codec类型不匹配。通过查看ffmpeg源码,发现是由于在处理数据流时,编解码器参数初始化失败,特别是在MP4模式下,tag被设为0。解决方法是避免在数据流情况下使用-c copy。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、背景

在一次处理视频转换的时候使用了copy模式,然后在avformat_write_header函数处报错:Could not find tag for codec rawvideo in stream #0

 二、分析

1.首先avformat_write_header调用如下

    ret = avformat_write_header(of->ctx, &of->opts);
    if (ret < 0) {
        av_log(NULL, AV_LOG_ERROR,
               "Could not write header for output file #%d "
               "(incorrect codec parameters ?): %s\n",
               file_index, av_err2str(ret));
        return ret;
    }

2.从错误的字面意思上看,应该是tag与codec类型不一致导致了这个报错,调试发现tag是mpeg4,codec是rawvideo(其实这里已经可以分析出原因了,但是当时没意识到)

3.做了一个测试,修改了tag

    of->ctx->streams[0]->codecpar->codec_tag = 0x31637661;
    of->ctx->streams[0]->codecpar->codec_id = AV_CODEC_ID_H264;

    of->ctx->streams[1]-

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值