Gimp 抠图

GIMP:利用蒙板工具实现人像抠图

利用蒙板工具进行抠图简单介绍

方法步骤

1.打开图像

2.复制图层

3.选中图层

4.将图层改为单色

5.人像与背景分离

6.反相显示

7.人像部分描白

8.添加图层蒙板

9.粘贴白色人像轮廓

10.图层不可视

11.解决人像范围不正确

12.随意更换图像背景

利用蒙板工具进行抠图简单介绍

在GIMP中用蒙板工具抠图的方法,大体步骤为:复制图层、单色化、增加对比度、描画轮廓、复制轮廓;然后在原始图层上添加蒙板、粘贴轮廓;最后让生成轮廓的图层不可见。

方法步骤

1.打开图像

用GIMP打开所要处理的图像

2.复制图层

在图层上右击,选择复制图层

3.选中图层

单击带有“副本”的图层,即可选中刚复制的图层

4.将图层改为单色

选中刚复制的图层后,在菜单栏单击“颜色”,选择“分量”中的“单色混合器”

5.人像与背景分离

在打开的“单色混合器”对话框中,调整红、绿、蓝三色的值,使人像与背景尽量分离

6.反相显示

点击菜单栏的“颜色”,选择“反相”,将复制的图层反相显示

选择“反相”后,效果如下图

7.人像部分描白

在工具窗口中选择“画笔”工具,将人像轮廓以内的部分全部描成白色;

描完后可以通过“颜色”菜单选择“亮度-对比度”,进一步提高人像与背景的反差

8.添加图层蒙板

此时带有“副本”的图层处于选中状态,按Ctrl+c组合键进行复制白色人像轮廓;

然后点击原图层,右键选择“添加图层蒙版”

在弹出的对话框中,选择“白色(全不透明)”,单击添加按钮

9.粘贴白色人像轮廓

单击原图层上代表蒙板的白色小方块;

然后按Ctrl+v组合键,将已复制的白色人像轮廓粘贴过来;

这时会出现一个名为“浮动选区”的图层,右击该图层,选择“固定图层”

10.图层不可视

此时,图层又只有两个,单击带有“副本”图层前面的眼睛图标,让该图层变得不可视,即将人像从背景中分离出来了

11.解决人像范围不正确

如果此时发现人像部分的范围少了或者多了,则可以在带有图层蒙板的原始图层上右击,选择“显示图层蒙板”,重新使用画笔对蒙板进行描画(描黑是隐藏,描白是显现)

12.随意更换图像背景

完成人像背景分离后,便可以运用多种方法随意更换图像的背景了;

比如:新建一个图层置于最下层,使用“油漆桶”工具为该图层进行背景填充

python3连接oracle数据库

声明:pythoncx_Oracleinstantclient的版本应一致

我这里使用的版本是python3.6 64 ,cx_Oracle-5.3-11g.win-amd64-py3.6-2instantclient-basic-windows.x64-18.5.0.0.0dbru

1. 首先安装cx_Oracle

尽量不要直接使用pip install cx_Oracle,这样默认安装的是最新版本的cx_Oracle,可能会出现以下错误

1.1 cx_Oracle 报错:cx_Oracle.DatabaseError: DPI-1050: Oracle Client library must be at version 11.2

解决方法:从 https://pypi.python.org/pypi/cx_Oracle/5.3 下载低版本cx_Oracle版本 可以下载cx_Oracle-5.3-11g.win-amd64-py3.6-2.exe ,然后直接安装

1.2 如果在安装cx_Oracle-5.3-11g.win-amd64-py3.6-2.exe 时提示Python version 3.6 required, which was not found in the registry

可以通过执行这个文件来解决

register.py   链接: https://pan.baidu.com/s/1GcPK_I7ddSLZkM2sv7AHtA    提取码: qrwm 

2. 下载instantclient-basic-windows.x64-11.2.0.4.0.zip,解压并配置环境变量(放到path中)

下载地址:https://www.oracle.com/technetwork/cn/topics/winx64soft-101515-zhs.html

