/*
*   一笑奈何
*   cn-yixiaonaihe.blog.csdn.net
*/#include <iostream>
#include <thread>
extern "C" {
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"
#include "libswscale/swscale.h"
#include "libswresample/swresample.h"
}
using namespace std;static double r2d(AVRational r)
{return r.den == 0 ? 0 : (double)r.num / (double)r.den;
}
void XSleep(int ms)
{//c++ 11chrono::milliseconds du(ms);this_thread::sleep_for(du);
}
int main(int argc, char *argv[])
{cout << "Test Demux FFmpeg.club" << endl;const char *url = "TWO.mp4";const char *outfile = "out.mov";//初始化封装库av_register_all();//初始化网络库 (可以打开rtsp rtmp http 协议的流媒体视频)avformat_network_init();//注册解码器avcodec_register_all();AVFormatContext *ic = nullptr;avformat_open_input(&ic,url,0,0);if (!ic){cout << "avformat_open_input is not!" << endl;return -1;}cout << "avformat_open_input is yes!" << endl;//第二步,创建输出文件AVFormatContext* oc = nullptr;avformat_alloc_output_context2(&oc,NULL,NULL,outfile);if (!ic){cout << "avformat_alloc_output_context2 is not!" << endl;return -1;}cout << "avformat_alloc_output_context2 is yes!" << endl;//创建一个新的流AVStream   *videostream = avformat_new_stream(oc,NULL); //视频AVStream   *audiostream = avformat_new_stream(oc,NULL);//音频avcodec_parameters_copy(videostream->codecpar,ic->streams[0]->codecpar);avcodec_parameters_copy(audiostream->codecpar,ic->streams[1]->codecpar);videostream->codecpar->codec_tag = 0;audiostream->codecpar->codec_tag = 0;av_dump_format(ic,0, url,0);cout << "==============================" << endl;av_dump_format(oc,0,outfile,1);//写入文件头信息int ret = avio_open(&oc->pb,outfile,AVIO_FLAG_WRITE);//打开输出文件IOif (ret < 0){cout << "avio_open failed" << endl;getchar();return -1;}ret=avformat_write_header(oc,NULL);if (ret < 0){cout << "avformat_write_header failed" << endl;getchar();}AVPacket pkt;while (true){int re=av_read_frame(ic,&pkt);if (re < 0)break;//输入time_base转输出time_base;关于pts和dts的;pkt.pts=av_rescale_q_rnd(pkt.pts,ic->streams[pkt.stream_index]->time_base,oc->streams[pkt.stream_index]->time_base,(AVRounding)(AV_ROUND_NEAR_INF|AV_ROUND_PASS_MINMAX));pkt.dts = av_rescale_q_rnd(pkt.dts,ic->streams[pkt.stream_index]->time_base,oc->streams[pkt.stream_index]->time_base,(AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));pkt.pos = -1;//经过多长时间pkt.duration = av_rescale_q_rnd(pkt.duration,ic->streams[pkt.stream_index]->time_base,oc->streams[pkt.stream_index]->time_base,(AVRounding)(AV_ROUND_NEAR_INF | AV_ROUND_PASS_MINMAX));av_write_frame(oc, &pkt);av_packet_unref(&pkt);cout << "." << endl;}av_write_trailer(oc);//主动关闭后才可以把缓冲区的内容写到文件avio_close(oc->pb);cout << "==============end===============" << endl;return 0;
}

本文配套项目

