FFmpeg读取、增加视频关键帧

  

     失踪人口回归! 

     最近在研究一个叫做视频关键帧的东西,我现在咸鱼得不行,懒得写那么多东西。

      再次强调,这篇博客是写给自己看的,就比较糙了。

      简单来说关键帧就是一种很关键的帧,哈哈哈我开玩笑的。严肃一点,目前市场主流的视频压缩算法叫做H264编码,这个编码把帧分成三种:

    Inter Frame(I帧)

    P-Frame(P帧)

    B-Frame(B帧)

    其中呢,I帧也叫关键帧,它有完整的图像,其他两种帧没有完整的图像,都要依靠于它生成完成的图像。

    所以一个视频的I帧越少,视频就越小。

    原理到此结束,下面介绍两个东西FFmpeg读取视频关键帧和增加视频关键帧。

    先看看如何输出一个视频的关键帧数量,首先要去下载一个叫做ffmpeg的工具。

  mac下命令行:

ffmpeg -i video_name.mp4 -vf select='eq(pict_type\,I)' -vsync 2 -s 750*1334 -f image2 core-%02d.jpeg

上面要注意视频路径、文件名、分辨率都要对上。

然后再看看如何添加一个视频的关键帧

mac下命令行:

ffmpeg -i "/path/mmp.mp4" -c:v libx264 -preset superfast -x264opts keyint=25 -acodec copy -f mp4 "/path/out.mp4"

 如果是windows,那么就在ffmpeg后面加上.exe

ffmpeg.exe -i "/path/mmp.mp4" -c:v libx264 -preset superfast -x264opts keyint=25 -acodec copy -f mp4 "/path/out.mp4"

 

      一些后话:

      为什么我会研究这个东西呢,因为最近调试了ios和安卓的工程(轮子当然不是我造的,我这么菜,就是简单地修修改改),该工程能实现的需求很简单,就是模仿一些小清新的app,把登录页背景从原来的静态图换成视频。

      但是发现后台回前台时,视频会卡顿,不能接着上一帧视频流畅地播放。为什么呢?问了一下大佬,大佬跟我说有个东西叫关键帧,自己去查吧。

     原来,用视频做登录页背景,然后后台回前台时,会自动定位到离刚刚离开时的帧最近的一个关键帧,所以视觉效果上会有卡顿的现象。

     同理,在你看b站时,手动拉拽进度条,不一定能定位到你定位的那一秒,可能也是因为那一秒没有关键帧,所以跑去离那一秒最近的一个关键帧了,yeah。

 

参考文献:

https://zhuanlan.zhihu.com/p/28369983

https://www.jianshu.com/p/f51b2febcfd2

https://maxwellqi.github.io/ios-h264-summ/

https://chuansongme.com/n/357427751042

https://blog.csdn.net/qq_32817785/article/details/87893334

 

   

你可能感兴趣的:(杂谈)