【思路】-博客-自动发布功能设计思路-只说思路具体实现靠自己

VTSBlog自动发布

wordpress有自动发布的功能,我的实现过程是

在Post的表中设计一个PublishTime的字段 例如“2016-06-16 08:56:00”表示这个Post在这个时间开始发布

那么在前台调用数据的时候只需要让发布时间和当前时间做比对进行筛选,小于等于当前时间的就是已发布的,大于当前时间的就是未发布的

本质:就是一个比较时间大小的问题

自动发布:就是表中PublishTime字段按照一定的时间间隔来排列,这样每天查询出的数据都是最新的数据,从而实现自定发布的功能.

如何为系统中的所有Post实现自动的时间间隔呢?间隔时间的生成

问题:我想每天自动发布5条数据
比如有100条数据,我们想办法为这100条数据生成一段连续的时间间隔,就可以不用管网站了,每天都是自定发布

输入:起始发布时间,每天发布多少条,要发布的PostID列表
输出:每个PostID对应的发布时间

最后:采用批量更新的方式更新你的数据表,整个过程就完成了
这是一道数学题

100条数据每天发布5条,发布其实时间从今天00:00:00开始计算 就需要20天才能发布完
也就是100条数据生成20个发布时间间隔,每5个为一组,从二十个时间间隔中取出一个,直到完全取完

注意考虑:没有除尽的情况 101条的话就要21个发布时间间隔了
好了这个数学题思路我都说完了,还可以进行很多的扩展。

比如:设置间隔发布时间
有人说间隔时间怎么弄啊Datetime 有一个加天 加小时的函数。

ffmpeg-错误-提取视频预览时 报错-h.264 – FFMPEG (libx264) height not divisible by 2

I sometimes get the following error:

[libx264 @ 0xa3b85a0] height not divisible by 2 (520×369)

归结原因就是 height 不是偶数

After playing around with this a bit, I think I’ve answered my own question. Here is the solution in case anyone else runs into a similar issue… I had to add the below argument to the command:

-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"

Command

ffmpeg -r 24 -i frame_%05d.jpg -vcodec libx264 -y -an video.mp4 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"

Basically, .h264 needs even dimensions so this filter will:

Divide the original height and width by 2
Round it down to the nearest pixel
Multiply it by 2 again, thus making it an even number

https://stackoverflow.com/questions/20847674/ffmpeg-libx264-height-not-divisible-by-2

http://www.itkeyword.com/doc/3596353026169028160/ffmpeg-libx264-height-not-divisible-by-2

ffmpeg-命令使用汇总-不断更新中

转mp4格式

ffmpeg -i input.mp4 output.avi
FFMPEG  -i  uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4
FFMPEG  -i  uploadfile/video/test.wmv -c:v libx264 -strict -2 -s 1280x720 -b 1000k uploadfile/mp4/test.mp4

截取一张图片

使用说明
测试视频
66666.MP4
2155秒

请问视频1秒播放几帧图像,使用ffmpeg反复在同一秒截取图片是否截取的是同一帧图像?
答案是:是同一张图片

【通过】截取一张图片
ffmpeg -ss 00:00:30 -i input.mp4 -f image2 -y 66666-1.jpg

参数说明

-i 设定输入流
-f 设定输出格式 【网上说一般不用,会更加后缀名自动识别,但是我还是每次都加上】
image2 表示输出jpg格式
-ss 开始时间【时间格式:允许毫秒】 从视频哪里开始处理
比如下面的格式都是有效的
‘55’
55 seconds

‘12:03:45’
12 hours, 03 minutes and 45 seconds

‘23.189’
23.189 seconds


-y 覆盖输出文件 同名 不需要询问直接覆盖
【备注】 建议把ss参数放在 -i参数之前使用

截取多张图片

ffmpeg -i input.mp4 -r 1 -q:v 2 -f image2 pic-%03d.jpeg

-r 表示每一秒几帧
-q:v 表示存储jpeg的图像质量,一般2是高质量
如此,ffmpeg会把input.mp4,每隔一秒,存一张图片下来.假设有60s,那会有60张 [如果视频特别长就会截取很多图片来,所以要设置一个时间段儿]

设置开始的时间,和你想要截取的时间,每秒1帧

ffmpeg -ss 00:00:30 -t 10 -i input.mp4  -r 1 -q:v 2 -f image2 -y pic-%03d.jpeg

-t 表示共要多少时间

ffmpeg会从input.mp4的第20s时间开始,往下10s,即20~30s这10秒钟之间,每隔1s就抓一帧,总共会抓10帧

其他
每秒2帧
ffmpeg -ss 00:00:30 -t 10 -i 66666.mp4 -r 2 -q:v 2 -f image2 -y pic-%03d.jpeg

每秒23帧 持续40秒 920张
ffmpeg -ss 00:00:30 -t 40 -i 66666.mp4 -r 23 -q:v 2 -f image2 -y pic-%03d.jpeg

