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

ffmpeg和ffplay命令行实战手册

文章目录

    • 视频拼接用concat
    • 视频分段拼接(ffplay 不可调用seek函数进行seek)
    • 给视频添加黑边,让视频填充并居中显示
    • 不同分辨率视频分段拼接,并且,设置单个视频的缩放比例和摆放位置
    • 视频画中画复杂嵌套用overlay(ffplay 可调用seek函数进行seek)
    • 视频画中画复杂嵌套用overlay(ffplay 不可调用seek函数进行seek)
    • 视频拼接+视频画中画复杂嵌套(ffplay 不可调用seek函数进行seek)
    • 视频精准seek
    • ffmpeg截取帧为图片
    • ffplay seek_point
    • 视频到放 reverse areverse
    • GIF编解码
    • 生成高质量GIF
    • 输出RGB数据
    • 播放RGB数据
    • 音视频倍速
    • 生成圆角矩形图片
    • 生成圆形图片
    • 中文文字生成PNG图片

视频拼接用concat

n
设置分段数。默认值为2

v
设置输出视频流的数量,也就是每个片段中视频流的数量。默认值为1

a
设置输出音频流的数量,也就是每个片段中音频流的数量。默认值为0

一定要注意n v a的数量

视频分段拼接(ffplay 不可调用seek函数进行seek)

注意:一定是vavava 而不是vvvaaa,否则GG

ffmpeg:

ffmpeg -i C:/Users/CY/Desktop/video4_540_960.mp4 -i C:/Users/CY/Desktop/video5_540_960.mp4 
-i C:/Users/CY/Desktop/video6_540_960.mp4 -filter_complex 
"[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" 
-map "[outv]" -map "[outa]" C:/Users/CY/Desktop/videoddddddddddd.mp4

一定要写setsar= 1/1,否则分辨率不一致的时候GG如下:

Input link in1:v0 parameters (size 720x1282, SAR 1:1) do not match the corresponding outputlink in0:v0 parameters (720x1280, SAR 1:1)

ffplay:

ffplay -f lavfi "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,setsar= 1/1[v0];
movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,setsar= 1/1[v1];
amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[a0];
amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
[v0][a0][v1][a1]concat=2:v=1:a=1[out0][out1]"

ffplay:

ffplay -f lavfi "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,setsar= 1/1[v0];
movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,setsar= 1/1[v1];
amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[a0];
amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
[v0][v1]concat=n=2:v=1:a=0[out0];
[a0][a1]concat=n=2:v=0:a=1[out1]"

拼接3段视频

ffplay:

ffplay -f lavfi "movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,setsar= 1/1[v0];
movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,setsar= 1/1[v1];
movie=C\\:/Users/CY/Desktop/video6_540_960.mp4,setsar= 1/1[v2];
amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[a0];
amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
amovie=C\\:/Users/CY/Desktop/video6_540_960.mp4[a2];
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[out0][out1]"

给视频添加黑边,让视频填充并居中显示

ffmpeg:

ffmpeg -f lavfi -i movie=C\\:/Users/CY/Desktop/video4_540_960.mp4,
scale=270:480,pad=540:960:(ow-iw)/2:(oh-ih)/2:black[out0];
amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4[out1]   
C:\Users\CY\Desktop\out.mp4

iw ow

ffmpeg -y -i C:\Users\CY\Desktop\0.mp4 -i C:\Users\CY\Desktop\1.mp4 -filter_complex  
"[0:v]scale='if(gte(iw/ih,1),1080,-1)':'if(gte(iw/ih,1),-1,1920)',
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black[v0];
[1:v]scale='if(gte(iw/ih,1),1080,-1)':'if(gte(iw/ih,1),-1,1920)',
pad=1080:1920:(ow-iw)/2:(oh-ih)/2:black[v1];[v0][0:a][v1][1:a]
concat=n=2:v=1:a=1[v][a]" -map [v] -map [a]  C:\Users\CY\Desktop\out.mp4

不同分辨率视频分段拼接,并且,设置单个视频的缩放比例和摆放位置

给视频上下左右添加50像素黑边
scale:将视频缩小到620*476,给即将添加的黑边预留像素
pad: “宽”、“高”、“X坐标”和“Y坐标”,宽和高指的是输入视频尺寸(包含加黑边的尺寸),XY指的是视频所在位置

