热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpeg转封装格式

本文记录ffmpeg进行视频格式的转换。ffmpeg视频格式转换主要流程ffmpeg视频格式转换示例#includeexternC{#include

本文记录ffmpeg进行视频格式的转换。


ffmpeg视频格式转换主要流程


ffmpeg视频格式转换示例

#include extern "C" {
#include "libavformat\avformat.h"
#include "libavutil\avutil.h"
#include "libavcodec\avcodec.h"
}#pragma comment(lib, "avformat.lib")
#pragma comment(lib, "avcodec.lib")
#pragma comment(lib, "avutil.lib")void printErr(char *info, int ret)
{char err[1024] = { 0 };av_strerror(ret, err, sizeof(err));std::cout <}int main(int argv, char *argc[])
{//打开输入封装格式char *inPath = "D:/video/Bilby.mp4";AVFormatContext *inFormatCtx = nullptr;int ret = avformat_open_input(&inFormatCtx, inPath, NULL, NULL);if (ret != 0) {printErr("avformat_open_input failed", ret);return -1;}//读取packet,获取stream信息avformat_find_stream_info(inFormatCtx, NULL);av_dump_format(inFormatCtx, 0, NULL, 0);//创建输出的封装格式char *outPath = "D:/video/Bilby.flv";AVFormatContext *outFormatCtx = nullptr;ret = avformat_alloc_output_context2(&outFormatCtx, NULL, NULL, outPath);if (ret != 0) {printErr("avformat_alloc_output_context2 failed", ret);return -1;}//为输出封装格式创建streamfor (int i = 0; i nb_streams; i++) {AVStream *inStream = inFormatCtx->streams[i];AVStream *outStream = avformat_new_stream(outFormatCtx, NULL);ret = avcodec_parameters_copy(outStream->codecpar, inStream->codecpar);if (ret != 0) {printErr("avcodec_parameters_copy failed", ret);return -1;}//如果不设置,某些格式转换会失败outStream->codecpar->codec_tag = 0;}av_dump_format(outFormatCtx, 0, NULL, 1);//打开io,创建输出文件ret = avio_open(&outFormatCtx->pb, outPath, AVIO_FLAG_WRITE);if (ret != 0) {printErr("avio_open failed", ret);return -1;}//写入stream头,会改变输出stream中的time_baseret = avformat_write_header(outFormatCtx, NULL);if (ret != 0) {printErr("avformat_write_header failed", ret);return -1;}//遍历输入文件中的packetAVPacket pkt;av_init_packet(&pkt);while (1) {//读取packetret = av_read_frame(inFormatCtx, &pkt);if (ret <0) {break;}//pts,dts,duration以输出format的time_base转换AVRational srcTb = inFormatCtx->streams[pkt.stream_index]->time_base;AVRational dstTb = outFormatCtx->streams[pkt.stream_index]->time_base;pkt.pts = av_rescale_q_rnd(pkt.pts, srcTb, dstTb, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.dts = av_rescale_q_rnd(pkt.dts, srcTb, dstTb, (AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.duration = av_rescale_q(pkt.duration, srcTb, dstTb);//packet写入文件av_interleaved_write_frame(outFormatCtx, &pkt);}//输出剩余的packet和stream尾部信息 av_write_trailer(outFormatCtx);//关闭输入输出avformat_close_input(&inFormatCtx);avio_close(outFormatCtx->pb);avformat_free_context(outFormatCtx);system("pause");return 0;
}


推荐阅读
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送www方式的数据。HTTP协议采用了请求响应模型。客服端向服务器发送一 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • C语言中全部可用的数学函数有哪些?2.longlabs(longn);求长整型数的绝对值。3.doublefabs(doublex);求实数的绝对值。4.doublefloor(d ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
author-avatar
hh呢喃_845
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有