GStreamer学习2.1----获取mp4中的图片

news2025/1/16 17:54:14

这里通过获取mp4中的图片例子来加深Gstreamer的理解,问问AI实现这样功能的命令,

得到

gst-launch-1.0 filesrc location=test.mp4 ! qtdemux ! queue ! h264parse ! avdec_h264 ! videoconvert ! jpegenc ! multifilesink location=output_image_%03d.jpg

在window环境上试了下,有问题

WARNING: erroneous pipeline: no element "avdec_h264"

修改为下面的命令后,可以保存图片了

gst-launch-1.0 filesrc location=test.mp4 ! decodebin ! jpegenc ! multifilesink location=output_image_%03d.jpg

接下来可以根据这个命令来生成对应的api代码了,目前AI生成的代码一般会有问题,需要修改,

#include <gst/gst.h>

#define FILE_PATH "D:\\2024\\06\\Test\\test.mp4"

static void pad_added_handler(GstElement* src, GstPad* new_pad, gpointer user_data) {
  GstElement* dest = GST_ELEMENT(user_data);
  GstPad* dest_pad = gst_element_get_static_pad(dest, "sink");

  g_print(" pad '%s' ,sink pad '%s'.\n", GST_PAD_NAME(new_pad), GST_PAD_NAME(dest_pad));
  if (gst_pad_is_linked(dest_pad)) {
    g_printerr("Destination pad is already linked.\n");
    goto exit;
  }

  if (gst_pad_link(new_pad, dest_pad) != GST_PAD_LINK_OK) {
    g_printerr("Failed to link pads.\n");
    goto exit;
  }

exit:
  gst_object_unref(dest_pad);
}


int main(int argc, char* argv[]) {
  GstElement* pipeline, * filesrc, * decodebin, * jpegenc, * app_sink;
  GstBus* bus;
  GstMessage* msg;
  GstStateChangeReturn ret;

  
  gst_init(&argc, &argv);

  
  pipeline = gst_pipeline_new("image-pipeline");
  filesrc = gst_element_factory_make("filesrc", "filesrc");
  decodebin = gst_element_factory_make("decodebin", "decodebin");
  jpegenc = gst_element_factory_make("jpegenc", "jpegenc");
  app_sink = gst_element_factory_make("multifilesink", "app_sink");

  if (!pipeline || !filesrc || !decodebin || !jpegenc || !app_sink) {
    g_printerr("Not all elements could be created.\n");
    return -1;
  }

  g_object_set(filesrc, "location", FILE_PATH, NULL);
 
  g_object_set(G_OBJECT(app_sink), "location", "output_image_%03d.jpg", NULL);
 
  gst_bin_add_many(GST_BIN(pipeline), filesrc, decodebin, jpegenc, app_sink, NULL);

  
  g_signal_connect(decodebin, "pad-added", G_CALLBACK(pad_added_handler), jpegenc);

  
  if (!gst_element_link(filesrc, decodebin) || !gst_element_link(jpegenc, app_sink)) {
    g_printerr("Elements could not be linked.\n");
    gst_object_unref(pipeline);
    return -1;
  }

  
  ret = gst_element_set_state(pipeline, GST_STATE_PLAYING);
  if (ret == GST_STATE_CHANGE_FAILURE) {
    g_printerr("Unable to set the pipeline to the playing state.\n");
    gst_object_unref(pipeline);
    return -1;
  }

  bus = gst_element_get_bus(pipeline);
  msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);


  if (msg != NULL)
    gst_message_unref(msg);
  gst_object_unref(bus);
  gst_element_set_state(pipeline, GST_STATE_NULL);
  gst_object_unref(pipeline);

  return 0;
}


在windows vs中,中文注释可能会导致程序问题,这个比较奇怪。

执行后,可以看到生成了很多图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1810348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux centos consul1.15.2一键安装部署