ffmpeg -i test.ts -vf "scale=620:476,pad=720:576:50:50:black" test.mp4
C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffmpeg.exe -i D:/123.mp4 -vf 
"scale=100:100,pad=500:500:0:300:black" D:/linux-share-dir/video_file/output.mp4

参数解释:
100:100 视频帧在画布里的尺寸–按比例缩放的. (w:h)
500:500 画布的尺寸 . (w:h)
0:300 视频帧在画面上的位置. (x:y)
black 画布的背景颜色

ffplay:

ffplay  -f lavfi "movie=C\\:/Users/CY/Desktop/video.mp4,setsar= 1/1[v0];
amovie=C\\:/Users/CY/Desktop/video.mp4[a0];
movie=C\\:/Users/CY/Desktop/video5_540_960.mp4, crop=iw:ih/2[croped]; 
[croped]scale=1080*iw/ih:1080,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setsar= 1/1[v1];
amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
movie=C\\:/Users/CY/Desktop/mp4.mp4, pad=1920:1080:0:300:black,setsar= 1/1[v2];
amovie=C\\:/Users/CY/Desktop/mp4.mp4[a2];
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[out0][out1]"

视频画中画复杂嵌套用overlay(ffplay 可调用seek函数进行seek)

ffplay:

ffplay -x 600 -i C:/Users/CY/Desktop/video.mp4 -vf 
"movie=C\\:/Users/CY/Desktop/gx.mp4[v_logo];[in][v_logo]overlay=100:100[out]" 
-af "amovie=C\\:/Users/CY/Desktop/gx.mp4[a_logo];[in][a_logo]amix[out]"

ffmpeg:

ffmpeg -y -i C:/Users/CY/Desktop/video.mp4 -vf 
"movie=C\\:/Users/CY/Desktop/gx.mp4[v_logo];[in][v_logo]overlay=100:100[out]" 
-af "amovie=C\\:/Users/CY/Desktop/gx.mp4[a_logo];[in][a_logo]amix[out]" 
C:\Users\CY\Desktop\outttttttt.mp4

视频画中画复杂嵌套用overlay(ffplay 不可调用seek函数进行seek)

ffplay:

ffplay -f lavfi "movie=C\\:/Users/cy/Desktop/video.mp4[in];
amovie=C\\:/Users/cy/Desktop/video.mp4[in_a];
movie=C\\:/Users/cy/Desktop/mp4.mp4[logo];
amovie=C\\:/Users/cy/Desktop/mp4.mp4[logo_a];
movie=C\\:/Users/cy/Desktop/video4_540_960.mp4,scale=512:288[logo_v_1];
amovie=C\\:/Users/cy/Desktop/video4_540_960.mp4[logo_a_1];
[in][logo]overlay=100:100[overlay0];
[overlay0][logo_v_1]overlay=200:200[out0];
[in_a][logo_a]amix[m];[m][logo_a_1]amix[out1]"

视频拼接+视频画中画复杂嵌套(ffplay 不可调用seek函数进行seek)

out0 out1又可作为输入

ffplay:

ffplay  -f lavfi "movie=C\\:/Users/CY/Desktop/video.mp4,setsar= 1/1[v0];
amovie=C\\:/Users/CY/Desktop/video.mp4[a0];
movie=C\\:/Users/CY/Desktop/video5_540_960.mp4,crop=iw:ih/2[croped];
[croped]scale=1080*iw/ih:1080,pad=1920:1080:(ow-iw)/2:(oh-ih)/2:black,setsar= 1/1[v1];
amovie=C\\:/Users/CY/Desktop/video5_540_960.mp4[a1];
movie=C\\:/Users/CY/Desktop/mp4.mp4, pad=1920:1080:0:300:black,setsar= 1/1[v2];
amovie=C\\:/Users/CY/Desktop/mp4.mp4[a2];
[v0][a0][v1][a1][v2][a2]concat=n=3:v=1:a=1[out0][out1];
movie=C\\:/Users/cy/Desktop/mp4.mp4[v_logo];
amovie=C\\:/Users/cy/Desktop/mp4.mp4[a_logo];
[out0][v_logo]overlay=100:100[out0];
[out1][a_logo]amix[out1]"

视频精准seek

ffmpeg截取帧为图片

