您当前的位置:首页 > 电脑百科 > 软件技术 > 音/视频编辑

FFmpeg 视频解码

时间:2022-06-01 16:57:35  来源:  作者:音视频开发老舅

摘要

这篇文章介绍怎么实现视频解码,具体步骤为读取Sample.mkv视频文件,从中提取视频流,然后解码为YUV图像数据,把YUV数据存储为PGM灰度图像,或者存储为YUV420p RAW格式视频。

初始化FFmepg和FormatContext

使用FFmpeg API第一个操作就是执行初始化函数:av_register_all注册所有相关组件,然后使用avformat_open_input打开指定的媒体文件,并使用avformat_find_stream_info获取媒体流相关信息,把这些格式信息映射到AVFormatContext *mFormatCtx这个结构中。

使用函数av_dump_format可以从控制台输出媒体文件相关信息。

bool VideoDecoding::init(const char * file)
{
    av_register_all();

    if ((avformat_open_input(&mFormatCtx, file, 0, 0)) < 0) {
        printf("FAIled to open input filen");
    }

    if ((avformat_find_stream_info(mFormatCtx, 0)) < 0) {
        printf("Failed to retrieve input stream informationn");
    }

    av_dump_format(mFormatCtx, 0, file, 0);

    return false;
}

查询媒体流序号

多媒体文件一般都有一个视频流和多个音频流或者字幕流,每个媒体流都有序号Index。新版本的API使用av_find_best_stream函数查询相应的媒体流,第一个参数为初始化后的媒体格式Context,第二个参数即为媒体类型:

- AVMEDIA_TYPE_VIDEO:视频流

- AVMEDIA_TYPE_AUDIO:音频流

- AVMEDIA_TYPE_SUBTITLE:字幕流

后面几个参数是指定流特性的,如果从多个音频流中选择一个的话可以进行相关设置。此时只有一个视频流,所以参数设为-1即可返回默认的媒体流Index,得到这个Index后,接下来可以根据这个Index读取所需要的流。

bool VideoDecoding::findStreamIndex()
{
    // Find video stream in the file
    mVideoStreamIndex = av_find_best_stream(mFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);
    if (mVideoStreamIndex < 0) {
        printf("Could not find stream in input filen");
        return true;
    }

    return false;
}

配置编解码器CodecContext

首先使用avcodec_find_decoder函数根据流Index查找相应的解码器。

然后使用avcodec_alloc_context3函数根据解码器申请一个CodecContext。

接着根据流数据填充CodecContext各项信息。

最后完成CodecContext初始化操作。

// Initialize the AVCodecContext to use the given AVCodec.
bool VideoDecoding::initCodecContext()
{
    // Find a decoder with a matching codec ID
    AVCodec *dec = avcodec_find_decoder(mFormatCtx->streams[mVideoStreamIndex]->codecpar->codec_id);
    if (!dec) {
        printf("Failed to find codec!n");
        return true;
    }

    // Allocate a codec context for the decoder
    if (!(mCodecCtx = avcodec_alloc_context3(dec))) {
        printf("Failed to allocate the codec contextn");
        return true;
    }

    // Fill the codec context based on the supplied codec parameters.
    if (avcodec_parameters_to_context(mCodecCtx, mFormatCtx->streams[mVideoStreamIndex]->codecpar) < 0) {
        printf("Failed to copy codec parameters to decoder context!n");
        return true;
    }

    // Initialize the AVCodecContext to use the given Codec
    if (avcodec_open2(mCodecCtx, dec, NULL) < 0) {
        printf("Failed to open codecn");
        return true;
    }

    return false;
}


