两个视频和图片处理的小工具
最近遇到一个场景就是想把图片横向拼接起来,也就是多张图片合并成一张编程宽图片,又不行安装一个庞大的图像处理软件,最后使用了imagemagick
,这是一款极其强大的图片编辑程序,主要用于命令行操作图片,效率非常高,直接:
brew install imagemagick |
就可以安装
拼接图片
首先使用 cd 命令进入图片所在的目录,假如你有三张图片,分别为 img1.png, img2.png 以及 img3.png, 要输出名为 output.png 的图片,横着拼接,使用以下命令:
convert +append img1.png img2.png img3.png output.png |
如果要竖着拼接,把上面的命令中 + 改为 - 即可。
视频处理
视频处理就不用说了,ffmpeg顺手的很,假设我们要做视频裁剪:
fmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4 |
这个命令就是从00秒开始裁剪到00+30=30秒结束,总共30秒的视频。这个命令执行很快,因为只是原始数据的拷贝,中间没有什么编码和解码的过程。执行这个命令后你能得到output.mp4这个输出文件。你可以用视频播放软件播放这个视频看看。
可能有些视频裁剪后的效果,如期望一致,00秒开始,30秒结束,总共30秒的视频,但是有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从00秒开始,33秒结束。这是为什么呢?
因为这些视频里30秒处地方刚好不是关键帧,而ffmpeg会在你输入的时间点附近圆整到最接近的关键帧处,然后做接下来的事情。如果你不懂什么是关键帧,没关系,这也不影响你使用这个命令。
如果你的项目要求能够接受几秒的误差,那么这个命令完全就可以满足你的需要。
如果你的项目里要求很严格,一定要到确定的时间。那么就要用另外一种方式。
ffmpeg -i INPUT -sameq -intra OUTPUT |
如:
ffmpeg -i ./MyVideo.mpg -sameq -intra ./temp.mpg |
这个命令的结果文件就是./temp.mpg.这个文件的视频和./MyVideo.mpg是一样的,但是你会发现这个文件会比./MyVideo.mpg大很多倍,原因就是转换前一般采用的帧间编码,转换后变成了帧内编码。这里我们说是一般,原因是有些视频文件本身就采用了帧内编码。
经过这样的处理后,我们就可以精确的剪切视频了。
上面的命令在新版本中已经废弃,可以参考下面的命令:
ffmpeg -i output.mp4 -strict -2 -qscale 0 -intra keyoutput.mp4 |
合并视频
截取从头开始的30s:
ffmpeg -ss 00:00:00 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split.mp4 |
截取从30s开始的30s:
ffmpeg -ss 00:00:30 -t 00:00:30 -i keyoutput.mp4 -vcodec copy -acodec copy split1.mp4 |
进行视频的合并:
ffmpeg -f concat -i list.txt -c copy concat.mp4 |
在list.txt文件中,对要合并的视频片段进行了描述,内容如下:
file ./split.mp4 |
使用这一类工具操作,对程序员反而更友好些。
好词佳句:
“无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你。你抬头自卑,低头自得,唯有平视,才能看见真正的自己。”如果我们有能力走到人生边上,再看生活这场相逢,会看到它一边给我们巴掌,一边又会递上止疼药。无论如何,我相信,走过平湖烟雨,岁月山河,经历的劫数,尝遍的百味,会让我们更加生动,而干净。 |
扫码手机观看或分享: