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

怎么找到合适的网站建设商大连甘井子区区号

怎么找到合适的网站建设商,大连甘井子区区号,资讯门户类网站,网站建设规划公司地址note 视频帧率调整 帧率(fps-frame per second) 例如#xff1a;原来帧率为30#xff0c;调整后为1 现象#xff1a;原来是每秒有30张图像#xff0c;调整后每秒1张图像#xff0c;看着图像很慢 实现#xff1a;在每秒的时间区间里#xff0c;取一张图像…note 视频帧率调整     帧率(fps-frame per second)     例如原来帧率为30调整后为1   现象原来是每秒有30张图像调整后每秒1张图像看着图像很慢     实现在每秒的时间区间里取一张图像 version #define LIBAVFILTER_VERSION_MINOR 12 #define LIBAVFILTER_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_MINOR 31 #define LIBAVCODEC_VERSION_MICRO 102 code void CFfmpegOps::ChangeVideoFPS(const char *in_mp4, const char *out_mp4) {AVFormatContext *in_fmt_ctx nullptr;const AVInputFormat *in_fmt nullptr;AVFormatContext *out_fmt_ctx nullptr;const AVOutputFormat *out_fmt nullptr;int ret -1;int video_stream_index 0;const AVCodec *decoder nullptr;AVCodecContext *decoder_ctx nullptr;const AVCodec* encoder nullptr;AVCodecContext* encoder_ctx nullptr;AVStream* in_avstream nullptr;AVStream* out_avstream nullptr;const AVFilter * avfilter_buffer_src nullptr; // 源video buffer可设置的参数有AVFilterContext* avfilter_ctx_buffer_src nullptr;const AVFilter * avfilter_fps nullptr; // 中间节点video fps可设置的参数包含fpsAVFilterContext* avfilter_ctx_fps nullptr;const AVFilter* avfilter_buffer_sink nullptr; // 终video buffersink可设置的参数只有pixel formatsAVFilterContext* avfilter_ctx_buffer_sink nullptr;AVFilterGraph* avfiltergraph nullptr;AVPacket* avpacket_src nullptr;AVFrame* avframe_src nullptr;AVFrame* avframe_dest nullptr;AVPacket* avpacket_dest nullptr;AVRational pixel_aspect {.num 1, .den 1};ret avformat_open_input(in_fmt_ctx, in_mp4, nullptr, nullptr);if (ret 0){printf(avformat_open_input error(%s)\n, GetFfmpegERR(ret));goto END;}in_fmt in_fmt_ctx-iformat;ret avformat_find_stream_info(in_fmt_ctx, nullptr);if (ret 0){printf(avformat_find_stream_info error(%s)\n, GetFfmpegERR(ret));goto END;}ret av_find_best_stream(in_fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, nullptr, 0);if (ret 0){printf(av_find_best_stream error(%s)\n, GetFfmpegERR(ret));goto END;}video_stream_index ret;in_avstream in_fmt_ctx-streams[video_stream_index];decoder avcodec_find_decoder(in_avstream-codecpar-codec_id);if (!decoder){printf(avcodec_find_decoder error\n);goto END;}decoder_ctx avcodec_alloc_context3(decoder);if (!decoder_ctx){printf(avcodec_alloc_context3 error\n);goto END;}ret avcodec_parameters_to_context(decoder_ctx, in_avstream-codecpar);if (ret 0){printf(avcodec_parameters_to_context error(%s)\n, GetFfmpegERR(ret));goto END;}ret avcodec_open2(decoder_ctx, decoder, nullptr);if (ret 0){printf(avcodec_open2 error(%s)\n, GetFfmpegERR(ret));goto END;}avfiltergraph avfilter_graph_alloc();if (!avfiltergraph){printf(avfilter_graph_alloc error\n);goto END;}avfilter_buffer_src avfilter_get_by_name(buffer); // buffer对应videoabuffer对应audioif (!avfilter_buffer_src){printf(avfilter_get_by_name error\n);goto END;}printf(avfilter_buffer_src-desc:%s\n, avfilter_buffer_src-description);avfilter_ctx_buffer_src avfilter_graph_alloc_filter(avfiltergraph, avfilter_buffer_src, avfilter_buffer_src-name);if (!avfilter_ctx_buffer_src){printf(avfilter_graph_alloc_filter error\n);goto END;}// 设置avfilter_ctx_buffer_src的可选参数// 参照libavfilter/buffersrc.c文件中对video buffer的可选参数描述ret av_opt_set(avfilter_ctx_buffer_src, width, std::to_string(in_avstream-codecpar-width).c_str(), AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}ret av_opt_set(avfilter_ctx_buffer_src, height, std::to_string(in_avstream-codecpar-height).c_str(), AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}ret av_opt_set(avfilter_ctx_buffer_src, pix_fmt, av_get_pix_fmt_name((AVPixelFormat)(in_avstream-codecpar-format)), AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}ret av_opt_set_q(avfilter_ctx_buffer_src,time_base, in_avstream-time_base,AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}ret av_opt_set_q(avfilter_ctx_buffer_src,frame_rate, in_avstream-r_frame_rate,AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}ret av_opt_set_q(avfilter_ctx_buffer_src,pixel_aspect, pixel_aspect,AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}// 上面已经设置过参数初始化就不传参了ret avfilter_init_str(avfilter_ctx_buffer_src, nullptr);if (ret 0){printf(avfilter_init_str error(%s)\n, GetFfmpegERR(ret));goto END;}avfilter_fps avfilter_get_by_name(fps);if (!avfilter_fps){printf(avfilter_get_by_name error\n);goto END;}printf(avfilter_fps-desc:%s\n, avfilter_fps-description);avfilter_ctx_fps avfilter_graph_alloc_filter(avfiltergraph, avfilter_fps, avfilter_fps-name);if (!avfilter_ctx_fps){printf(avfilter_graph_alloc_filter error\n);goto END;}ret av_opt_set(avfilter_ctx_fps, fps, 1,AV_OPT_SEARCH_CHILDREN);if (ret 0){printf(av_opt_set error(%s)\n, GetFfmpegERR(ret));goto END;}ret avfilter_init_str(avfilter_ctx_fps, nullptr);if (ret 0){printf(avfilter_init_str error(%s)\n, GetFfmpegERR(ret));goto END;}avfilter_buffer_sink avfilter_get_by_name(buffersink);if (!avfilter_buffer_sink){printf(avfilter_get_by_name error\n);goto END;}printf(avfilter_buffer_sink-desc:%s\n, avfilter_buffer_sink-description);avfilter_ctx_buffer_sink avfilter_graph_alloc_filter(avfiltergraph, avfilter_buffer_sink, avfilter_buffer_sink-name);if (!avfilter_ctx_buffer_sink){printf(avfilter_graph_alloc_filter error\n);goto END;}ret avfilter_init_str(avfilter_ctx_buffer_sink, nullptr);if (ret 0){printf(avfilter_init_str error(%s)\n, GetFfmpegERR(ret));goto END;}// 把avfilter组成链// avfilter_link的作用在src和dest之间新建AVFilterLink实例// srcpad:src的输出通道编号// destpad:dest的输入通道编号ret avfilter_link(avfilter_ctx_buffer_src, 0, avfilter_ctx_fps, 0);if (ret ! 0){printf(avfilter_link error(%s)\n, GetFfmpegERR(ret));goto END;}ret avfilter_link(avfilter_ctx_fps, 0, avfilter_ctx_buffer_sink, 0);if (ret ! 0){printf(avfilter_link error(%s)\n, GetFfmpegERR(ret));goto END;}ret avfilter_graph_config(avfiltergraph, nullptr);if (ret 0){printf(avfilter_graph_config error(%s)\n, GetFfmpegERR(ret));goto END;}ret avformat_alloc_output_context2(out_fmt_ctx, nullptr, nullptr, out_mp4);if (ret 0){printf(avformat_alloc_output_context2 error(%s)\n, GetFfmpegERR(ret));goto END;}out_fmt out_fmt_ctx-oformat;encoder avcodec_find_encoder(decoder-id);if (!encoder){printf(avcodec_find_encoder error\n);goto END;}encoder_ctx avcodec_alloc_context3(encoder);if (!encoder_ctx){printf(avcodec_alloc_context3 error\n);goto END;}encoder_ctx-pix_fmt (AVPixelFormat)(av_buffersink_get_format(avfilter_ctx_buffer_sink));encoder_ctx-width av_buffersink_get_w(avfilter_ctx_buffer_sink);encoder_ctx-height av_buffersink_get_h(avfilter_ctx_buffer_sink);encoder_ctx-time_base av_buffersink_get_time_base(avfilter_ctx_buffer_sink);encoder_ctx-framerate av_buffersink_get_frame_rate(avfilter_ctx_buffer_sink);encoder_ctx-gop_size decoder_ctx-gop_size;encoder_ctx-max_b_frames decoder_ctx-max_b_frames;if (out_fmt-flags AVFMT_GLOBALHEADER){encoder_ctx-flags | AV_CODEC_FLAG_GLOBAL_HEADER;}ret avcodec_open2(encoder_ctx, encoder, nullptr);if (ret 0){printf(avcodec_open2 error(%s)\n, GetFfmpegERR(ret));goto END;}out_avstream avformat_new_stream(out_fmt_ctx, encoder);if (!out_avstream){printf(avformat_new_stream error\n);goto END;}out_avstream-time_base av_buffersink_get_time_base(avfilter_ctx_buffer_sink);out_avstream-r_frame_rate av_buffersink_get_frame_rate(avfilter_ctx_buffer_sink);out_avstream-avg_frame_rate av_buffersink_get_frame_rate(avfilter_ctx_buffer_sink);ret avcodec_parameters_from_context(out_avstream-codecpar, encoder_ctx);if (ret 0){printf(avcodec_parameters_from_context error(%s)\n, GetFfmpegERR(ret));goto END;}ret avio_open((out_fmt_ctx-pb), out_mp4, AVIO_FLAG_WRITE);if (ret 0){printf(avio_open error(%s)\n, GetFfmpegERR(ret));goto END;}// 调用avformat_write_header后out_avstream的时间基发生了变化(10-102400)容器要求?ret avformat_write_header(out_fmt_ctx, nullptr);if (ret 0){printf(avformat_write_header error(%s)\n, GetFfmpegERR(ret));goto END;}avpacket_src av_packet_alloc();if (!avpacket_src){printf(av_packet_alloc error\n);goto END;}avpacket_dest av_packet_alloc();if (!avpacket_dest){printf(av_packet_alloc error\n);goto END;}avframe_src av_frame_alloc();if (!avframe_src){printf(av_frame_alloc error\n);goto END;}avframe_dest av_frame_alloc();if (!avframe_dest){printf(av_frame_alloc error\n);goto END;}while (1){// 从输入文件读取压缩视频帧ret av_read_frame(in_fmt_ctx, avpacket_src);if (ret 0){printf(av_read_frame error(%s)\n, GetFfmpegERR(ret));break;}if (avpacket_src-stream_index ! video_stream_index){av_packet_unref(avpacket_src);continue;}// 把压缩视频帧发送给解码器ret avcodec_send_packet(decoder_ctx, avpacket_src);if (ret ! 0){printf(avcodec_send_packet error(%s)\n, GetFfmpegERR(ret));}else{// 接收解码器的输出视频帧ret avcodec_receive_frame(decoder_ctx, avframe_src);if (ret ! 0){printf(avcodec_receive_frame error(%s)\n, GetFfmpegERR(ret));}else{// 把视频帧交给avfilterret av_buffersrc_write_frame(avfilter_ctx_buffer_src, avframe_src);if (ret ! 0){printf(av_buffersrc_write_frame error(%s)\n, GetFfmpegERR(ret));}else{// 从avfilter获取视频帧ret av_buffersink_get_frame(avfilter_ctx_buffer_sink, avframe_dest);if (ret 0){printf(av_buffersink_get_frame error(%s)\n, GetFfmpegERR(ret));}else{// 把视频帧交给编码器ret avcodec_send_frame(encoder_ctx, avframe_dest);if (ret ! 0){printf(avcodec_send_frame error(%s)\n, GetFfmpegERR(ret));}else{// 从编码器获取压缩视频帧ret avcodec_receive_packet(encoder_ctx, avpacket_dest);if (ret ! 0){printf(avcodec_receive_packet error(%s)\n, GetFfmpegERR(ret));}else{av_packet_rescale_ts(avpacket_dest, encoder_ctx-time_base, out_avstream-time_base);// 写入到输出文件ret av_write_frame(out_fmt_ctx, avpacket_dest);if (ret 0){printf(av_write_frame error(%s)\n, GetFfmpegERR(ret));}}}}}}}}ret av_write_trailer(out_fmt_ctx);if (ret 0){printf(av_write_trailer error(%s)\n, GetFfmpegERR(ret));goto END;}END:if (avframe_dest){av_frame_free(avframe_dest);avframe_dest nullptr;}if (avframe_src){av_frame_free(avframe_src);avframe_src nullptr;}if (avpacket_src){av_packet_free(avpacket_src);avpacket_src nullptr;}if (avpacket_dest){av_packet_free(avpacket_dest);avpacket_dest nullptr;}if (avfilter_ctx_buffer_sink){avfilter_free(avfilter_ctx_buffer_sink);avfilter_ctx_buffer_sink nullptr;}if (avfilter_ctx_fps){avfilter_free(avfilter_ctx_fps);avfilter_ctx_fps nullptr;}if (avfilter_ctx_buffer_src){avfilter_free(avfilter_ctx_buffer_src);avfilter_ctx_buffer_src nullptr;}if (avfiltergraph){avfilter_graph_free(avfiltergraph);avfiltergraph nullptr;}if (encoder_ctx){avcodec_free_context(encoder_ctx);encoder_ctx nullptr;}if (decoder_ctx){avcodec_free_context(decoder_ctx);decoder_ctx nullptr;}if (out_fmt_ctx){avformat_free_context(out_fmt_ctx);out_fmt_ctx nullptr;}if (in_fmt_ctx){avformat_free_context(in_fmt_ctx);in_fmt_ctx nullptr;} } performance
http://www.w-s-a.com/news/904297/