consul原理、作用、安装相关内容 一、理论部分二、安装下载版本地址三、安装consul服务 一、理论部分 1、consul的原理 Consul的原理及作用可以归纳为以下几点&#xff1a; ①、基于Gossip协议的通信&#xff1a;Consul使用了基于Gossip协议的Serf实现来进行通信。 Gossip协议…

【思考】Vue2响应丢失、$set

【思考】Vue2响应丢失、$set vue2响应丢失情况复现原因解决总结 vue2响应丢失情况复现 场景&#xff1a;直接通过数组下标去修改数组造成响应丢失 <template><div><p v-for"(item, index) in list" :key"index">{{item}}</p><…

《Brave New Words 》4.4 ​增加父母与孩子之间的连接点

Part IV Better Together 第四部分 携手共进 Increasing Points of Connection Between Parents and Their Kids 增加父母与孩子之间的连接点 From the moment I first used GPT-4 to the day our team concluded its hack-AI-thon, I found myself awed by its capabilities. …

设计模式-装饰器模式(结构型)

装饰器模式 装饰器模式是一种结构模式&#xff0c;通过装饰器模式可以在不改变原有类结构的情况下向一个新对象添加新功能&#xff0c;是现有类的包装。 图解 角色 抽象组件&#xff1a;定义组件的抽象方法具体组件&#xff1a;实现组件的抽象方法抽象装饰器&#xff1a;实现…

effective-C++ 条款6

&#x1f536;条款6——不能被拷贝的类  &#x1f536;delete 关键字能禁掉自动生成的函数  &#x1f531;让他的派生类不能被继承  &#x1f531;另一种实现派生类不能被拷贝的方法 条款6——不能被拷贝的类 1. delete 关键字能禁掉自动生成的函数 class Uncopy { publi…

【解决问题】QApplication: No such file or directory,C++ 使用Qt或项目未正确加载Cmake报错

运行环境&#xff1a; Clion编译&#xff0c;构建C工程项目报错QApplication: No such file or directory 问题描述 QApplication: No such file or directory 引用的#include <QApplication>飘红 解决方案 1、Qt没有安装正确&#xff0c;请使用对应版本的Qt。或编译…

Nodejs 第七十六章(MQ进阶)

MQ介绍和基本使用在上一章介绍过了&#xff0c;不再重复 消息&#xff1a;在RabbitMQ中&#xff0c;消息是传递的基本单元。它由消息体和可选的属性组成 生产者Producer&#xff1a;生产者是消息的发送方&#xff0c;它将消息发送到RabbitMQ的交换器&#xff08;Exchange&…

php 混合xml js,html 代码报错 ,结束标签关闭, short_open_tag 的作用,php关闭文件结束判断

结束标签关闭, short_open_tag 的作用&#xff0c;php关闭文件结束判断 有时候我们我们会将php&#xff0c;xml&#xff0c;js&#xff0c;html 混合编写 php文件只要开始标签而不要结尾标签? 混合代码看代码 直接运行 yntax error, unexpected version (T_STRING) in php…

【差分数组】1674. 使数组互补的最少操作次数

本文涉及知识点 差分数组 LeetCode1674. 使数组互补的最少操作次数 给你一个长度为 偶数 n 的整数数组 nums 和一个整数 limit 。每一次操作&#xff0c;你可以将 nums 中的任何整数替换为 1 到 limit 之间的另一个整数。 如果对于所有下标 i&#xff08;下标从 0 开始&…

reverse入门刷题(6.9)

总结&#xff1a; 拿到附件&#xff0c;先运行看看有没有信息&#xff0c;再查壳&#xff0c;再IDA运行 1.Easy_vb 收获&#xff1a; 使用搜索&#xff1a;在String的时候用的是ctrlf 在IDA_view的时候使用搜索是Aitt 打开IDA&#xff0c;Aitt搜索MCTF&#xff08;关键字即…

2024年6月最新开源电视影视TVAPP原生源码和后台管理平台源码及完整教程

