0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何将若干视频片段还原成原视频?

算法与数据结构 来源:labuladong 作者:labuladong 2021-05-13 11:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1024. 视频拼接(Medium)

前面发过 几个视频,也算是对视频剪辑入了个门。像我这种非专业剪辑玩家,不做什么宏大特效电影镜头,只是做个视频教程,其实也没啥难度,只需要把视频剪流畅,所以用到最多的功能就是切割功能,然后删除和拼接视频片接。

没有剪过视频的读者可能不知道,在常用的剪辑软件中视频被切割成若干片段之后,每个片段都可以还原成原始视频。

就比如一个 10 秒的视频,在中间切一刀剪成两个 5 秒的视频,这两个五秒的视频各自都可以还原成 10 秒的原视频。就好像蚯蚓,把自己切成 4 段就能搓麻,把自己切成 11 段就可以凑一个足球队。

剪视频时,每个视频片段都可以抽象成了一个个区间,时间就是区间的端点,这些区间有的相交,有的不相交……

假设剪辑软件不支持将视频片段还原成原视频,那么如果给我若干视频片段,我怎么将它们还原成原视频呢?

这是个很有意思的区间算法问题,也是力扣第 1024 题「视频拼接」,题目如下:

95c0b3b0-b322-11eb-bf61-12bb97331649.jpg

函数签名如下:

int videoStitching(int[][] clips, int T);

记得以前写过好几篇区间相关的问题:

区间问题合集 写过求区间交集、区间并集、区间覆盖这几个问题。

贪心算法做时间管理 写过利用贪心算法求不相交的区间。

算上本文的区间剪辑问题,经典的区间问题也就都讲完了。

思路分析

题目并不难理解,给定一个目标区间和若干小区间,如何通过裁剪和组合小区间拼凑出目标区间?最少需要几个小区间?

前文多次说过,区间问题肯定按照区间的起点或者终点进行排序。

因为排序之后更容易找到相邻区间之间的联系,如果是求最值的问题,可以使用贪心算法进行求解。

区间问题特别容易用贪心算法,公众号历史文章除了 贪心算法之区间调度,还有一篇 贪心算法玩跳跃游戏,其实这个跳跃游戏就相当于一个将起点排序的区间问题,你细品,你细品。

至于到底如何排序,这个就要因题而异了,我做这道题的思路是先按照起点升序排序,如果起点相同的话按照终点降序排序。

为什么这样排序呢,主要考虑到这道题的以下两个特点:

1、要用若干短视频凑出完成视频[0, T],至少得有一个短视频的起点是 0。

这个很好理解,如果没有一个短视频是从 0 开始的,那么区间[0, T]肯定是凑不出来的。

2、如果有几个短视频的起点都相同,那么一定应该选择那个最长(终点最大)的视频。

这一条就是贪心的策略,因为题目让我们计算最少需要的短视频个数,如果起点相同,那肯定是越长越好,不要白不要,多出来了大不了剪辑掉嘛。

基于以上两个特点,将clips按照起点升序排序,起点相同的按照终点降序排序,最后得到的区间顺序就像这样:

95f18404-b322-11eb-bf61-12bb97331649.jpg

这样我们就可以确定,如果clips[0]是的起点是 0,那么clips[0]这个视频一定会被选择。

96200e0a-b322-11eb-bf61-12bb97331649.jpg

当我们确定clips[0]一定会被选择之后,就可以选出第二个会被选择的视频:

96358988-b322-11eb-bf61-12bb97331649.jpg

我们会比较所有起点小于clips[0][1]的区间,根据贪心策略,它们中终点最大的那个区间就是第二个会被选中的视频。

然后可以通过第二个视频区间贪心选择出第三个视频,以此类推,直到覆盖区间[0, T],或者无法覆盖返回 -1。

以上就是这道题的解题思路,仔细想想,这题的核心和前文 贪心算法玩跳跃游戏 写的跳跃游戏是相同的,如果你能看出这两者的联系,就可以说理解贪心算法的奥义了。

代码实现

实现上述思路需要我们用两个变量curEnd和nextEnd来进行:

964f3c3e-b322-11eb-bf61-12bb97331649.gif

最终代码实现如下:

int videoStitching(int[][] clips, int T) {

if (T == 0) return 0;

// 按起点升序排列,起点相同的降序排列

Arrays.sort(clips, (a, b) -》 {

if (a[0] == b[0]) {

return b[1] - a[1];

}

return a[0] - b[0];

});

// 记录选择的短视频个数

int res = 0;

int curEnd = 0, nextEnd = 0;

int i = 0, n = clips.length;

while (i 《 n && clips[i][0] 《= curEnd) {

// 在第 res 个视频的区间内贪心选择下一个视频

while (i 《 n && clips[i][0] 《= curEnd) {

nextEnd = Math.max(nextEnd, clips[i][1]);

i++;

}

// 找到下一个视频,更新 curEnd

res++;

curEnd = nextEnd;

if (curEnd 》= T) {

// 已经可以拼出区间 [0, T]

return res;

}

}

// 无法连续拼出区间 [0, T]

return -1;

}

这段代码的时间复杂度是多少呢?虽然代码中有一个嵌套的 while 循环,但这个嵌套 while 循环的时间复杂度是O(N)。因为当i递增到n时循环就会结束,所以这段代码只会执行O(N)次。

但是别忘了我们对clips数组进行了一次排序,消耗了O(NlogN)的时间,所以本算法的总时间复杂度是O(NlogN)。

原文标题:剪视频剪出一个贪心算法…

文章出处:【微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 视频
    +关注

    关注

    6

    文章

    2018

    浏览量

    75256

