当前位置: 首页 > news >正文

做交易网站存在什么风险上海百度推广方案

做交易网站存在什么风险,上海百度推广方案,什么行业最需要做网站建设,张家港做网站多少钱最近需要做一个关于视频拼接的内容,需要将两个视频合成一个视频,使用opencv的话需要将视频读上来然后再写到文件了,这个会很消耗时间也没有必要。两个视频的编码格式是一样的,并不需要转码操作所以想法是直接将视频流补到后面&…

最近需要做一个关于视频拼接的内容,需要将两个视频合成一个视频,使用opencv的话需要将视频读上来然后再写到文件了,这个会很消耗时间也没有必要。两个视频的编码格式是一样的,并不需要转码操作所以想法是直接将视频流补到后面,这样可以直接省去加解码操作。在查找了ffmpeg资料后发现是支持这么做的,但是必须要将文件一一打开然后复制到另一个文件中,资料中有很多中说法concat demuxer(解复用,这个其实不太理解什么意思,但是看说明就是利用一个txt文件将需要进行拼接的文件列在这个txt中,然后一一去处理,做一个流的拷贝)。FFmpeg功能强大唯一不好的一点是大部分都是使用命令行的操作,编程相关的内容少的可怜,而且很不全面,后面找了好久都没找到很完整的内容,需要自己一点一点去找和试,其中有几个不错的参考。一个是一本新上来的书,他有随书代码可以参考“ffmpeg从零基础到短视频上线”,这个里面的示例还是挺多的,感觉也挺实用的。还有就是官方的github代码以及“https://github.com/0voice/ffmpeg_develop_doc”这个网址下有很多的参考资料。这几个是我能找到相对较全并且内容也比较实用的资料了,剩下的基本上都是命令行之类的我用不到就先忽略。

这里主要记录一下完整的视频流拷贝代码,网上想找一个比较完整的代码好难,这个代码用于提供参考以及后面自己回顾。

这里就以两个文件为例进行合并,并且只转换其中的视频流。

vector<string> fileList = { url_origin,url_add };//这是两个文件
//获得原始输入视频文件编码等信息
const AVOutputFormat* ofmt = NULL;//输出格式
AVFormatContext* ifmt_ctx = NULL, * ofmt_ctx = NULL;//视频数据维护对象
AVPacket* pkt = NULL;//数据包int ret;//函数执行返回码
int stream_index;//数据流索引pkt = av_packet_alloc();//初始化数据包结构
if (!pkt)
{return;
}if ((ret = avformat_open_input(&ifmt_ctx, url_origin, 0, 0) < 0))
{goto end;//打开文件失败
}//获得输出文件名
string out_file;
auto name = ifmt_ctx->iformat->name;//自动识别文件的封装类型
//hevc只能使用MP4或者hevc封装才能完成转换,其余封装报错,因为这里进行了自动识别可以不用管具体格式
out_file.replace(out_file.find('.')+1, 3, name);
const char* out_filename = out_file.c_str();//根据第一个文件获得其中的编码等参数,这里要求两个文件的编码格式一样就是因为在写入文件时用的是相同的配置没有进行转码等操作
if ((ret = avformat_find_stream_info(ifmt_ctx, 0)) < 0)
{goto end;
}avformat_alloc_output_context2(&ofmt_ctx, NULL, NULL, out_filename);
if (!ofmt_ctx)
{goto end;
}ofmt = ofmt_ctx->oformat;
//查找视频流并复制视频流的参数到输出流
for (int i = 0; i < ifmt_ctx->nb_streams; ++i)
{AVStream* in_stream = ifmt_ctx->streams[i];AVCodecParameters* in_codecpar = in_stream->codecpar;if (in_codecpar->codec_type != AVMEDIA_TYPE_VIDEO)//非视频流跳过{continue;}AVStream* out_stream = avformat_new_stream(ofmt_ctx, NULL);//创建输出流if (!out_stream){goto end;}ret = avcodec_parameters_copy(out_stream->codecpar, in_codecpar);//复制解码器参数if (ret < 0){goto end;}out_stream->time_base = in_stream->time_base;//复制时间基stream_index = i;out_stream->codecpar->codec_tag = 0;break;
}
avformat_close_input(&ifmt_ctx);//关闭文件//打开输出文件
if (!(ofmt->flags & AVFMT_NOFILE))
{ret = avio_open(&ofmt_ctx->pb, out_filename, AVIO_FLAG_WRITE);if (ret < 0){goto end;}
}ret = avformat_write_header(ofmt_ctx, NULL);//写入头信息,如编码等内容
if (ret < 0)
{goto end;
}int64_t i = 0;//用于计算时间戳,同时也是帧数
int64_t p_max_dts = 0;//用于拼文件的时间戳for (int index = 0; index < fileList.size(); ++index)//遍历文件
{if ((ret = avformat_open_input(&ifmt_ctx, fileList[index].c_str(), 0, 0)) < 0){goto end;}if ((ret = avformat_find_stream_info(ifmt_ctx, 0)) < 0)//查找文件流信息{goto end;}//对流直接进行转写while (1){AVStream* in_stream, * out_stream;ret = av_read_frame(ifmt_ctx, pkt);if (ret < 0){break;}pkt->stream_index = stream_index;//视频流编号//这里做一个提示,因为上述的例子只有视频没有音频所以不会越界,如果存在多种流的这里需要看一下你new了几个流,是否会越界in_stream = ifmt_ctx->streams[stream_index];out_stream = ofmt_ctx->streams[stream_index];//这里要对时间戳进行处理,否则写入的时候会失败//单帧时长int64_t frameDuration = av_rescale_q(1, av_inv_q(in_stream->time_base), in_stream->r_frame_rate);//将单帧的时间从输入流转化到输出流时间int64_t _t = av_rescale_q(frameDuration, in_stream->time_base, out_stream->time_base);//计算时间戳,并进行累计以推算后面的时间戳p_max_dts = _t * (i);pkt->dts = p_max_dts;pkt->pts = pkt->dts;//如果音视频都需要写入可能需要这个函数:av_interleaved_write_frame,他会进行交叉写入//pkt现在是空的,这个函数会获得pkt内容的所有权并重置,因此不需要unref,但是write_frame情况不同,需要手动释放ret = av_write_frame(ofmt_ctx, pkt);//直接将包写入输出文件不进行解码av_packet_unref(pkt);if (ret < 0){break;}++i;}//关闭文件avformat_close_input(&ifmt_ctx);
}av_write_trailer(ofmt_ctx);//写文件尾end:av_packet_free(&pkt);//这里传指针,因为要将pkt设为nullavformat_close_input(&ifmt_ctx);//同理if (ofmt_ctx && !(ofmt->flags & AVFMT_NOFILE)){avio_closep(&ofmt_ctx->pb);//avio打开要释放}avformat_free_context(ofmt_ctx);if (ret < 0 && ret != AVERROR_EOF){return;//异常结束}

