为什么用moviepy截取视频/音频后,结果总时间没变

2024-04-01 06:08

本文主要是介绍为什么用moviepy截取视频/音频后,结果总时间没变,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天在用moviepy合成一段视频和语音,想要视频和语音同步,即视频结束语音也结束,语音结束视频也结束,很简单的一个短板优先的办法,代码如下:

    my_clip = mpe.VideoFileClip('./temp/test.avi')audio_background = mpe.AudioFileClip('./temp/test.wav')videoLength = my_clip.durationaudioLength = audio_background.durationprint "视频时长:" + str(videoLength)print "声音时长:" + str(audioLength)#以较短的为主if (videoLength > audioLength):my_clip = my_clip.subclip(0, audioLength)elif (audioLength > videoLength):audio_background = audio_background.subclip(0, videoLength)## print my_clip.duration# print audio_background.durationnew = my_clip.set_audio(audio_background)print "最终视频时长:" + str(new.duration)new.write_videofile('./temp/result.mp4', audio_codec="aac")

我的音频是2.2s,视频是3s的,并且代码输出的最终视频时长也为2.2s,但是写入result.mp4后,视频却是3s的!

分析:很奇怪的问题,于是去看write_videofile函数的代码,发现它有个参数,是fps,如果不填则默认使用原视频的fps,而我的原视频的fps为1,即一秒播放一帧,一共播放三秒;所以在经过‘短板优先’的那个条件剪切音视频时,虽然视频被剪切为2.2s长,但是我的视频只有3帧,软件不可能剪出0.2帧出来,于是取天花板,为3,所以输出的视频又是三秒了;

**结论:**截取视频时,实际上截取的是帧,比如视频时长为3s,截取2.2s,则实际截取的是:ceil(视频的fps * 2.2);

**解释:**按照上面结论,我的视频是3s,每秒一帧,截取2.2秒,最终时长为:ceil(1*2.2) / 1= 3s,于是我把视频进行了处理,一秒60帧,结果很完美,播放时长在2.2秒(公式:ceil(60 * 2.2) / 60= 2.2)

这篇关于为什么用moviepy截取视频/音频后,结果总时间没变的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/866400

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3

Python如何获取域名的SSL证书信息和到期时间

《Python如何获取域名的SSL证书信息和到期时间》在当今互联网时代,SSL证书的重要性不言而喻,它不仅为用户提供了安全的连接,还能提高网站的搜索引擎排名,那我们怎么才能通过Python获取域名的S... 目录了解SSL证书的基本概念使用python库来抓取SSL证书信息安装必要的库编写获取SSL证书信息

详解如何使用Python提取视频文件中的音频

《详解如何使用Python提取视频文件中的音频》在多媒体处理中,有时我们需要从视频文件中提取音频,本文为大家整理了几种使用Python编程语言提取视频文件中的音频的方法,大家可以根据需要进行选择... 目录引言代码部分方法扩展引言在多媒体处理中,有时我们需要从视频文件中提取音频,以便进一步处理或分析。本文

MySQL 日期时间格式化函数 DATE_FORMAT() 的使用示例详解

《MySQL日期时间格式化函数DATE_FORMAT()的使用示例详解》`DATE_FORMAT()`是MySQL中用于格式化日期时间的函数,本文详细介绍了其语法、格式化字符串的含义以及常见日期... 目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依