python - 将电影时长增加 n 倍
问题描述
我用我的手机录制了一部电影,我想将电影时长增加 n 倍。例如:如果电影的持续时间是 5 秒,那么输出的电影应该有 nx 5 秒的持续时间,它应该被重复。我的目标是制作一部 5 秒的电影并重复 n 次,持续 3 小时。我尝试使用moviepy,但它指出了与文件相关的错误。我正在尝试使用 moviepy,但我对 cv2 或任何其他想法持开放态度。这是我的代码和错误:
from moviepy.editor import *
videoclip = VideoFileClip('VID_20201207_022713542.mp4')
audio = afx.audio_loop(videoclip, nloops=3)
和错误:
runfile('C:/Users/felip/Google Drive/Musica/music1.py', wdir='C:/Users/felip/Google Drive/Musica') Traceback(最近一次通话最后):
文件“C:\Users\felip\Google Drive\Musica\music1.py”,第 11 行,音频 = afx.audio_loop(videoclip, nloops=3)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\fx\audio_loop.py”,第 28 行,在 audio_loop 返回 concatenate_audioclips(nloops*[audioclip])
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py”,第 319 行,在 concatenate_audioclips 结果 = CompositeAudioClip(newclips).set_duration(tt[-1])
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py”,第 287 行,在init self.nchannels = max([c.nchannels for c in self.clips])
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py”,第 287 行,在 self.nchannels = max([c.nchannels for c in self.clips])
AttributeError:“VideoFileClip”对象没有属性“nchannels”
编辑:我试过:
from moviepy.editor import *
clip = VideoFileClip('VID_20201207_022713542.mp4').fx(vfx.loop, n = 2)
clip.write_videofile("output.mp4")```
and received the error message:
runfile('C:/Users/felip/Google Drive/Musica/music1.py', wdir='C:/Users/felip/Google Drive/Musica') 块:0%| | 0/3044 [00:00<?, ?it/s, now=None]Moviepy - 构建视频输出.mp4。MoviePy - 在 outputTEMP_MPY_wvf_snd.mp3 块中写入音频:23%|██▎ | 714/3044 [00:02<00:26, 88.42it/s, now=None] Traceback(最近一次通话最后):
文件“C:\Users\felip\Google Drive\Musica\music1.py”,第 11 行,在 clip.write_videofile("output.mp4")
文件“”,第 2 行,在 write_videofile
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 54 行,在 requires_duration return f(clip, *a, **k)
文件“”,第 2 行,在 write_videofile
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 135 行,在 use_clip_fps_by_default 中返回 f(clip, *new_a, **new_kw)
文件“”,第 2 行,在 write_videofile
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 22 行,在 convert_masks_to_RGB 返回 f(clip, *a, **k)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\video\VideoClip.py”,第 298 行,在 write_videofile logger=logger 中)
文件“”,第 2 行,在 write_audiofile 中
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 54 行,在 requires_duration return f(clip, *a, **k)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py”,第 210 行,在 write_audiofile logger=logger 中)
ffmpeg_audiowrite 中的文件“”,第 2 行
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 54 行,在 requires_duration return f(clip, *a, **k)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\io\ffmpeg_audiowriter.py”,第 169 行,在 ffmpeg_audiowrite logger=logger):
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py”,第 86 行,在 iter_chunks fps=fps,buffersize=chunksize)
文件“”,第 2 行,在 to_soundarray
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 54 行,在 requires_duration return f(clip, *a, **k)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\AudioClip.py”,第 127 行,在 to_soundarray snd_array = self.get_frame(tt)
文件“”,第 2 行,在 get_frame
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 89 行,在包装器中返回 f(*new_a, **new_kw)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\Clip.py”,第 93 行,在 get_frame 返回 self.make_frame(t)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\Clip.py”,第 136 行,在 newclip = self.set_make_frame(lambda t: fun(self.get_frame, t))
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\Clip.py”,第 187 行,作为回报 self.fl(lambda gf, t: gf(t_func(t)), apply_to,
文件“”,第 2 行,在 get_frame
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\decorators.py”,第 89 行,在包装器中返回 f(*new_a, **new_kw)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\Clip.py”,第 93 行,在 get_frame 返回 self.make_frame(t)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\io\AudioFileClip.py”,第 77 行,self.make_frame = lambda t: self.reader.get_frame(t)
文件“C:\Users\felip\Anaconda3\lib\site-packages\moviepy\audio\io\readers.py”,第 172 行,在 get_frame 中“剪辑持续时间=%d 秒,”%self.duration)
OSError:文件 VID_20201207_022713542.mp4 中的错误,访问时间 t=34.51-34.56 秒,剪辑持续时间=34 秒,
块:25%|██▌ | 762/3044 [00:19<00:25, 88.42it/s, 现在=无]
解决方案
我在 C++ 中使用 openCV,所以我不能给你一个 python 或 moviepy 代码,但这里有一个你自己实现的想法。
步骤 1)读取目标视频并将每一帧保存到图像数组(Mat 类数组)中。
步骤 2)创建一个 VideoWriter 类来保存视频并在其中写入保存的帧 n 次。
我没有关于音频处理的经验,但我想同样的方法会起作用。
推荐阅读
- jquery - 负边距jquery
- c# - 如何从WPF中的Gridcontrol获取所有行值
- php - 在 Laravel 中重新排序项目
- javascript - Socket.io 版本 2.1.0 错误 404
- javascript - Vue.js2 应用程序在 IE 浏览器中没有响应
- javascript - 重定向后无法访问组件中的 this.props.location
- java - java在哪里寻找netbeans中的文件?是否可以更改目录?
- bots - Telegram BOT 跟踪谁添加了用户
- react-native - 如何将对讲聊天集成到 react-naive 移动应用程序?
- python - 如何使用数据框计算每小时的某些值