ffmpeg -y -f lavfi -i movie=C\\:/Users/CY/Desktop/1658673245.mp4,setsar=1/1[out_v_1];
amovie=C\\:/Users/CY/Desktop/1658673245.mp4[out_a_1];
movie=C\\:/Users/CY/Desktop/bb.mp4,scale=64:36,pad=64:36:(ow-iw)/2:(oh-
ih)/2:black,setsar=1/1[out_v_2];
amovie=C\\:/Users/CY/Desktop/bb.mp4[out_a_2];
[out_v_1][out_v_2]overlay=100:100[out0];[out_a_1][out_a_2]amix[out1]-ss 00:00:20 -t 1 -r 3 -q:v 2 -f image2  C:/Users/CY/Desktop/foo-%05d.jpeg

ffplay seek_point

ffplay  -f  lavfi   "movie=C\\:/Users/CY/Desktop/video.mp4:seek_point=8.337878[out0];
amovie=C\\:/Users/CY/Desktop/video.mp4:seek_point=8.337878[out1]" 

ffplay:

ffplay -f lavfi "movie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8[in];
amovie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8[in_a];
movie=C\\:/Users/cy/Desktop/mp4.mp4::seek_point=8[logo];
amovie=C\\:/Users/cy/Desktop/mp4.mp4::seek_point=8[logo_a];
movie=C\\:/Users/cy/Desktop/video4_540_960.mp4::seek_point=8,scale=512:288[logo_v_1];
amovie=C\\:/Users/cy/Desktop/video4_540_960.mp4::seek_point=8[logo_a_1];
[in][logo]overlay=100:100[overlay0];
[overlay0][logo_v_1]overlay=200:200[out0];
[in_a][logo_a]amix[m];
[m][logo_a_1]amix[out1]"

视频到放 reverse areverse

ffplay:

ffplay -x 500 -f  lavfi  
"movie=C\\:/Users/CY/Desktop/video4_540_960.mp4:seek_point=0,reverse[out0];
amovie=C\\:/Users/CY/Desktop/video4_540_960.mp4:seek_point=0,areverse[out1]"

ffplay:

ffplay -x 600 -f lavfi "movie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8,reverse[in];
amovie=C\\:/Users/cy/Desktop/video.mp4:seek_point=8,areverse[in_a];
movie=C\\:/Users/cy/Desktop/mp4.mp4:seek_point=8,reverse[logo];
amovie=C\\:/Users/cy/Desktop/mp4.mp4:seek_point=8,areverse[logo_a];
movie=C\\:/Users/cy/Desktop/video4_540_960.mp4:seek_point=8,scale=512:288,reverse[logo_v_1];
amovie=C\\:/Users/cy/Desktop/video4_540_960.mp4:seek_point=8,areverse[logo_a_1];
[in][logo]overlay=100:100[overlay0];
[overlay0][logo_v_1]overlay=200:200[out0];
[in_a][logo_a]amix[m];
[m][logo_a_1]amix[out1]"

GIF编解码

png图片合成GIF:

ffmpeg -i C:\Users\CY\Desktop\%d.png -vf palettegen C:\Users\CY\Desktop\palette.png
ffmpeg  -framerate 2 -i C:\Users\CY\Desktop\%d.png 
-i C:\Users\CY\Desktop\palette.png -lavfi paletteuse C:\Users\CY\Desktop\out.gif

先给所有png图片生成一个调色板PNG图片,然后再利用调色板PNG图片合成带透明度的GIF图片,否则有色差或者无透明度。注意:是所有和一个,不能是所有和所有,只能有一个调色板PNG图片,否则还是有色差。

生成高质量GIF

1.默认配置+关闭抖动

ffmpeg -i C:\Users\CY\Desktop\相框.mp4 -vf"fps=10,scale=480:-1:flags=lanczos,split[split1][split2];[split1]palettegen[pal];[split2][pal]paletteuse=dither=none" C:\Users\CY\Desktop\相框.gif

这个方式已经是最好的,用全局调色板(用单个调色板,反而色带更严重,编码也更久),关门抖动(否则很容易出现色差和网格)

输出RGB数据

ffmpeg -i C:\Users\CY\Desktop\bjz.gif -vf "format=rgb24" -f image2C:\Users\CY\Desktop\bjz\bjz_output%d.rgb

播放RGB数据