下载好后解压,并配置环境变量

3. instantclient下所有.dll文件到python\Lib\site-packages\下(我这里的路径为C:\Develop\Anaconda3\Lib\site-packages

4. 测试代码如下

import cx_Oracle conn=cx_Oracle.connect('username','password','172.16.5.29:1521/ORCL') cursor=conn.cursor()   print("连接成功!")   cursor.close() conn.commit() conn.close()

当你看到“连接成功”的提示语句时,那么就恭喜你成功了用python连上了oracle数据库

python 获取mysql查询结果的相应字段值

完成这个任务的整体流程,具体步骤如下:

步骤1        连接到MySQL数据库

步骤2        执行SQL查询语句

步骤3        获取查询结果

步骤4        提取相应字段的值

接下来,我将逐个步骤详细说明。

步骤1:连接到MySQL数据库

首先,我们需要安装Python的MySQL驱动程序。在命令行中运行以下命令安装驱动程序:

pip install mysql-connector-python  #mysql-connector已经过期

接下来,在Python脚本中引入MySQL驱动程序,并使用connect()函数连接到MySQL数据库。你需要提供数据库的相关信息,例如主机名、用户名、密码和数据库名称。

import mysql.connector

# 连接到MySQL数据库

cnx = mysql.connector.connect(

  host=”localhost”,

  user=”yourusername”,

  password=”yourpassword”,

  database=”yourdatabase”

)

步骤2:执行SQL查询语句

一旦成功连接到MySQL数据库,我们就可以执行SQL查询语句了。在这个示例中,我们执行一个简单的SELECT语句来检索一条数据:

# 执行SELECT语句

cursor = cnx.cursor()

sql = “SELECT * FROM yourtable”

cursor.execute(sql)

步骤3:获取查询结果

执行查询后,我们需要从结果中获取数据。MySQL驱动程序提供了fetchall()方法来获取所有查询结果。这个方法返回一个元组列表,每个元组代表一条查询结果。

# 获取查询结果

results = cursor.fetchall()

步骤4:提取相应字段的值

最后,我们需要从查询结果中提取相应字段的值。假设我们的查询结果包含三个字段:id、name和age。我们可以使用索引来提取这些字段的值。

# 提取相应字段的值

for result in results:

  id = result[0]

  name = result[1]

  age = result[2]

  print(“ID: “, id)

  print(“Name: “, name)

  print(“Age: “, age)

完成以上步骤后,你将能够成功获取MySQL查询结果的相应字段值。

Git 操作总结

一、在A机器上创建项目

1、eclipse创建项目

2、github创建仓库

3、eclipse share project,连接github

4、fetch remot from github,merge

5、push to github

二、B机器从git创建项目

7、import from git

8、选择存放路径,这里存放路径就是eclipse实际路径,没有保存到原workspace

9、fetch from remote,然后merge ,先fetch才可以后续push,如果无法push可能是没有fetch最新代码

10、修改编辑代码

11、push remote

三、A获取更新代码

12、fetch remot from github,merge

四、无法添加lib/jar

13、选择lib,ignore

14、编辑ignore文件,找到位置 添加!

五、回滚

15、选择项目,show history 选择提交,revert commit

16、revert commit不能解决的reset 强制回滚(慎用)

删除Git仓库所有提交历史记录,成为一个干净的新仓库

场景

把旧项目提交到Git上,但是会有一些历史记录,这些历史记录中可能会有项目密码等敏感信息。如何删除这些历史记录,形成一个全新的仓库,并且保持代码不变呢?

操作

Checkout

git checkout –orphan latest_branch

Add all the files

git add -A

Commit the changes

git commit -am “commit message”

Delete the branch

git branch -D master

Rename the current branch to master

git branch -m master

Finally, force update your repository

git push -f origin master

强制pull远端覆盖本地文件

git fetch –all 

git reset –hard origin/master

Java 命令行编译

做一个手动编译打包执行java类例子 

首先进入zipCompressorByAnt 下面的操作都是在这个目录下进行的 

目录结构如下,src里面存放了我们的java类,lib里是我们要用到的包,我们的目地是首先把java类编译成class文件放在当前class目录下并包含包路径,然后把class文件打成jar放在lib下 

首先们要建一个class文件,javac编译的时候不会生成目录除了类中含有的包名目录外,然后用如下的命令就可以生成class文件,并放在我们指定的目录下 

Java代码  

  1. javac -encoding utf-8 -Djava.ext.dirs=./lib  -d class src/com/yan/compress/*.java  

对上面的命令进行说明 

-encoding utf-8 指定编码,如果不指定就以平台的编码为准 

-Djava.ext.dirs=./lib 指定编译的时候调用的类 

-d class 指定要生成到的目录 

src/com/yan/compress/*.java 这就是具体要编译的类了,星号表示这个目录下的所有的java文件,如果在这个目录下有多个java文件,那么装分别生成class文件到指定目录 

命令执行后就可以看到class目录中就有了我们编译过的类 

第二步生成jar文件 

Java代码  

  1. jar -cf lib/abc.jar class/com/yan/compress/ZipCompressorByAnt.class  

对命令进行一个说明 

-c 就是要生成jar包 

-f后面跟指定的包名lib/abc.jar 

class/com/yan/compress/ZipCompressorByAnt.class  类文件 

命令执行后就可以看到在lib目录下多了一个abc.jar包 

第三步就是执行这个类 

Java代码  

  1. java -Djava.ext.dirs=./lib    com.yan.compress.ZipCompressorByAnt  2013-08-04  

-Djava.ext.dirs=./lib 指定要用到的包 

com.yan.compress.ZipCompressorByAnt 带包名的类 

2013-08-04 参数,如果需要参数的话就可以带参数 

到这里一个手工编译类的例子就完成了,下面就对命令的一些细节进行一些扩展 

如果在编译的时候想一下子编译多个类,并且这些类不在一个文件夹里怎么办 

假设除了下面的要编译的类个还有在a/*.java b/*.java  c/*.java 一些文件 

其实也简单就看命令 

Java代码  

  1. javac -encoding utf-8 -Djava.ext.dirs=./lib  -d class src/com/yan/compress/*.java a/*.java b/*.java c/*.java  

指定编译版本 和编码格式

javac -Djava.ext.dirs=../lib  -encoding UTF-8 -source 1.2 -target 1.2  com/htxx/fzbb/bbgl/*.java

相关文章

java 命令行打包成可执行jar

ffmpeg的简单使用方法

转码和编辑视频

今天用Android Studio(后面简称AS)里的模拟器给系统录屏,用来展示OpenGL可视化的东西,打算上传B站,后来发现AS只能保存webm格式和GIF格式的视频,并且文件体积巨大,视频图像也是顺时针旋转的。

没办法,只能找个视频编辑器进行转码和编辑,结果发现网上的视频转码工具基本粗制滥造,像Adobe PR这样的视频剪辑软件我也没必要下载,于是找到了ffmpeg(其实很早之前在树莓派上玩Linux的时候用过)。

我进入ffmpeg官网下载了Win64版本,下载速度很快,下载下来就是一个压缩包,解压后就是工具本体了,不过它没有任何UI界面,在Windows下你只能进入bin目录,然后Shift+鼠标右键打开命令窗口,使用ffmpeg的指令进行操作。如下图,可以看到转码效率很高。

下面分析网上搜集的ffmpeg简单用法,可以进行很多基础的视频编辑。

ffmpeg的简单用法

转码

最简单命令如下:

ffmpeg -i out.ogv -vcodec h264 out.mp4
ffmpeg -i out.ogv -vcodec mpeg4 out.mp4
ffmpeg -i out.ogv -vcodec libxvid out.mp4
ffmpeg -i out.mp4 -vcodec wmv1 out.wmv
ffmpeg -i out.mp4 -vcodec wmv2 out.wmv

-i 后面是输入文件名。-vcodec 后面是编码格式,h264 最佳,但 Windows 系统默认不安装。如果是要插入 ppt 的视频,选择 wmv1 或 wmv2 基本上万无一失。

附加选项:-r 指定帧率,-s 指定分辨率,-b 指定比特率;于此同时可以对声道进行转码,-acodec 指定音频编码,-ab 指定音频比特率,-ac 指定声道数,例如

ffmpeg -i out.ogv -s 640×480 -b 500k -vcodec h264 -r 29.97 -acodec libfaac -ab 48k -ac 2 out.mp4

ffmpeg -i 0001-0215.mkv -s 1920×1080 -b 1100k -vcodec h264 -r 60  out.mp4

ffmpeg -i 0001-0150.mkv -vcodec h264 -b:v 0  out5.mp4

剪切

用 -ss 和 -t 选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:

ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 output.wmv
ffmpeg -i input.wmv -ss 30 -c copy -t 10 output.wmv

达成相同效果,也可以用 -ss 和 -to 选项, 从第 30 秒截取到第 40 秒:

ffmpeg -i input.wmv -ss 30 -c copy -to 40 output.wmv

值得注意的是,ffmpeg 为了加速,会使用关键帧技术, 所以有时剪切出来的结果在起止时间上未必准确。 通常来说,把 -ss 选项放在 -i 之前,会使用关键帧技术; 把 -ss 选项放在 -i 之后,则不使用关键帧技术。 如果要使用关键帧技术又要保留时间戳,可以加上 -copyts 选项:

ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy -copyts cut.mp4

合并

把两个视频文件合并成一个。

简单地使用 concat demuxer,示例:

$ cat mylist.txt
file ‘/path/to/file1’file ‘/path/to/file2’file ‘/path/to/file3’$ ffmpeg -f concat -i mylist.txt -c copy output

更多时候,由于输入文件的多样性,需要转成中间格式再合成:

ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
cat intermediate1.mpg intermediate2.mpg > intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

调整播放速度

加速四倍:

ffmpeg -i TheOrigin.mp4 -vf  “setpts=0.25*PTS” UpTheOrigin.mp4

四倍慢速:

ffmpeg -i TheOrigin.mp4 -vf “setpts=4*PTS” DownTheOrigin.mp4

帧率设置

使用-r选项

语法是:

ffmpeg -i input -r fps output

例如:

ffmpeg -i input.avi -r 30 output.mp4

使用fps filter

另一个设置帧率是用fps filter,特别是在filterchains使用时非常有用。

例如:修改输入文件的帧率到25

ffmpeg -v clip.mpg -vf fps=fps=25 clip.webm

比特率设置

比特率也是一个决定音视频总体质量的参数。他决定每个时间单位处理的bit数。

设置比特率:

比特率决定处理1s的编码流需要多少bits,设置用-b选项。区分音视频用-b:a和-b:v

例如:设置整体1.5Mbit每秒

ffmpeg -i file.avi -b 1.5M file.mp4

ffmpeg -i input.avi -b:v 1500K output.mp4

CBR设置

CBR设置一般用作直播流,比如视频会议。为输出设置CBR,有三个参数必须设置为同一个值。

bitrate(-b option), minimal rate(-minrate), maximal rate(-maxrate)。maximal rate需要设置-bufsize选项。例如设置CBR为0.5Mbit/s。

ffmpeg -i in.avi -b 0.5M -minrate 0.5M -maxrate 0.5M -bufsize 1M output.mkv

设置输出文件的最大size

用-fs选项。

例如设置输出文件的最大的size为10M

ffmpeg -i input.avi -fs 10MB output.mp4

文件大小计算

文件的大小是是音视频流大小的和。

视频流的大小的方程式是(除以8是由bits到bytes的转换):

video_size = video_bitrate * time_in_seconds / 8;

如果音频是解压缩的,计算公式是:

audio_size = smpaling_rate * bit_depth * channels * time_in_second / 8;

例如:计算10分钟的视频, 1500kbits/s 视频比特率和 128kbits/s的音频比特率,用下面的计算方法:

file_size = video_size + audio_size;
file_size = (video_bitrate + audio_bitrate) * time_in_seconds / 8;
file_size = (1500 kbits/s + 128kbits/s) * 600s
file_size = 1628kbits/s * 600s
file_size = 976800kb = 976800000 b / 8 = 122100000 B / 1024 = 119238.28125KB
file_size = 119238.28125 KB / 1024 = 116.443634033203125MB = 116.44M

———————–

好,如果你现在很着急将AV1转换为MP4,那么只要运行下面这行FFmpeg命令,这个方法对大部分用例都有效。

ffmpeg -i input_filename.avi -c:v copy -c:a copy -y output_filename.mp4

复制

在该命令行中,你提供了:

  • AVI视频作为输入
  • 明确输出MP4的文件名
  • 让FFmpeg直接将视频和音频(命令为:-c:v copy -c:a copy)从AVI容器格式复制到MP4容器格式。

注意:我假设你手上已经有了想要转换格式的AVI文件。如果没有,你可以通过在网上搜索“avi video samples”获取,或者在这里下载(这是我在FFmpeg系列文章中将用到的):https://file-examples-com.github.io/uploads/2018/04/file_example_AVI_1280_1_5MG.avi

什么是Codecs和Formats?

你需要知道的最重要的事就是Formats和Codecs之间的区别。

简单来说,

  • 编解码器(Codecs)获取原始音频和视频后进行压缩,压缩到一个合理的空间大小。这种压缩是在考虑音频和视频质量的前提下完成的。更多关于视频压缩的介绍,请阅读:视频编码完全指南
  • 音频和视频压缩过程的输出被打包进一个被称为容器(Formats)的格式中,而打开容器以及读取音频和视频的方式也有明确的规则和指南。容器有不同的格式,如 MP4、AVI、WebM、MKV等。

当FFmpeg转换格式时发生了什么?

当你将AVI文件交给FFmpeg并告诉它生成一个不带任何参数的MP4文件,它将解复用输入文件,提取原始视频进行重新编码,然后将它放入MP4容器格式中,最后返还给你输出文件。

这里需要注意的关键点是:除非你告知FFmpeg不要重新编码,否则它将重新编码内容。无论如何一定要记住这一点!重新编码是默认设置。

这也是在文章开头我们指示FFmpeg只复制音频和视频的原因。

现在让我们尝试使用FFmpeg通过重新编码将AVI文件转换为MP4。

在此之前,我们先来检查一下AVI文件,研究一下其中的参数如何?要研究参数,我们可以使用ffprobe ,它是FFmpeg工程中的一个工具,对于分析视频文件来说非常有用。 

请运行下面的命令:

ffprobe -i file_example_AVI_1280_1_5MG.avi

复制

然后你得到:

Input #0,avi,from’file_example_AVI_1280_1_5MG.avi’:Metadata:encoder         :Lavf57.19.100Duration:00:00:30.61,start:0.000000,bitrate:387kb/s    Stream #0:0:Video:h264(High)(H264/0x34363248),yuv420p(progressive),1280×720 [SAR1:1DAR16:9],234kb/s,30fps,30tbr,30tbn,60tbc    Stream #0:1:Audio:aac(LC)([255][0][0][0]/0x00FF),48000Hz,stereo,fltp,139kb/s

复制

上面的代码清楚地显示了两个媒体流——视频 #0:0 和音频 #0:1。视频分辨率是1280×720、30fps,视频编码方式为High Profile的H.264/AVC,其码率为234 kbps。音频使用aac ,其码率为139 kbps,采样率为48 KHz。

现在,让我们使用FFmpeg将AVI视频转换为MP4,但是我们要使用VP9而非H.264/AVC。下面是实现转换的命令行:

ffmpeg -i file_example_AVI_1280_1_5MG.avi -c:a copy -c:v vp9 -b:v 100K outputVP9.mp4

复制

这里,你用FFmpeg:

  • 使用-c:a copy 参数原样复制音频(不重新编码音频)。
  • 使用VP9编码,码率设置为100kbps(-c:v vp9 -b:v 100K )。
  • 输出名为outputVP9.mp4的MP4文件。

下面的代码就是运行上述命令时控制台的输出:

Input #0,avi,from’file_example_AVI_1280_1_5MG.avi’:Metadata:encoder         :Lavf57.19.100Duration:00:00:30.61,start:0.000000,bitrate:387kb/s    Stream #0:0:Video:h264(High)(H264/0x34363248),yuv420p(progressive),1280×720 [SAR1:1DAR16:9],234kb/s,30fps,30tbr,30tbn,60tbc    Stream #0:1:Audio:aac(LC)([255][0][0][0]/0x00FF),48000Hz,stereo,fltp,139kb/sStream mapping:Stream #0:0->#0:0(h264(native)->vp9(libvpx-vp9))Stream #0:1->#0:1(copy)Press [q]to stop,[?]forhelp[libvpx-vp9 @ 0x7f8fcb00f600]v1.8.2Output #0,mp4,to ‘outputVP9.mp4’:Metadata:encoder         :Lavf58.45.100Stream #0:0:Video:vp9(libvpx-vp9)(vp09 /0x39307076),yuv420p,1280×720 [SAR1:1DAR16:9],q=-1–1,100kb/s,30fps,15360tbn,30tbc    Metadata:encoder         :Lavc58.91.100libvpx-vp9    Side data:cpb:bitrate max/min/avg:0/0/0buffer size:0vbv_delay:N/AStream #0:1:Audio:aac(LC)(mp4a /0x6134706D),48000Hz,stereo,fltp,139kb/sframe=903fps=1.2q=0.0Lsize=959kB time=00:00:30.54bitrate=257.2kbits/s dup=2drop=0speed=0.0414xvideo:421kB audio:521kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead:1.800530%

复制

如果你认真读取控制台输出,你就能发现FFmpeg使用了libvpx-vp9重新编码了视频流,码率是100kbps。

像以往一样,你可以通过ffprobe确认之前FFmpeg成功地输出了MP4,并且使用的视频编码是VP9。

ffprobe -i outputVP9.mp4

复制

控制台输出可以确认:使用VP9编码,码率为114 kbps(接近100kbps)。

Input #0,mov,mp4,m4a,3gp,3g2,mj2,from’outputVP9.mp4′:Metadata:major_brand     :isom    minor_version   :512compatible_brands:isomiso2mp41    encoder         :Lavf58.45.100Duration:00:00:30.57,start:0.000000,bitrate:257kb/s    Stream #0:0(und):Video:vp9(Profile 0)(vp09 /0x39307076),yuv420p(tv,progressive),1280×720,114kb/s,SAR1:1DAR16:9,30fps,30tbr,15360tbn,15360tbc(default)Metadata:handler_name    :VideoHandler    Stream #0:1(und):Audio:aac(LC)(mp4a /0x6134706D),48000Hz,stereo,fltp,137kb/s(default)Metadata:handler_name    :SoundHandler

复制

major-brand是isom,它告诉我们该文件符合ISO/IEC基础媒体格式(ISO/IEC 14496-12 – MPEG-4 Part 12),即MP4。

转换过程中重新编码是好是坏?

这要看你是想直接复制视频并只改变容器格式(从AVI转换为MP4)还是确实想要重新编码视频并更改视频质量、大小等。

如果我不重新编码(从AVI到MP4的无损转换)会发生什么?

这种情况下,你要做的非常简单!直接运行下面的命令行就可以了。

ffmpeg -i input_filename.avi -c:v copy -c:a copy -y output_filename.mp4

复制

你向FFmpeg 传递的信息如下:

  • AVI视频是输入文件
  • 确定输出的MP4的文件名
  • 告知FFmpeg直接将视频和音频(命令为:-c:v copy -c:a copy )从AVI容器格式转到MP4容器格式。

顺便说下,上面的操作在我的Mac上只花了0.3秒。这是因为FFmpeg只是复制AVI文件中的视频和音频,并未重新编码,并将它们放入MP4容器。

因为视频并没有重新编码,所以你可以认为这种从AVI到MP4的转换是无损转换。然而,如果我是你,我会在距离我三米之内的视频压缩工程师面前谨慎使用无损视频压缩这个词。要是你这么做了,请一定给他买杯咖啡或者阿司匹林压压惊 🙂

就到这里了,现在你已经了解了如何使用FFmpeg将AVI转换为MP4。很容易,对不对?

红利:FFmpeg安装指南

1、如何在Windows上安装FFmpeg?

如果你不是程序员,且无法使用编码工具,那么在Windows上编译和安装FFmpeg对你来说将是一个复杂的过程。无论如何,你都可以前往OTTVerse’s FFmpeg buildshttps://ottverse.com/ffmpeg-builds/)下载已编译的.exeFFmpeg文件使用。我建议你下载静态版本(除非你正计划使用FFmpeg开发软件并需要共享库)

2、如何在MacOS安装FFmpeg?

在Mac上,你可以使用brew指令安装FFmpeg,brew是Mac系统中一个非常好用的包管理器。下面是在Mac上安装FFmpeg的命令行(在Cataline v 10.15.5上测试和使用):

brew install ffmpeg

复制

3、如何在Ubuntu上安装FFmpeg?

在Ubuntu上,你可以通过多种方式安装 FFmpeg:使用apt包管理器或从源代码编译。如果你想要通过apt快速安装FFmpeg,可以使用下面的命令行:

sudo apt install ffmpeg

复制

如果你想从源代码编译FFmpeg,可以使用 FFmpeg 官方安装指南中提到的步骤:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu;

或者你也可以参考我写的这篇文章:https://ottverse.com/vmaf-ffmpeg-ubuntu-compilation-installation-usage-guide/,我已经描述了FFmpeg安装过程(包括缺少步骤)。

—————————–

帧率

帧率(Frame rate)也叫帧频率,帧率是视频文件中每一秒的帧数,肉眼想看到连续移动图像至少需要15帧。

帧率

1、用 -r 参数设置帧率

ffmpeg –i input –r 25 output

2、用fps的filter设置帧率

ffmpeg -i 1.mp4 -vf fps=fps=25 11.mp4

例如设置帧率为29.97fps,下面三种方式具有相同的结果:

ffmpeg -i input.avi -r 29.97 output.mp4

ffmpeg -i input.avi -r 30000/1001 output.mp4

ffmpeg -i input.avi -r netsc output.mp4

码率

码率也叫比特率(Bit rate)(也叫数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频文件中中比特率用bps来表达。

码率

设置参数-b

ffmpeg -i 1.mp4 -b 1.5M 2.mp4

音频:-b:a     视频: – b:v

设置视频码率为1500kbps

ffmpeg -i input.avi -b:v 1500k output.mp4

文件大小

控制输出文件大小

-fs (file size首字母缩写)

ffmpeg -i input.avi -fs 1024K output.mp4

计算输出文件大小

(视频码率+音频码率) * 时长 /8 = 文件大小

Eclipse tomcat网站根目录修改

eclipse点击run as〉run on a server的时候会自动设置根目录位置然后配置conf/server.xml文件,手动修改server.xml文件,运行时还会被覆盖。修改方法

项目右键〉properties〉Web Project Settings〉Context root自定义路径,eclipse默认为项目名字

在server上右键browse deployment location浏览发布位置

左右臂血压不同

心脏在左侧,为什么右臂的血压比左臂高?

这是因为右肱动脉与左肱动脉的来源与压力不同所致:
右肱动脉来自主动脉的第一分支,即头臂干,为大的分支,其动脉压力大,所耗能量较小;
而左肱动脉来自主动脉的第三分支,即左锁骨下动脉,为较小的分支,所耗能量较多,压力也有所减小。所以右上肢血压值较左上肢血压值高约20mmHg。

所以,目前一般推荐测量血压选择右上肢为准。

腾讯云图