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

2024-06-11 06:28

本文主要是介绍GStreamer学习2.1----获取mp4中的图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里通过获取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中,中文注释可能会导致程序问题,这个比较奇怪。

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

这篇关于GStreamer学习2.1----获取mp4中的图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050400

相关文章

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

Win32下C++实现快速获取硬盘分区信息

《Win32下C++实现快速获取硬盘分区信息》这篇文章主要为大家详细介绍了Win32下C++如何实现快速获取硬盘分区信息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实现代码CDiskDriveUtils.h#pragma once #include <wtypesbase