Tags:视频解码   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
FFmpeg 视频解码
摘要这篇文章介绍怎么实现视频解码,具体步骤为读取Sample.mkv视频文件,从中提取视频流,然后解码为YUV图像数据,把YUV数据存储为PGM灰度图像,或者存储为YUV420p RAW格式视频。初始...【详细内容】
2022-06-01  Search: 视频解码  点击:(366)  评论:(0)  加入收藏
腾讯发布全球首个面向移动端的VVC标准视频解码器
腾讯发布全球首个面向移动端的H.266/VVC标准视频解码器,即其自研的O266移动端版本,手机可看4K超高清VVC视频。O266已成为世界领先的全平台VVC解码器,支持main10 profile,包括高...【详细内容】
2021-02-05  Search: 视频解码  点击:(444)  评论:(0)  加入收藏
▌简易百科推荐
视频杂音怎么消除只留人声?简单方法快来学
视频杂音怎么消除只留人声?在家看视频时,你是否经常被背景噪音所困扰,导致听不清人物对话?今天,我们就来介绍几个能帮我们消除视频中杂音的软件,让我们能享受清晰纯净的视听体验!一...【详细内容】
2024-01-31  译言工具集    Tags:视频杂音   点击:(58)  评论:(0)  加入收藏
如何将两个视频无缝拼接成一个视频?几种简单易行的方法推荐
怎么把两个视频拼接成一个视频?将两个视频拼接成一个视频是一种常见的视频编辑需求,特别是在需要制作长视频或合集时。拼接后的视频可以更加流畅自然,便于观看和分享。若是拼接...【详细内容】
2024-01-17  技术小蚂蚁    Tags:视频   点击:(76)  评论:(0)  加入收藏
初学者如何开始学习视频剪辑?新手如何利用剪辑技术赚钱?
想提升自身专业技术技能,我建议报名一个培训班去进行学习。今天我给亲们网罗了几家正规且口碑不错的职业教育学校,可以参考一下王氏教育开办多年几乎零负面,而且全国校区都是实...【详细内容】
2024-01-09  利娇少女    Tags:视频剪辑   点击:(86)  评论:(0)  加入收藏
剪辑师怎么学?剪辑师一个月收入多少?
剪辑师的月收入因地区、经验、技能水平等因素而异。一般来说,初级剪辑师的月收入在几千元左右,中级剪辑师的月收入在一万元左右,高级剪辑师的月收入则可能超过一万元。当然,这只...【详细内容】
2023-12-16  王氏动漫学习训练    Tags:剪辑师   点击:(108)  评论:(0)  加入收藏
ev剪辑如何消音?视频消音方法全都在这!
EV剪辑是一款视频制作软件,支持全格式精准剪辑,可以实现水印添加、配音、字幕、多轨道剪辑、转场等功能。ev剪辑支持消音操作,同时需要注意的地方还是很多的,在进行消音处理时,需...【详细内容】
2023-12-12  温暖如初的生活    Tags:剪辑   点击:(117)  评论:(0)  加入收藏
视频合并怎么制作?
听说你想了解一些视频合并方法?我能告诉你,这可是个有趣的活儿!你知道吗,合并视频不仅可以让你的作品更具创意,还能让你成为朋友圈里的视频剪辑高手!在这里,我将为大家介绍视频合并...【详细内容】
2023-12-12  王旭妍爱生活    Tags:视频合并   点击:(108)  评论:(0)  加入收藏
视频剪辑怎么剪?
在这个数字时代,我们对社交媒体上的视频编辑越来越感兴趣。你可能已经看到了各种专业水平的视频,从搞笑的猫咪视频到惊险刺激的极限运动镜头。而你可能也梦想着自己成为一个视...【详细内容】
2023-12-10  叮当猫的颜色    Tags:视频剪辑   点击:(109)  评论:(0)  加入收藏
新手做短视频用哪个软件好
新手做短视频用哪个软件好?随着短视频的兴起,越来越多的人开始接触短视频制作。对于新手来说,选择一个合适的短视频制作软件非常重要。本文将从以下5个步骤,教新手宝子快速制作...【详细内容】
2023-12-05  短视频    Tags:短视频   点击:(138)  评论:(0)  加入收藏
机器配音和真人配音有什么区别?
今天我要跟你聊聊机器配音和真人配音有什么区别。你知道吗,这个话题可不简单,因为这关乎到我们日常生活中的声音体验,听起来有点高大上,但实际上离我们并不遥远。首先,咱们得来说...【详细内容】
2023-11-30  叮当猫的颜色    Tags:配音   点击:(167)  评论:(0)  加入收藏
视频裁剪后清晰度下降用什么软件?
你是否曾经遇到过这样的场景&mdash;&mdash;想要裁剪一段视频,但却苦于没有合适的工具来实现?别着急!视频裁剪软件就是你的好帮手。这些软件充分利用了先进的视频处理技术,通过直...【详细内容】
2023-11-27  数码小风向    Tags:视频   点击:(163)  评论:(0)  加入收藏
站内最新
站内热门
站内头条