相关文章:

  • 门户网站建设教程更改wordpress端口
  • 普兰店网站建设公司云计算培训
  • 网站建设的网络技术app下载平台哪个好
  • 中国建筑人才网是什么网站导购网站制作
  • 网站建设开票东莞龙岗网站建设
  • 17网站一起做网批最近湘潭的新闻
  • 专业网站设计专业服务网站news怎么做
  • 杭州租房网站建设设计网站架构
  • 安徽做网站公司哪家好建设网站需要什么内容
  • 哪些网络公司可以做机票预订网站网站新闻后台怎么做
  • 微网站 域名企业网站怎么做推广
  • 兴安盟住房和城乡建设部网站在国外做网站
  • 南雄市建设局网站搜索关键词的方法
  • 网站建设维护工作经验深圳定制展会
  • 新闻类网站备案WordPress评论昵称显示错误
  • 如何建立一个个人网站自己做一个购物网站
  • 吴忠网站建设公司中国建筑股份有限公司 官网
  • 深圳电商网站开发公司page list wordpress
  • 长安外贸网站建设顺德区网站设计建设企业
  • 临沂市建设局网站简介专业建设网站开发
  • 肇庆网站制作设计中国企业500强招聘
  • 苏州厂房装修宁波seo网络推广外包报价
  • 文山知名网站建设惠州哪家做网站好
  • 物流网站风格网站登录密码保存在哪里设置
  • 免费网站怎么建立icodepython基础教程
  • 无障碍网站建设方案wordpress 任务管理系统
  • iis5.1发布网站中小企业网络营销存在的问题研究论文
  • 阳泉软件定制网站建设网站可以做多语言的吗
  • 建设网站的目的及功能定位主要包括哪些内容百度关键词优化
  • 开一个小程序要多少钱宁波seo网络推广外包报价