缩略图调查——抖音客户端/PC/iphone

Dreaming-in-Gottingen 2020-10-24 原文


缩略图调查——抖音客户端/PC/iphone

最近对抖音有点上瘾,经常看到这样的视频列表:

              

            由于抖音平台的限制,用户最多只能上传60s的视频,因此分段为3个视频。而在视频列表的缩略图模式下,三个视频的封面恰好组合成一张图像。这种方式比较符合审美标准。

接下来跟我一起探讨一下怎么实现,以及背后的原理。

1.验证平台

    使用三个平台进行测试视频缩略图展示视频——PC、iPhone、tiktok苹果客户端

2.如何将图片叠加到视频最前面

    视频拼接剪辑就不说了,那如何将图片叠加到视频序列前面呢?

    由于图片经常是jpeg编码,而视频呢通常是avc或hevc编码,因此绝不能生搬硬套数据进行cat!介绍两种方法进行操作:

    2.1 比较傻和粗糙的方式

            把图片和视频,都解码成yuv数据,然后yuv数据进行数据拼接cat,再编码,就形成了视频序列。

    2.2 比较简洁的方式

            来自于视频拼接的原理,把jpeg变成一个视频流,不就可以进行两段视频的拼接了嘛!

            如何做?使用万能工具ffmpeg!

            这里分两小步:step1.图片转为视频;step2.再与主视频拼接。

           step1:

                      ffmpeg.exe -i img.jpg -vcodec libx264 -s 720×1280 output_img.mp4

                      如上命令行中,-s指定了生成视频的分辨率,因为要与待拼接的真正主视频分辨率一致(其实不一致也是允许的)。

           step2:

                      ffmpeg.exe -f concat -i filelist.txt -c:v copy -an output_video.mp4

                      其中,filelist.txt指定了文件列表(内容格式网上去搜,一大堆资料),-c:v copy指视频拷贝,-an指不要音频。

    2.3 其他说明:

           1.图片生成的那个视频文件其实只有一帧数据,帧类型为关键帧(I帧)。

           2.两个视频concat后(其实就是数据的cat,并且需要符合mp4规范),会出现前两帧都是IDR关键帧,如下所示:

               

 

           3.在播放时,对于解码器来说,需要先后初始化两次再解码,因为其内部前两个I帧前都带了SPS/PPS数据,来解码不同编码参数的编码数据。

3.如上视频拼接了,预览时能展示封面图片了吗?——不一定!

    这里要说的是,因为每个平台(Win/iPhone/Android/tiktok)机制不太一样,预览展示的不一定是首帧画面!有些抽取首帧,而有些抽取最接近某个时刻的关键帧。

4.一些尝试,生成不同的视频文件

    test1. 图片仅编码一帧(I帧)行程视频,后面再跟主视频进行拼接

    test2. 图片编码25次(1s的视频),一帧I帧和后续共24帧的B帧和P帧,再与主视频拼接

    test3. 图片编码若干次,使达到5s,然后再与主视频拼接

    上面test1-test3利用图片生成视频方法类似,分别为:

 

        ffmpeg.exe -r 25 -loop 1 -i img.jpg -vcodec libx264 -s 720×1280 -frames 1 -r 25 img_1f.mp4
        ffmpeg.exe -r 25 -loop 1 -i img.jpg -vcodec libx264 -s 720×1280 -frames 25 -r 25 img_1s.mp4
        ffmpeg.exe -r 25 -loop 1 -i img.jpg -vcodec libx264 -s 720×1280 -frames 125 -r 25 img_5s.mp4

        其中,参数-r 25指以25fps读取输入文件img.jpg,-loop 1指循环利用输入文件,-frames指欲编码输出的总帧数,后面跟着的 -r 25指输出文件的帧率,最后为输出文件名(后缀名代表图片的数量或时长)。

    利用上面生成的视频,与主视频拼接,命令行为

        ffmpeg.exe -f concat -i filelist.txt -c:v copy -an output_xx.mp4

    最终生成的视频,利用工具进行分析,分别如下:

       

 