原文标题:剪视频剪出一个贪心算法…

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADV7340/ADV7341多格式视频编码器:高清视频处理的理想之选

    高性能的多格式视频编码器,为电子工程师们提供了强大而灵活的解决方案。本文深入探讨这款编码器的特性、规格、应用以及设计要点,帮助工程师们更好地了解和应用该产品。 文件下载: EVAL-ADV7341EBZ.pdf 一、产品概述 ADV7340/ADV7341是一款采用64
    的头像 发表于 05-29 12:15 175次阅读

    海信RGB-Mini LED技术入驻2026世界杯视频裁判中心

    当地时间4月15日,国际足联与2026世界杯全球官方赞助商海信在瑞士苏黎世总部共同宣布,海信正式成为2026世界杯VAR(视频助理裁判)显示技术官方合作伙伴。海信RGB-Mini LED电视入驻
    的头像 发表于 04-20 14:41 490次阅读

    解析ADV7401:10位集多格式SDTV/HDTV视频解码器与RGB图形数字化器

    解析ADV7401:10位集多格式SDTV/HDTV视频解码器与RGB图形数字化器 在当今的视频处理领域,高质量、多功能的视频解码器和图形数字化器至关重要。ADV7401便是这样一款
    的头像 发表于 04-18 16:55 1033次阅读

    12位集多格式SDTV/HDTV视频解码器及RGB图形数字化器ADV7403技术解析

    12位集多格式SDTV/HDTV视频解码器及RGB图形数字化器ADV7403技术解析 在当今的视频处理领域,高质量、多功能的视频解码器和图形数字化器至关重要。ADV7403作为一款高
    的头像 发表于 04-18 16:55 1014次阅读

    10位SDTV视频解码器ADV7182A:多功能视频处理的理想之选

    和广泛的应用场景,在视频处理市场中占据重要地位。本文深入介绍ADV7182A的特点、应用、工作原理以及电源管理等方面的内容,为电子工程师在设计相关项目时提供有价值的参考。 文件下载
    的头像 发表于 04-18 15:35 654次阅读

    LMH1981多格式视频同步分离器:高性能视频应用的理想之选

    LMH1981多格式视频同步分离器:高性能视频应用的理想之选 在当今的视频技术领域,对于高质量同步分离的需求日益增长。德州仪器(TI)的LMH1981多格式视频同步分离器,以其卓越的性
    的头像 发表于 02-10 09:25 863次阅读

    MAXIM CMOS视频复用器/放大器:高性能视频应用的理想之选

    、MAX454和MAX455,为视频应用提供了出色的解决方案。本文详细介绍这些产品的特点、技术参数和应用场景,帮助电子工程师更好地了解和使用这些产品。 文件下载: MAX453.pdf 一、产品概述
    的头像 发表于 01-29 16:45 414次阅读

    高频视频应用利器:LT1205视频多路复用器解析

    高频视频应用利器:LT1203/LT1205视频多路复用器解析 在当今的电子设计领域,高频视频处理需求日益增长,一款性能卓越的视频多路复用器显得尤为重要。今天就带大家深入了解Linea
    的头像 发表于 01-29 15:00 357次阅读

    高速视频利器:LT6556视频多路复用器详解

    。 文件下载: LT6556.pdf 一、产品概述 LT6556 是一款高速的三通道 2:1 视频多路复用器,内部固定增益为 1。它的每个缓冲器针对 1k 负载进行了性能优化,2Vp-p 信号下 -3dB 带宽达到 450MHz,非常适合驱动高分辨率视频信号。每个放大器独
    的头像 发表于 01-24 16:30 939次阅读

    鲲云科技AI视频分析解决方案助力山西化工企业打破数据壁垒

    在化工行业,安全生产是一条不可逾越的红线。随着《山西省化工和危险化学品企业视频智能分析系统建设与应用指南》的正式发布,如何将“AI 视频分析”从理念切实转化为工厂一线可落地、可感知的安全守护能力,已成为山西众多化工企业亟需答好的
    的头像 发表于 01-19 09:11 860次阅读

    视频光端机的使用方法

    视频光端机使用指南 视频光端机,全称为视频光端传输终端,是安防监控、智能交通、广播电视等领域中不可或缺的设备。它的核心作用是摄像头的模拟或数字视频
    的头像 发表于 12-03 10:00 1759次阅读

    商品视频关联接口技术详解

    ​  在现代电商平台中,商品视频关联接口是核心组件之一,它允许系统视频内容(如产品演示、评测)与商品条目高效绑定。这不仅提升用户体验,还能驱动转化率。本文将从接口设计、实现逻辑到代码示例,逐步拆解
    的头像 发表于 10-13 15:44 578次阅读
    商品<b class='flag-5'>视频</b>关联接口技术详解

    N9H2x如何将视频转换为 AVI 文件?

    N9H2x如何将视频转换为 AVI 文件?
    发表于 09-01 08:05

    HarmonyOS应用视频投播解决方案

    系统投播功能让用户能够轻松手机上的音视频投放到其他设备(如PC/2in1设备、华为智慧屏)上继续播放,实现跨设备切换,带来流畅的观影体验。为简化开发流程,系统提供了标准化的音视频投播解决方案,开发者仅需配置资源信息、监听投播状
    的头像 发表于 07-23 16:43 1765次阅读
    HarmonyOS应用<b class='flag-5'>视频</b>投播解决方案

    技术分享 | 迅为RK3568开发板如何将 Linux 板卡虚拟U盘

    技术分享 | 迅为RK3568开发板如何将 Linux 板卡虚拟U盘
    的头像 发表于 06-04 10:57 1443次阅读
    技术分享 | 迅为RK3568开发板<b class='flag-5'>如何将</b> Linux 板卡虚拟<b class='flag-5'>成</b>U盘