ffplay -pixel_format rgb24 -video_size 480x856 -i C:\Users\CY\Desktop\bjz41.rgb

必须指定分辨率,否则花屏或者报错0x0 invalid

音视频倍速

ffmpeg -y -i C:\Users\CY\Desktop\相框.mp4 -r 25*4 -filter_complex 
"[0:v]setpts=1/4*PTS[v];[0:a]atempo=4.0[a]" -map "[v]" -map "[a]"C:\Users\CY\Desktop\相框2.mp4

注意:音频倍速和视频倍速是分开写的,想降低视频的总时长,音频也是要增速的,如果希望不丢帧,则设置正确的帧率

生成圆角矩形图片

ffmpeg -y -i C:\Users\CY\Desktop\mn.jpg -frames:v 1  -filter_complex "
[0]format=rgba,geq=lum='p(X,Y)':a='if(gt(abs(W/2-X),W/2-200)*gt(abs(H/2-Y),H/2-200),
if(lte(hypot(200-(W/2-abs(W/2-X)),200-(H/2-abs(H/2-Y))),200),255,0),255)'"  
C:\Users\CY\Desktop\example.png

生成圆形图片

ffmpeg -y -i C:\Users\CY\Desktop\mn.jpg -vf 
"format=yuva420p,geq=lum='p(X,Y)':a='if(lt(sqrt((X-3648/2)^2+(Y-
5472/2)^2),3648/2),255,0)'" 
C:\Users\CY\Desktop\mn_yj.png

中文文字生成PNG图片

ffmpeg -y -f lavfi -i "color=c=0x00000000:s=300x100,drawtext=text='快乐体':fontfile=C\\:/Users/CY/Desktop/ZCOOL_KuaiLe/ZCOOLKuaiLe-Regular.ttf:fontsize=100:fontcolor=#ffffffdd:x=(w-text_w)/2:y=(h-text_h)/2,format=rgba" -frames:v 1 C:\Users\CY\Desktop\ZCOOL_KuaiLe\ZCOOLKuaiLe-Regular.png

注意:指定fontfile路径时,号必须用\\转义,路径不能用\,必须/,即使''包起来和\\转义也不行,否则乱码,因为路径指定有误,ffmpeg无法找到字库。文字颜色必须是rgba,RRGGBBAA排序。不能写argb然后幻想AARRGGBB

相关文章:

ffmpeg和ffplay命令行实战手册

文章目录 视频拼接用concat视频分段拼接(ffplay 不可调用seek函数进行seek)给视频添加黑边,让视频填充并居中显示不同分辨率视频分段拼接,并且,设置单个视频的缩放比例和摆放位置视频画中画复杂嵌套用overlay(ffplay 可调用seek函数进行seek)…...

基于MobileNet v2模型的口罩实时检测系统实现

基于kaggle数据集训练的模型其实现结果如下: 代码结构如下: 实时口罩检测器: 从导航栏中的链接“实时的口罩检测器”功能,该系统包含一个实时检测用户是否佩戴口罩的功能。基于图片的口罩检测器: 从另一个导航链接“基…...

NEEP-EN2-2023-Section5PartB

题目 个人答案 The chart depicts the outcomes of a survey conducted in a specific university regarding the acquisition of practical activity in class. The chart illustrates that learning knowledges accounts for 91.3 percent, which is the highest percentage…...

PostgreSQL17.x数据库备份命令及语法说明

PostgreSQL17.x数据库备份命令及语法说明 文章目录 PostgreSQL17.x数据库备份命令及语法说明1. 备份命令1. pg_dump命令参数2. pg_dumpall命令参数 2. pg_dump 备份单库语法3. pg_dumpall 备份所有数据库语法4. 备份案例1. pg_dump单库备份2.pg_dumpall单库备份 4. 备份案例1. …...

Java实现一个带头节点的单链表

什么是单链表? 单链表是一种基础的数据结构,其中每个节点都包含两部分: 数据域:存储节点数据。指针域:存储指向下一个节点的引用。 为什么使用头节点? 头节点的存在简化了操作逻辑: 统一操作…...

【图像配准】方法总结

图像配准(Image registration)就是将不同时间、不同传感器(成像设备)或不同条件下(天候、照度、摄像位置和角度等)获取的两幅或多幅图像进行匹配、叠加的过程,就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…...

LabVIEW汽车综合参数测量