5.验证结果

 

    在三个平台上验证:PC(Win10),iPhone7, tiktok

 

    结果公示:

 

 

    1.图片编码为一个I帧,再跟主视频进行拼接
       PC——主视频的首帧
       iphone——图片
       tiktok——频闪(图片和主视频守帧)

    2.图片编码25次达到1s时间,再与主视频拼接
       PC——主视频的首帧
       iphone——图片
       tiktok——图片

    3.图片编码若干次,使达到5s时间,再与主视频拼接
       PC——图片
       iphone——图片
       tiktok——图片

6.测试中的一些发现

     1.苹果手机环境下,上传视频到tiktok,会重编码为h264,关键帧间隔时长为1s,并且编码帧带B帧,使用high profile档次。更关键的是,使用了苹果自身的硬件编码器和封装器。

        如何看出来呢?上传后,再下载下来。视频文件的MediaInfo信息:

        

 

     2.安卓机上传,使用了x264(core 148)转码。

         该条结论无直接证据,是间接得到的。因为随机下载了几个视频,编码参数(NAL unit type中的SEI数据)都是一致的。

         

 

      3.上传转码时,什么场景下使用h265编码,还不清楚。

 

发表于
2020-10-24 00:34 
OnlyTime_唯有时光 
阅读(0
评论(0
编辑 
收藏

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/13866988.html

缩略图调查——抖音客户端/PC/iphone的更多相关文章

  1. x264编码demo定制修改介绍

    x264编码demo定制修改介绍   x264编码器,提供了两个demo来验证编码功能:一个是大而全的x264 […]...

  2. jpeg编解码概述

    jpeg编解码概述 本博文为概览性介绍。后面有空了再分几篇博文分别介绍所用到的技术细节。 1.编解码目标   […]...

  3. H264裸码流I/P/B帧类型判别

    H264裸码流I/P/B帧类型判别   花了两天时间做了个h264裸流nal类型和frame类型检测的工具,已 […]...

  4. JPEG解码——(6)IDCT逆离散余弦变换

    JPEG解码——(6)IDCT逆离散余弦变换   本篇是该系列的第六篇,承接上篇IZigZag变换,介绍接下来 […]...

  5. JPEG解码——(4)霍夫曼解码

    JPEG解码——(4)霍夫曼解码 本篇是该系列的第四篇,主要介绍霍夫曼解码相关内容。 承接上篇,文件头解析完毕 […]...

  6. jm8.6编解码器概述

    jm8.6编解码器概述   自己在学习h264的路上,欢迎讨论交流。   前段时间研究JM出品的h264编码器 […]...

随机推荐

  1. React 系列教程2:编写兰顿蚂蚁演示程序

    简介 最早接触兰顿蚂蚁是在做参数化的时候,那时候只感觉好奇,以为是很复杂的东西。因无意中看到生命游戏的 Rea […]...

  2. 斯佩里左右脑分工理论

    斯佩里左右脑分工理论 偶然的机会看到一张图,模糊的记得当时上学的时候学习过类似的知识,具体的内容实在是记不起来 […]...

  3. Kaggle比赛(二)House Prices: Advanced Regression Techniques

    房价预测是我入门Kaggle的第二个比赛,参考学习了他人的一篇优秀教程:https://www.kaggle. […]...

  4. 专业品质的3月TOGAF认证线上公开课 – 周 金根

    专业品质的3月TOGAF认证线上公开课 IT帮出品课程,以专业赢得客户的认可。 01 讲师有话说 2020年0 […]...

  5. 安聊服务端Netty的应用

    安聊服务端Netty的应用 Posted on 2021-07-02 13:17  hcfalan  阅读(0 […]...

  6. RGB与16进制颜色转换的原理

    Integer有进制转换的方法。也可以自己写进制转换的方法。...

  7. 谈谈Python中元类Metaclass(二):ORM实践

    什么是ORM? ORM的英文全称是“Object Relational Mapping”,即对象-关系映射,从 […]...

  8. 配置jdk环境变量详解

    1、找到此电脑,不同电脑命名不同 2、选择高级系统设置 3、选择环境变量 4、编辑系统环境变量  5、新建CL […]...

展开目录

目录导航