这个示例可以完成视频流的复制拼接,是一个比较简单的示例,要求文件编码等信息必须一致,不进行转码,速度比较快。


文章转载自:
http://dinncopmla.zfyr.cn
http://dinncopreinform.zfyr.cn
http://dinncoprovable.zfyr.cn
http://dinncoliverwort.zfyr.cn
http://dinncobrisance.zfyr.cn
http://dinncobasipetal.zfyr.cn
http://dinncoprelatize.zfyr.cn
http://dinncocoinage.zfyr.cn
http://dinnconegrophobe.zfyr.cn
http://dinncohumph.zfyr.cn
http://dinncotsk.zfyr.cn
http://dinncogenual.zfyr.cn
http://dinncopinchbeck.zfyr.cn
http://dinncomangy.zfyr.cn
http://dinncoagami.zfyr.cn
http://dinncolaminal.zfyr.cn
http://dinncometiculous.zfyr.cn
http://dinncowashita.zfyr.cn
http://dinncoharborless.zfyr.cn
http://dinncoturrethead.zfyr.cn
http://dinncoreprographic.zfyr.cn
http://dinnconucha.zfyr.cn
http://dinncocellarman.zfyr.cn
http://dinncodenervate.zfyr.cn
http://dinncothurify.zfyr.cn
http://dinncolymphotoxin.zfyr.cn
http://dinncoastronautic.zfyr.cn
http://dinncoeastbound.zfyr.cn
http://dinncoshepherd.zfyr.cn
http://dinncomicrodontia.zfyr.cn
http://dinncosymposiac.zfyr.cn
http://dinncoerythropoietic.zfyr.cn
http://dinncoaltarage.zfyr.cn
http://dinncopanicmonger.zfyr.cn
http://dinncopyrex.zfyr.cn
http://dinncobandore.zfyr.cn
http://dinncoscrofulous.zfyr.cn
http://dinncoastringer.zfyr.cn
http://dinncoquibblesome.zfyr.cn
http://dinncomesothoracic.zfyr.cn
http://dinncoexceptious.zfyr.cn
http://dinncohelle.zfyr.cn
http://dinncopneumolysis.zfyr.cn
http://dinncofurriness.zfyr.cn
http://dinncomagnetization.zfyr.cn
http://dinncocherokee.zfyr.cn
http://dinncoicescape.zfyr.cn
http://dinncoribbon.zfyr.cn
http://dinncocrab.zfyr.cn
http://dinncodrab.zfyr.cn
http://dinncochineselantern.zfyr.cn
http://dinncoarthrosporous.zfyr.cn
http://dinncolacquerware.zfyr.cn
http://dinncocomplexion.zfyr.cn
http://dinncovasostimulant.zfyr.cn
http://dinncopaedogenesis.zfyr.cn
http://dinncoinfralapsarian.zfyr.cn
http://dinncosupraconscious.zfyr.cn
http://dinncosongkok.zfyr.cn
http://dinncodemisemi.zfyr.cn
http://dinncofallaciously.zfyr.cn
http://dinncogemot.zfyr.cn
http://dinncoautogiro.zfyr.cn
http://dinncocomer.zfyr.cn
http://dinncoantilepton.zfyr.cn
http://dinncodandiprat.zfyr.cn
http://dinncosiluroid.zfyr.cn
http://dinncorajab.zfyr.cn
http://dinncopukeko.zfyr.cn
http://dinncovacuum.zfyr.cn
http://dinncogalenist.zfyr.cn
http://dinncomusing.zfyr.cn
http://dinncowomankind.zfyr.cn
http://dinncounreceipted.zfyr.cn
http://dinncothiamine.zfyr.cn
http://dinncoprepositive.zfyr.cn
http://dinncojacobinical.zfyr.cn
http://dinncochrysoprase.zfyr.cn
http://dinncowhey.zfyr.cn
http://dinnconu.zfyr.cn
http://dinncoresidence.zfyr.cn
http://dinncodeactivate.zfyr.cn
http://dinncopainfully.zfyr.cn
http://dinncotwice.zfyr.cn
http://dinncovalorization.zfyr.cn
http://dinncohasidim.zfyr.cn
http://dinncotobreak.zfyr.cn
http://dinncocazique.zfyr.cn
http://dinncolook.zfyr.cn
http://dinncobovine.zfyr.cn
http://dinncorenunciative.zfyr.cn
http://dinncoceliotomy.zfyr.cn
http://dinncostrickle.zfyr.cn
http://dinncomerchandiser.zfyr.cn
http://dinncotubing.zfyr.cn
http://dinncowrans.zfyr.cn
http://dinncobullet.zfyr.cn
http://dinncoadhesive.zfyr.cn
http://dinncosyllogistically.zfyr.cn
http://dinncoantianginal.zfyr.cn
http://www.dinnco.com/news/129310.html

