如何用Golang哄女友开心【珍藏版】|Go主题月

目录前端

前言程序员

正文微信

party 1markdown

为女友吹的牛买单app

party 2ide

抖音特效不够用,本身来加工具

party 3spa

让女友突破微信的限制code

最后orm

前言

讲真!程序员也有本身的浪漫🌹。

正文

​常常听到女同窗和女同事抱怨,说程序猿不懂得浪漫,时间久了,仿佛咱们程序猿也慢慢接受了这样的标签。其实,只要咱们有一个有想法的心,就能创造出属于咱们程序猿的浪漫。这种浪漫不必定要惊艳四座、不必定要轰轰烈烈,可是却实实在在,无微不至。那咱们程序猿能够为女友或者心仪的女生作些什么呢?以我本人的几个亲身小故事,来为你们抛砖引玉。不喜勿喷哈!

party 1

为女友吹的牛买单

有一次,女友和闺蜜吹牛,说本身最近常常锻炼身体,跳绳每分钟能够跳200下(刚听到时,我先是本能的一惊,紧接着想阻止,可是气场不够没hold住)。对于这种运动level,闺蜜确定不信,因而两人开始打赌,赌注是一顿大餐。(当时,感受这顿饭我方请定了)

跳绳运动你们都知道吧,就是下面这种:

她闺蜜要求用手机拍视频发给她(幸好不是直播,给了我做弊的空间)。既然已经说了要发送视频,那么就只能在手机视频上作手脚了。

首先,把手机里拍摄的视频拷贝出来放到电脑上,拿出咱们的音视频神器——FFmpeg。

接下来,咱们怎么作呢,那就是做弊——让视频加速。

具体须要怎么操做,请参考以下(Golang)代码?

func (e *Encoder) getVideoHandle(input, output string) (string, *exec.Cmd) {
    if input == "" || output == ""{
        return "parameters is wrong", nil
    }

    arg := []string{
        e.config.FFMPEG,
        "-v", "16",
        "-i", input,
        "-filter_complex", "'[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]'",
        "-map", "[v]",
        "-map", "[a]",
    }
    
    arg = append(arg, output)

    return strings.Join(arg, " "), exec.Command(arg[0], arg[1:]...)
}  
复制代码

再介绍上述这段代码的用途以前,我先给没有音视频经验的小伙伴科普一下。一般状况下,一段视频文件会包含视频和音频两部分媒体数据,从逻辑上划分,两者是分离的,只是在播放的时候进行了音视频同步逻辑的处理。其中,同步过程主要依赖时间参考时钟,这里就不展开了,知道这些就够用了。

上述程序的执行效果就是将视频和音频都加速了一倍,这样跳绳的成绩就能轻松达标了。

毕竟,也不能把速度调整的太过度,差很少每分钟200出头就好了。

可是预览的时候,我发现了视频有一个明显的破绽,那就是背景音——知了的叫声,也被加速了(当时是夏天),声音听起来很是的可疑。

因此,我须要实现视频画面加速可是音频不加速的效果,因而我修改了代码:

func (e *Encoder) getVideoHandle(input, output string) (string, *exec.Cmd) {
    if input == "" || output == ""{
        return "parameters is wrong", nil
    }

    arg := []string{
        e.config.FFMPEG,
        "-v", "16",
        "-i", input,
        "-filter_complex", "[0:v]setpts=0.5*PTS[v]",
        "-map", "[v]",
    }
    
    arg = append(arg, output)

    return strings.Join(arg, " "), exec.Command(arg[0], arg[1:]...)
}  
复制代码

运行程序,生成目标视频,搞定!由于女友自己跳的也很快,视频画面加速后,配上夏日的知了音,毫无破绽,窃喜。。。

女友看了成品后,一脸迷茫,好真实的啊,一阵狂笑。。。而后给了我一个大大的拥抱和香🔞。

最后,女友为监制,我为后期制做的大做就正式杀青了。

视频发给闺蜜后,闺蜜惊讶无比,一顿不走心的狂赞,并遗憾的表示下次见面的大餐她请了,并且心服口服。

party 2

抖音特效不够用,本身来加

