FFmpeg给mp4视频加上旋转90度的代码

1、准备h264视频流。(这之前可能是yuv转成的视频流。)

2、准备aac音频流。

3、开始muxer成mp4。

一、如果初始视频是ios或者安卓手机拍摄的竖拍视频,那么这个视频是有90,180,270这样的旋转角度的。

比如本来宽高比是720*1080,但是安卓和iphone手机拍出的视频的宽高却是1080*720,但是在metadata里标记了rotate=90。

当你从原始的倒立视频中折腾出yuv,它确是倒立的。

二、yuv转为h264视频流。

三、合并h264和aac进入mp4容器。在这个地方,就需要把rotate的90度写入视频。因为是新手,不是很熟悉ffmpeg,所以弄了有几天。网上没有这部分答案。

其实是写在差不多类似下面的代码:

for (i = 0; i < ifmt_ctx_v->nb_streams; i++) {
        //Create output AVStream according to input AVStream
        if(ifmt_ctx_v->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO){
            AVStream *in_stream = ifmt_ctx_v->streams[i];
            AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
            videoindex_v=i;
            if (!out_stream) {
                printf( "Failed allocating output stream\n");
                ret = AVERROR_UNKNOWN;
                goto end;
            }
            videoindex_out=out_stream->index;
            //Copy the settings of AVCodecContext
            ret = av_dict_set(&out_stream->metadata,"rotate","90",0); //设置旋转角度
            if(ret>=0)
            {
                printf("=========yes=====set rotate success!===\n");
            }
            
            if (avcodec_copy_context(out_stream->codec, in_stream->codec) < 0) {
                printf( "Failed to copy context from input to output stream codec context\n");
                goto end;
            }
            out_stream->codec->codec_tag = 0;
            if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
                out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
            break;
        }
    }

AVMEDIA_TYPE_VIDEO 判断是视频流,然后申请out_stream,它是AVStream结构。里面就有mateData,所以可以写进去了。
给每一帧写入:
ret = av_dict_set(&out_stream->metadata,"rotate","90",0); //设置旋转角度

 

这样就ok了!

看最后dump视频的信息:

Output #0, mp4, to '/var/mobile/Containers/Data/Application/5B1DE047-A88C-48C2-B89A-FB5B57381A95/Documents/video/success.mp4':

    Stream #0:0: Video: h264, yuv420p, 1920x1080, q=2-31, 50 tbc

    Metadata:

      rotate          : 90

    Stream #0:1: Audio: aac, 44100 Hz, mono, fltp, 67 kb/s

已经把rotate写进去了。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

了悟生死大事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值