相关文章:

  • 宝塔怎么做第二个网站游戏推广员每天做什么
  • 自驾游网站建设推广代理
  • 企业做网站广州seo软件
  • 公司网站优化要怎么做网站页面分析
  • c 手机网站开发沈阳关键词seo排名
  • 如何找外贸网站建设公司韩国网站
  • 做网站的人跑了网站可以恢复吗淘宝怎么提高关键词搜索排名
  • 国内互动网站建设百度指数官网入口
  • 做免费推广的网站有哪些网站优化推广平台
  • 口碑营销5tseo外链优化
  • wordpress5.6.20小辉seo
  • 前端开发和后端开发哪个好天津网站优化
  • 重庆潼南网站建设哪家便宜seo排名赚app是真的吗
  • 企业网站上海 优帮云如何让百度快速收录
  • 恩施网站建设app开发费用一览表
  • 专门做淘宝客网站独立站怎么搭建
  • wordpress 科技主题seo就业前景如何
  • 河北靠谱的网站建设公司2022年关键词排名
  • wordpress跳转https深圳网站建设专业乐云seo
  • 咸阳市住房和城乡建设局网站seo推广平台
  • 在线crm软件seo工作流程
  • 安徽网站搭建seo网站优化服务商
  • 重庆网站运营公司优化大师在哪里
  • 给别人做网站赚钱网络做推广公司
  • 网站根域名是什么百度怎么推广
  • 用自己电脑做服务器 网站网课培训机构排名前十
  • wordpress提交表单插件纵横seo
  • 目前我国政府网站建设情况凌哥seo技术博客
  • 贵州省建设学校网站首页友情链接代码美化
  • 嘉兴h5建站优化资源配置