每秒25帧 持续2秒 【默认25帧】
ffmpeg -ss 00:00:07 -t 2 -i 66666.mp4 -r 25 -q:v 2 -f image2 -y pic-%03d.jpeg

可以设置1.5吗
每秒24帧 持续1.5秒 36张图
ffmpeg -ss 00:00:07 -t 1.500 -i 66666.mp4 -r 24 -q:v 2 -f image2 -y pic-%03d.jpeg

最终:视频9秒 6个场景 每个场景1.5秒 持续截取1.5秒 开始在7.5秒左右 每秒24帧图像 一共36张图片

ffmpeg -ss 00:00:07.500 -t 1.500 -i input.mp4  -r 24 -q:v 2 -f image2 -y pic-%03d.jpeg

下面这个不清楚-r 0.2

假如影片第10分钟到第20分钟之间,每隔5秒截一张 共计120张
ffmpeg -ss 10:00 -t 10:00 -i 66666.mp4 -r 0.2 -q:v 2 -f image2 -y pic2-%03d.jpeg
ffmpeg -ss 10:00 -i input -f image2 -r 0.2 -t 10:00 %3d.jpg

设置输出帧大小 -s 480X270 300X168

ffmpeg -ss 00:00:07.500 -t 1.500 -i input.mp4  -r 24 -q:v 2 -f image2 -y -s 480X270 pic-%03d.jpeg

提取视频

ffmpeg -i "A_File.mp4" -ss 00:00:0.0 -t 10 -an "B_File.mp4"
-an 不处理音频

【通过】提取视频–默认方式
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an B_File.mp4

【通过】提取视频–指定尺寸
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -s 480X270 B_File.mp4

【通过】提取视频–缩放方式
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File.mp4

ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。【但是必须保证一定的比率】,否则就会向下面这样报错

【不通过】 height not divisible by 2 (300×169)
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=300:-1 B_File.mp4

【通过】
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=300:168 B_File.mp4

通过设置高度168 可以解决

提取视频【实际使用】

在实际使用中我使用下面的命令提取视频

ffmpeg -i 88888.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 cutout1.mp4 -y
ffmpeg -i 88888.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 -ss 00:01:30 -to 00:01:50 cutout1.mp4 -y
ffmpeg -ss 00:46:28 -i "Morning_News.asf" -acodec copy -vcodec copy -t 00:03:25 output.asf

这行命令解释为:从文件 Morning_News.asf 第 46:28 分秒开始,截取 03: 25 的时间,其中视频和音频解码不变,输出文件名为 output.asf

这样提取出来的视频和原始视频一样的编码

视频合并

首先提前截取各个场景

480
ffmpeg -ss 00:00:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File1.mp4
ffmpeg -ss 00:06:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File2.mp4
ffmpeg -ss 00:12:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File3.mp4
ffmpeg -ss 00:18:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File4.mp4
ffmpeg -ss 00:24:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File5.mp4
ffmpeg -ss 00:30:07.500 -t 1.500 -i 66666.mp4 -y -an -vf scale=480:-1 B_File6.mp4

合并视频

ffmpeg -f concat -i files.txt -c copy -y output.mp4

files.txt格式如下

file 'B_File1.mp4'
file 'B_File2.mp4'
file 'B_File3.mp4'
file 'B_File4.mp4'
file 'B_File5.mp4'
file 'B_File6.mp4'

再看一个例子

264秒
ffmpeg -ss 00:00:07.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File1.mp4
ffmpeg -ss 00:00:51.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File2.mp4
ffmpeg -ss 00:01:35.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File3.mp4
ffmpeg -ss 00:02:19.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File4.mp4
ffmpeg -ss 00:03:03.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File5.mp4
ffmpeg -ss 00:03:47.500 -t 1.500 -i 88888.mp4 -y -an -vf scale=480:-1 B_File6.mp4
ffmpeg -f concat -i files.txt -c copy -y output2.mp4

视频转码

一个视频的编码是MPEG4,想用H264编码,咋办?

ffmpeg -i c.mp4 -vcodec h264 c_output.mp4

相反也一样

ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。

(不知道什么是X265,可以 Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然 了,ffmpeg自己也有编码器)
ffmpeg -i input.mp4 -c:v libx265 output.mp4
ffmpeg -i input.mp4 -c:v libx264 output.mp4

ffmpeg-gif-图片合成Gif命令-秋名山

命令如下

C:\Users\Administrator\AppData\Local\Temp\ScreenToGif\Recording\
ffmpeg.exe -f image2 -i C:\Users\Administrator\AppData\Local\Temp\ScreenToGif\Recording\G1006\%d.png -vcodec libx264 -r 10 G1006.mp4

