【玩转腾讯云】教你如何用音视频工具FFmpeg充实自己的生活

目录

前言

正文

party 1

为女朋友吹的牛买单

party 2

抖音特效不够用,自己来加

party 3

让女朋友突破微信的限制

最后

前言

讲真!程序员也有自己的浪漫?。

正文

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

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

抖音特效不够用,自己来加

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

美丽女主动图

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

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

其一、因为是选择的拍同款,自己无法再编辑其他特效,内心比较郁闷,她本来想增加一个旋转的特效。

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

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

先解决第一个问题,视频的旋转效果,对于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年,大家一起加油!

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
【玩转腾讯云】教你如何用音视频工具FFmpeg充实自己的生活
经常听到女同学和女同事抱怨,说程序猿不懂得浪漫,时间久了,仿佛我们程序猿也慢慢接受了这样的标签。其实,只要我们有一个有想法的心,就能创造出属于我们程序猿的浪漫。...
<<上一篇
下一篇>>