【开源项目】基于FFmpeg的封装格式转换相关推荐

  1. 最简单的基于FFmpeg的封装格式处理:视音频分离器(demuxer)

    ===================================================== 最简单的基于FFmpeg的封装格式处理系列文章列表: 最简单的基于FFmpeg的封装格式处理 ...

  2. 最简单的基于FFmpeg的封装格式处理:视音频复用器(muxer)

    ===================================================== 最简单的基于FFmpeg的封装格式处理系列文章列表: 最简单的基于FFmpeg的封装格式处理 ...

  3. 最简单的基于FFMPEG的封装格式转换器

    最简单的基于FFMPEG的封装格式转换器(无编解码) https://blog.csdn.net/leixiaohua1020/article/details/25422685 =========== ...

  4. 最简单的基于FFMPEG的封装格式转换器(无编解码)

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍一个基于FFMPEG的封装格式转换器.所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应. ...

  5. 基于FFMPEG的封装格式转换器

    简介 本文介绍一个基于FFMPEG的封装格式转换器.所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应.avi,.flv,.mkv,.mp4文件).需要注意的是,本程序并不 ...

  6. 基于FFmpeg的封装格式MP4(TS)

    一. 封装MP4原理: 每一帧音频或视频都有一个持续时间:duration: 采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数. .正常人听觉的频率范围大约在20Hz~20kHz之 ...

  7. 最简单的基于FFMPEG的封装格式转换器(C++Qt 版)

    最简单的基于FFMPEG的封装格式转换器(C++Qt 版) 这篇博客是我上篇博客的延续.建议大家先看看我上篇博客: https://blog.csdn.net/liyuanbhu/article/de ...

  8. 基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅)

    基于 FFMPEG 的像素格式变换(swscale,致敬雷霄骅) 前几天写了几篇关于ffmpeg 编程转封装的入门文章,下一步本来是要写转码或者编码的.但是发现无论是转码还是编码,都会遇到图像像素格式 ...

  9. Ffmpeg,mencoder视频格式转换

    一. Ffmpeg,mencoder视频格式转换 Mencoder 转 flv  mencoder -ffourcc FLV1 -lavfopts i_certify_that_my_video_st ...

最新文章

  1. 模块导入---如何在一个文件中导入其它模块,来调用它的变量、函数等,以节省代码量...
  2. sklearn.naive_bayes
  3. Testlink使用心得
  4. MySQL(十)操纵表及全文本搜索
  5. 《微软产品开发致胜策略》-5月22日微软CTO峰会主题演讲
  6. idea重要插件代码颜色_颜色在您的网站上的重要性和品牌形象
  7. 双向@OneToMany / @ManyToOne关联
  8. 利用Asp.net MVC处理文件的上传下载
  9. (DFS+DP)滑雪(poj1088)
  10. WinNT/Win2000/WinXP中的远线程技术之一
  11. react-native 编译出现 ld: library not found for -lDoubleConversion 错误的解决方案
  12. 银河麒麟系统安装字体
  13. 毕业论文 - 写作问题总结 和 tips
  14. Ubuntu 20.04 Please reinstall Android Studio from scratch
  15. 【2021中国华录杯·数据湖算法大赛】火热进行中,丰厚大赛奖金等你来拿!
  16. 许凯拍《招摇》冻到嘴唇发紫 夸赞导演更敬业
  17. 私网地址与公网地址是如何转换的?
  18. 服务器系统c盘在哪个文件夹,windows操作系统放在哪个文件夹下
  19. Chrome 创建快捷方式后在单页面打开网页内容
  20. 三星 android 刷机,三星安卓手机如何刷机 三星安卓手机刷机通用方法介绍【教程】...

热门文章

  1. Java 14:记录
  2. 带Prometheus的Spring Boot和测微表第4部分:基础项目
  3. spring发邮件_跟踪异常–第4部分– Spring的邮件发件人
  4. maven项目 ant_将旧项目从Ant迁移到Maven的4个简单步骤
  5. Spring Security with Spring Boot 2.0:密码编码器
  6. 打破冷漠僵局文章_研究僵局–第1部分
  7. superhot预告片下载_预告片:裸指关节SOA
  8. 在Spring MVC流中使用rx-java Observable
  9. 介绍JBoss BPM Suite安装程序
  10. 玩Java 8 – Lambda,路径和文件