gstreamer常用命令
由于有好一段时间没做GStreamer相关项目了,早前的一些记录需要做下记录,以待需要的时候查阅。
还是分几个小节来介绍吧,这样思路清晰一点。(格式有点乱,没时间整理,读者自行脑补)
1. 播放视频、音频
音频:gst-launch-1.0 filesrc loaction=123.mp3 ! mad ! autoaudiosink
//补充说明:autoaudiosink可换成pulsesink或alsasink,需要使用gst-inspect查询是否存在这些sink插件,其实autoaudiosink是个壳,最终还是选择使用后两者之一。
视频:gst-launch-1.0 filesrc location=320_240.mp4 ! qtdemux ! sprdavcdec ! autovideosink
//补充说明:autovideosink默认使用ximagesink。ximagesink兼容性较好,但耗资源,xvimagesink兼容性差,因缺乏显卡支持会失败,但效率高。
其他:gst-launch-1.0 filesrc location=abc.mp4 ! qtdemux name=demux demux.video_0 ! queue ! decodebin ! videoconvert ! videoscale ! autovideosink //只分离视频并播放
gst-launch-1.0 filesrc location=3.mp4 ! decodebin ! autovideoconvert ! autovideosink //只解码和显示视频部分,音频过滤掉,decodebin使用着最简单方便
//补充:gstreamer好像不能分离出可播的264裸码流,但是可以用ffmpeg转:ffmpeg.exe -i 320_240.mp4 -vcodec copy -an 320_240.h264
2. 视频、音频编码
视频:gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw, width=1920, height=1080" ! omxh264enc ! "video/x-h264, stream-format=byte-stream" ! h264parse ! qtmux ! filesink location=test.mp4
音频:gst-launch-1.0 audiotestsrc ! audioconvert ! "audio/x-raw,format=S16LE,channels=2,rate=8000" ! lamemp3enc ! filesink location=audio_conv.mp3
gst-launch-1.0 xxx.mp3 ! mad ! audioconvert ! lamemp3enc ! filesink location=xxx_mad_lame.mp3 //mad只解码出S32LE的格式,lame只支持S16LE的格式,因此必须通过audioconvert来转换
3. 摄像头预览
gst-launch v4l2src ! video/x-raw-yuv,width=320,height=240,framerate=20/1 ! autovideosink
说明:v4l2src即图形源,如果不带此插件,可以用videotestsrc替代
4. 转码(avc->yuv, mp3/aac->pcm)
avc->yuv:gst-launch-1.0 filesrc location=attachment.mkv ! matroskademux ! avdec_h264 ! filesink location=tmp.yuv //注意,生成的yuv的size会非常大,mkv中的视频为h264格式
avc->yuv->sink:gst-launch-1.0 filesrc location=dgld.mp4 ! qtdemux ! avdec_h264 ! videoconvert ! video/x-raw,format=I420 ! autovideosink
mp3->wav:gst-launch-1.0 filesrc location=1.mp3 ! mad ! wavenc ! filesink location=1.wav //mad解码出来是32bit的pcm数据,不是S16LE格式的,wavenc其实是对pcm数据编码+封装的过程,因为要有32->S16LE和加wave_header的过程
aac->wav->sink:gst-launch-1.0 filesrc location=out.aac ! aacparse ! avdec_aac ! audioconvert ! alsasink //aac文件到解码之间必须要有一个aacparse,而MP3没有,是因为AAC的ADTS、ADIF容器格式文件导致的吧
5. 常用的一些插件介绍
h265解码,社区提供了两个插件:avdec_h265,de265,前者为ffmpeg项目提供的,后者为德国一家公司提供的插件+解码库
avdec_xxx为ffmpeg项目组提供的解码插件方案,例如avdec_h264、avdec_aac
xxmux为文件封装插件,如qtmux(不要理解为做UI库的QT公司,而是mp4封装,即苹果公司推出的QuickTime符合mp4规范的)
xxdemux为解封装插件
6. filter相关
crop处理:gst-launch-1.0 -v videotestsrc ! videocrop top=42 left=1 right=4 bottom=0 ! ximagesink //videocrop——裁边,可以处理解码器将width/height强制32或64对齐而引入的右侧/底部的灰边,其值表示裁掉多少像素。
7. 网络推流/拉流(两个终端下执行)
gst-launch-1.0 tcpserversrc host="127.0.0.1" port=3000 ! decodebin ! autoaudiosink
gst-launch-1.0 filesrc location=./1.mp3 ! tcpclientsink host="127.0.0.1" port=3000
8. jpeg相关
mjpeg文件解码+显示:gst-launch-1.0 filesrc location=test_mjpeg.mp4 ! qtdemux ! jpegdec ! videoconvert ! autovideosink
mjpeg文件解码+多文件保存:gst-launch-1.0 filesrc location=test_mjpeg.mp4 ! qtdemux ! jpegdec ! multifilesink location=%02d.yuv
jpeg解码+显示:gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! videoconvert ! imagefreeze ! ximagesink //解码后显示,必须用imagefreeze和videoconvert插件,在PC上验证结果。imagefreeze——将图像冻结,否则很快消失。
//yuv的显示
//以下不知道为什么显示全黑色的图像——log中出现了error信息!
//把pixel-aspect-ratio和interlace-mod这两个属性去掉,因为videoconvert的SinkPad不带这些属性
gst-launch-1.0 filesrc location=xxx.yuv ! "video/x-raw,format=I420,width=1280,height=720,pixel-aspect-ratio=1/1,framerate=0/1,interlace-mod=progressive" ! videoconvert ! imagefreeze ! ximagesink //yuv图片的显示
//最终答案是,filesrc 添加文件大小的属性:blocksize=xxx,表示数据源多大,来确定读多少数据来作为一帧。
//videoconvert的sink_pad,有的gst版本要求带framerate的属性,否则报错
gst-launch-1.0 filesrc blocksize=xxx location=xxx.yuv ! "video/x-raw,format=I420,width=1280,height=720" ! videoconvert ! imagefreeze ! ximagesink
//yuv的jpeg编码,前半部分一样,后半部分进行编码+写文件
gst-launch-1.0 filesrc blocksize=xxx location=xxx.yuv ! "video/x-raw,format=I420,width=1280,height=720" ! videoconvert ! jpegenc ! filesink location=yyy.jpg
gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! imagefreeze ! glimagesink //解码+显示
gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! filesink location=test.yuv //解码+存本地文件
gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! imagefreeze ! glimagesink //yuv显示
gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! jpegenc ! filesink location=test_enc.jpg //利用yuv文件编码
//解码+显示
gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! imagefreeze ! glimagesink //可以指定文件大小,使用blocksize=xxx
//解码+存本地文件
gst-launch-1.0 filesrc location=test.jpg ! jpegdec ! filesink location=test.yuv
//yuv文件显示
gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! imagefreeze ! glimagesink
说明:blocksize指定test.yuv文件的大小,width=900,height=800指定yuv文件的实际宽高,必须填对!
//利用yuv文件jpeg编码
gst-launch-1.0 filesrc blocksize=1081600 location=test.yuv ! video/x-raw,width=900,height=800,format=I420,framerate=0/1 ! videoconvert ! jpegenc ! filesink location=test_enc.jpg
说明:blocksize指定test.yuv文件的大小
9. 其他未归类命令
gst-launch-1.0 filesrc location=Capture001.png ! pngdec ! imagefreeze ! autovideosink
gst-launch-1.0 filesrc location=Capture001.png ! pngdec ! filesink location=png.yuv
gst-launch-1.0 filesrc location=320_240_hevc.mp4 ! qtdemux ! filesink location=320_240_gst_naked.hevc //跟ffmpeg分流后得到的不太一样,start_code中包含size信息
gst-launch-1.0 filesrc location=320_240_hevc.mp4 ! qtdemux ! sprdhevcdec ! filesink location=320_240_hevc.yuv
gst-launch-1.0 filesrc location=320_240_hevc.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
gst-launch-1.0 filesrc location=bigbuckbunny_1080p_4mbps.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
gst-launch-1.0 filesrc location=Movie_h265_NA.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
gst-launch-1.0 filesrc location=02_Naturally_720p_x265.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
gst-launch-1.0 filesrc location=bigbuckbunny_1080p_4mbps_ffmpeg.mp4 ! qtdemux ! sprdhevcdec ! fakevideosink
10. 其他未归类命令
用gstreamer的管道命令,太麻烦了,真不如ffmpeg用着方便啊!
当然,其存在必然有其合理性,这是linux平台下通用的多媒体中间件系统,多种播放器都是使用它来做的,它的一个很大特点是软件分层、解耦、抽象做的非常好。
如果要做一些插件,需要有一些基础知识,例如gobjec,glib库。
gstreamer常用命令的更多相关文章
- GStreamer基础教程12 - 常用命令工具
摘要 GStreamer提供了不同的命令行工具用于快速的查看信息以及验证Pipeline的是否能够正确运行,在平时的开发过程中,我们也优先使用GStreamer的命令行工具验证,再将Pipeline集 ...
- 【视频开发】Gstreamer中一些gst-launch常用命令
GStreamer是著名的开源多媒体框架,功能强大,其命令行程序 gst-launch 可以实现很多常规测试.播放等,作为系统调试等是非常方便的. 1.摄像头测试 gst-launch v4l2src ...
- Linux 常用命令(持续补充)
常用命令: command &:将进程放在后台执行 ctrl + z:暂停当前进程 并放入后台 jobs:查看当前后台任务 bg( %id):将任务转为后台执行 fg( %id):将任务调回前 ...
- LVM基本介绍与常用命令
一.LVM介绍LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制LVM - 优点:LVM通常用于装备大量磁盘的系统,但它同样适 ...
- Linux学习笔记(一):常用命令
经过统计Linux中能够识别的命令超过3000种,当然常用的命令就远远没有这么多了,按照我的习惯,我把已经学过的Linux常用命令做了以下几个方面的分割: 1.文件处理命令 2.文件搜索命令 3.帮助 ...
- git常用命令(持续更新中)
git常用命令(持续更新中) 本地仓库操作git int 初始化本地仓库git add . ...
- 【原】npm 常用命令详解
今年上半年在学习gulp的使用,对npm的掌握是必不可少的,经常到npm官网查询文档让我感到不爽,还不如整理了一些常用的命令到自己博客上,于是根据自己的理解简单翻译过来,终于有点输出,想学习npm这块 ...
- npm常用命令
npm常用命令 环境:win7 npm 是什么 NPM(node package manager),通常称为node包管理器.顾名思义,它的主要功能就是管理node包,包括:安装.卸载.更新.查看.搜 ...
- Git 常用命令
一.初始環境配置 git config --global user.name "John Doe"git config --global user.email johndoe@ex ...
随机推荐
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
- SQL优化这么做就对了
目录 前言 SQL优化一般步骤 1.通过慢查日志等定位那些执行效率较低的SQL语句 2.explain 分析SQL的执行计划 3.show profile 分析 4.trace 5.确定问题并采用相应 ...
- Swift 5.3 All In One
Swift 5.3 All In One refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- calendar merge date
calendar merge date componentDidMount () { const { monthDays, // monthDates, } = this.props; const d ...
- 死磕以太坊源码分析之EVM固定长度数据类型表示
死磕以太坊源码分析之EVM固定长度数据类型表示 配合以下代码进行阅读:https://github.com/blockchainGuide/ 写文不易,给个小关注,有什么问题可以指出,便于大家交流学习 ...
- 20201228 买卖股票的最佳时机 IV(困难)
给定一个整数数组 prices ,它的第 i 个元素 prices[i] 是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意:你不能同时参 ...
- springboot学习过程随记
1.整合shiro+jwt(若忘记需结合测试代码springboot-mybatisplus-shiro-demo看) 配置比较简单 定义一个类继承AuthorizingRealm 如下: (1)pu ...
- Django模型层2
目录 一.聚合查询 聚合函数 二.分组查询 利用group by进行分组查询 三.F与Q查询 1. F类 2. Q类 四.orm字段及参数 五.自定义char字段 六.orm中的事务操作 1. 什么是 ...
- 第30天学习打卡(异常概述 IO流概述)
异常概述 即非正常情况,通俗的说,异常就是程序出现的错误 异常的分类(Throwable) 异常(Exception) 合理的应用程序可能需要捕获的问题 举例:NullPointerException ...
- docker mysql数据备份xtrabackup
一.概述 线上有一个mysql,是在docker里面运行的. 关于docker封装mysql镜像,请参考链接:https://www.cnblogs.com/xiao987334176/p/11984 ...