本套源码为本人维护更新完善半年左右的还在使用开发的源码&#xff0c;与市面上倒卖的残次品不一样&#xff0c;没有可比性&#xff0c;向下兼容安卓4.0&#xff0c;向上兼容安卓13以上TV电视系统&#xff0c; 完全无闪退&#xff0c;弹窗报错&#xff0c;卡死、异常死循环残次…

加解密算法及国密算法应用

常见的加解密算法可以分为可逆和不可逆两种 不可逆算法 哈希算法&#xff0c;MD5&#xff0c;hs-256&#xff0c;SM3 一般系统中使用密码加密和数据防篡改校验字段就是不可逆算法 hs-256应用&#xff1a;JWT header头部payload荷载signature签名(防止篡改) 前两部分采用base…

数组双指针经典习题

合并两个有序数组 class Solution {public void merge(int[] nums1, int m, int[] nums2, int n) {int p1m-1,p2n-1;int p3nums1.length-1;while(p1>0&&p2>0){//放完一个数组if(nums1[p1]>nums2[p2]){nums1[p3--]nums1[p1];p1--;}else{nums1[p3--]nums2[p2];p…

微服务Day7学习-数据聚合、同步、补全

文章目录 数据聚合聚合分类 自动补全DSL实现Bucket聚合DSL实现Metrics聚合RestAPI实现聚合多条件聚合对接前端接口拼音分词器自定义分词器自动补全查询实现酒店搜索框自动补全 数据同步数据同步思路分析利用mq实现mysql与elasticsearch数据同步 集群介绍搭建ES集群 数据聚合 聚…

搭建vauditdemo靶场mysql为NO问题

一、问题 在搭建vauditdemo时&#xff0c;遇到如下显示问题&#xff1a; mysql版本检测为NO 二、解决 查找该方面问题时&#xff0c;并没有找到解决方法 然后换mysql版本换了五六个也没有解决问题 问了AI后给的答复有一条为将mysql改为mysqli 修改保存后解决问题 步骤如…

力扣 T62 不同路径

题目 连接 思路 思路1 &#xff1a; BFS爆搜 class Solution { public:queue<pair<int,int>>q;int uniquePaths(int m, int n) {q.push({1,1}); // 起始位置vector<pair<int, int>> actions;actions.push_back({0, 1}); // 向下actions.push_bac…

OBS 录屏软件:录制圆形头像画中画,设置卡通人像(保姆级教程,有步骤图,建议收藏)

Mac分享吧 文章目录 一、OBS录屏软件 圆形头像画中画效果注意&#xff1a;圆形画中画仅需要在软件中设置一次&#xff0c;每次录制&#xff0c;使用带有圆形头像画中画的场景 录制视频即可。该场景不可删除&#xff01;&#xff01;&#xff01;若删除&#xff0c;则需要重新设…

Vue3学习日记(day2)

目录 前言 注意事项 vite使用 1&#xff1a;控制台vite创建vue 2&#xff1a;使用可视化软件&#xff08;我使用为vscode&#xff09;npm安装对应依赖包 3&#xff1a;使用npm脚本或者直接在终端输入命令运行软件后打开生成网址 4&#xff1a;打开网址正常进入网页 rou…

【漏洞复现】飞企互联-FE企业运营管理平台 treeXml.jsp SQL注入漏洞

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外&#xff0c;支持企业B2B、C2B与020等核心需求&#xff0c;为不同行业客户的互联网转型提供支持。其特色在于提供…

限流(服务降级):基于自定义注解+切面的方式实现接口调用频率限制

文章目录 引言I 基于GuavaCache实现频率限制1.1 基于LoadingCache实现(灵活控制,高效率)【推荐】1.2 基于LoadingCache自定义RateLimiter (无法灵活控制限制时间范围)1.3 基于google的RateLimiter实现(效率低)II 基于Redis实现限流引言 背景:提供接口给下游(外部厂商)…