系统基于LabVIEW虚拟仪器技术,专为汽车带轮生产中的质量控制而设计,自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合,能够对带轮的直径、厚度等多个参数进行高精度测量,并通过比较测量法判定产品合…...

三相异步电动机没有气压怎么办?

三相异步电动机作为工业和商业应用中最常见的电动机类型之一,广泛应用于各类机械设备及自动化系统中。其运行依赖于电能的转换,然而在某些情况下,可能会出现电动机驱动设备无法获得气压的情况。 一、三相异步电动机工作原理 三相异步电动机…...

软件工程书籍推荐

软件工程推荐这几本书: 1、软件设计的哲学(第2版) 本书深入探讨了软件设计中的核心问题:如何将复杂的软件系统分 解为可以相对独立实现的模块(例如类和方法),从而降低其复杂性并 提高开发效率。…...

验证集和测试集的区别

验证集(Validation Set)和测试集(Test Set)在机器学习模型训练过程中扮演着不同的角色,以下是它们之间的主要区别: 目的: 验证集:用于在模型训练过程中调整模型的超参数和做出训练…...

OpenIPC开源FPV之Adaptive-Link天空端代码解析

OpenIPC开源FPV之Adaptive-Link天空端代码解析 1. 源由2. 框架代码3. 报文处理3.1 special报文3.2 普通报文 4. 工作流程4.1 Profile 竞选4.2 Profile 研判4.3 Profile 应用 5. 总结6. 参考资料7. 补充资料7.1 RSSI 和 SNR 的物理含义7.2 信号质量加权的理论依据7.3 实际应用中…...

Next.js流量教程:核心 Web Vitals的改善

更多有关Next.js教程,请查阅: 【目录】Next.js 独立开发系列教程-CSDN博客 目录 引言 1. 什么是 Core Web Vitals? 1.1 Largest Contentful Paint (LCP) 1.2 First Input Delay (FID) 1.3 Cumulative Layout Shift (CLS) 2. 如何优化 …...

百度智能云千帆AppBuilder升级,百度AI搜索组件上线,RAG支持无限容量向量存储!

百度智能云千帆 AppBuilder 发版升级! 进一步降低开发门槛,落地大模型到应用的最后一公里。在千帆 AppBuilder 最新升级的 V1.1版本中,企业级 RAG 和 Agent 能力再度提升,同时组件生态与应用集成分发更加优化。 • 企业级 RAG&am…...

构建树莓派温湿度监测系统:从硬件到软件的完整指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...

12.11数据结构-图

无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。 有向完全图:在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。 含有n个顶点的无向完全图有…...

BERT模型入门(2)BERT的工作原理

文章目录 如名称所示,BERT(来自Transformer的双向编码器表示)是基于Transformer模型。我们可以将BERT视为只有编码器部分的Transformer。 在上一个主题《Transformer入门》中,我们了解到将句子作为输入喂给Transformer的编码器&a…...

python3 中的成员运算符

一. 简介 在Python 3中,成员运算符用于测试序列(如字符串、列表、元组、集合或字典)中是否包含某个值。身份运算符用于比较两个对象的身份,即它们是否引用内存中的同一个对象。 本文简单学习一下 python3 中的成员运算符与身份运…...

【测试面试篇1】测试开发与开发|selenium实现自动化测试|设计测试用例|常见的测试方法|开发不认可提测试的bug该怎么办

目录 1.选择走测试为什么还要学这么多的开发知识? 2.为什么选择软件测试开发岗位而不是软件开发岗位? 3.个人的职业规划是什么? 4.测试中遇到的问题如何进行解决? 5.对自己的项目做过哪些测试工作? 6.描述selenium…...

人大金仓数据linux安装注意事项

人大金仓数据linux安装注意事项 本次是个人搭建虚拟机安装centos7的环境下进行安装。 1、安装流程参照https://help.kingbase.com.cn/v9/install-updata/install-linux/preface.html。 2、mount安装文件报错 操作手册提供mount的命令如下: mount KingbaseES_V009R0…...

【Maven】多模块项目的构建

项目构建 什么是构建? 项目构建指的是将源代码和资源文件转换为可执行或可分发的软件制品(如 JAR、WAR 文件)的过程。这个过程不仅包括编译代码,还包括运行测试、打包、部署等步骤。Maven 提供了一套标准化的方法来处理这些任务…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...