ffmpeg.exe -f image2 -i C:\Users\Administrator\AppData\Local\Temp\ScreenToGif\Recording\G1015\%d.png -vcodec libx264 -r 10 G1015.mp4

ffmpeg支持很多中视频格式,想知道ffmpeg支持哪些编码格式,可以用 ffmpeg -codecs 命令来查看

你的图片可以是jpg, 可以bmp,可以是tiff。其他的格式可以自己测试

假如你的图片在c:\temp\下面。那么通过下面的命令就可以将这个目录下面的图片转换成视频。这里面有个要求就是你的图片全部是自然数为文件名, 001, 002, 003这样的。前面要几个0取决于你的图片的个数,如109张,那么就是3-1=2个0,从001 到109,如果是1009张就是0001到1009

ffmpeg -f image2 -i c:\temp\d.jpg test.mp4

你可以指定编码格式:

ffmpeg -f image2 -i c:\temp\d.jpg -vcodec libx264 test.mp4

也许你还想指定输出帧率:

ffmpeg -f image2 -i c:\temp\d.jpg -vcodec libx264 -r 10  test.mp4

这样输出的test.mp4就是每秒播放10帧了

如果你要指定码率:

ffmpeg -f image2 -i c:\temp\d.jpg -vcodec libx264 -r 10 -b 200k  test.mp4

注意这里的200k的单位bit/s.

最后生成的文件的参数都是什么样子,比如我们刚才设置的参数,还有我们没有设置的参数:

那么这个命令就可以帮你搞定:

ffmpeg -i test.mp4

前面是你用的ffmpeg的基本信息:

包括版本,编译时间,用的编译器,配置选项。

重点看绿色部分,这也是你会关心的东西:

duration告诉视频时长,这里是10秒, bitrate是码率。

video: 视频编码格式。 帧率是10fps。

X小知识-Win10 如何查找当前文件夹被哪个进程占用

删除文件夹的时候经常出现文件夹被占用的情况,那么到底是被哪个进程占用呢?

总的来说就是资源监视器中查看关联的句柄

1、在win10系统桌面上,任务栏,右键,单击任务管理器。

2、单击性能。

3、单击打开资源监视器。

4、在单击CPU标签,然后再“关联的句柄”右侧的搜索框中输入要删除的文件夹名。例:tre文件夹名。

5、找到关于要删除的文件夹名目录。然后右键,结束进程。

X小知识-【Win7】-局域网远程桌面

开启三个服务

Windows Remote Management (WS-Management)
Remote Desktop Service
Remote Desktop Configuration

设置账户密码
一,在“我的电脑”上右键“属性”,找到“远程设置”,在“允许远程协助连接到这台计算机”上打钩。
 
二,然后在“远程桌面”的三个选项中选择“允许任意版本的运行远程桌面的计算机连接到这台机器(较不安全)”。
 
三,点击右下角“选择用户”,出来的对话框里面点击“添加”,然后“选择用户”,在“输入要选择的用户名”中输入你计算机上的一个用户名。然后点击“检查名称”就OK了。

四,关闭Windows防火墙

X小知识-【Win2003】-取消开机Ctrl+Alt+Delete的操作步骤

Win2003 取消开机Ctrl+Alt+Delete的操作步骤
单击“开始→运行”,输入gpedit.msc,打开组策略编辑器。
在左窗口中选择“计算机配置→管理模板→系统”,
在右边窗口双击“显示关闭事件跟踪程序”,在出现的对话框中选择“已禁用”,
然后点击“确定”保存后退出。
以后关机、重启就不再跳出烦人的询问对话框了。

X小知识-【Win2003】-修改administrator

win2003修改默认管理员Administrator用户名的方法  
租用美国服务器的同时,为了加强破解管理员密码的难度,
一般我们会修改默认的3389端口,
同时修改默认管理员账户名Administrator,
之前我们已经介绍过修改3389远程默认端口的方法,

现在介绍win2003修改默认管理员Administrator用户名的方法。

1、开始—运行—输入:gpedit.msc —回车  
2、依此点开,计算机配置 — Windows设置 —安全设置— 本地策略 — 安全选项
3、在右边的地方,拉到最下面,找到重命名管理员帐户,双击  
4、输入你要的用户名,确定,如图我们将管理员账户修改为“管理员”:

X小知识-portable

portable
表示是绿色版本的意思
此处有解释链接
https://www.faststone.org/FSIVDownload.htm
Note:

   exe
      A single executable file that installs the application in your computer. Recommended for most users.

   zip
      A zip (compressed) format of the exe file above. In some networks, downloading exe files is strictly prohibited. If you are using such networks, download the zip file instead. After the download, just unzip it to get the exe file (installer).

   portable
      A zip (compressed) file that includes all the required files to run the application independently from any folder you dump it in. Major advantage is that you can carry it around on a memory stick / USB flash drive, or copy / migrate from PC to PC via simple copying of files. No installation is necessary.