早些时候抖音的拍同款功能,不支持后续再单独增长其余的特效(最近有段时间没有玩了,时间都用来撸文章了),不清楚如今是否支持了。

【上图是成品效果,女主在说:大粗脖子!!!】

这是上次带女朋去去澳门的时候,飞机上她自拍的一段特效视频。对于原视频,她有两点不满意的地方:

其1、由于是选择的拍同款,本身没法再编辑其余特效,心里比较郁闷,她原本想增长一个旋转的特效。

其2、自拍的时候,没有注意到飞机过道有些乱,想遮挡一下。

为了知足这两点要求,我决定写段程序搞定这两个问题。

先解决第一个问题,视频的旋转效果,对于FFmpeg而言,岂不是信手拈来。这段视频大概6秒钟,咱们这里先旋转一圈,固然也能够设置旋转两圈,甚至更多圈。

可是那样的话,画面变化就太快了,影响了观看效果。

好了,话很少说,走起,看代码:

func (e *Encoder) getVideoHandle(input, output string) (string, *exec.Cmd) {
    if input == "" || output == ""{
        return "parameters is wrong", nil
    }

    arg := []string{
        e.config.FFMPEG,
        "-v", "16",
        "-i", input,
        "-vf", "rotate=PI*2/5*t",
    }
    
    arg = append(arg, output)

    return strings.Join(arg, " "), exec.Command(arg[0], arg[1:]...)
}  
复制代码

搞定!效果如上图所示。

好了,接下来解决第二个问题——遮挡飞机过道。为了表示我正式而严谨的态度(然而,效果并不严谨),本人决定用本身CSDN的帐号头像做为贴图来遮挡一下过道,那么可爱的头像,谁不爱呢?

计算好位置,控制好贴图大小,走起,看代码:

func (e *Encoder) getVideoHandle(input, output string) (string, *exec.Cmd) {
    if input == "" || output == ""{
        return "parameters is wrong", nil
    }

    arg := []string{
        e.config.FFMPEG,
        "-v", "16",
        "-i", input,
        "-b:v", "600k",
        "-vf", "movie=touxiang.jpg[watermark];[in][watermark]overlay=5:190",
    }
    
    arg = append(arg, output)

    return strings.Join(arg, " "), exec.Command(arg[0], arg[1:]...)
}  
 
复制代码

party 3

让女友突破微信的限制

你们都知道一个限制,就是微信在发送文件的时候大小有100MB的上限。话说前端时间新出了一个电影,她想把这个电影发给本身的好友,说让我帮忙,看看有没有方法,由于对方就想用微信看。

因而,我想到了一个方法:这个电影总共900多兆,将这个电影裁剪成10个左右的子片断,再分别发送出去不就能够了吗。

那就开始行动,首先使用工具mediainfo查看了电影的视频码率和总时长,115分钟,那就按照20分钟一个片断裁剪吧。

代码走起:

func (e *Encoder) getVideoHandle(input, output string) (string, *exec.Cmd) {
    if input == "" || output == ""{
        return "parameters is wrong", nil
    }

    arg := []string{
        e.config.FFMPEG,
        "-v", "16",
        "-i", input,
        "-c", "copy",
        "-map", "0",
        "-segment_time", "00:20:00",
        "-f", "segment"
    }
    
    arg = append(arg, output)

    return strings.Join(arg, " "), exec.Command(arg[0], arg[1:]...)
}  
复制代码

让咱们看看效果:

不错,此次又圆满的完成了女友交给的任务。奖励仍是少不了的,嘿嘿。

最后

看了上面的几个小故事,是否是在必定程度上启发了你。你是否是也想用本身的如今掌握的技术来搞点东西?那就动起手来吧!由于本人从事音视频相关工做,对FFmpeg很是熟悉,因此用起它来就驾轻就熟。你们也能够依托本身的技术优点,巧妙的应用到本身的工做和生活中去。最后预祝没有女友的小伙伴早日牵手成功(炫技确定是少不了的,否则怎么吸引人家小姑娘),已经有女友或成家的小伙伴,生活幸福,健健康康。2021年,你们一块儿加油!

相关文章
相关标签/搜索