我有一个约8000帧的视频(.mp4).我有一个csv告诉我在视频中需要抓住每一帧的时间,以及要抓取的帧数.
number_of_frames in video = 8000
times是一个数组[0.004, 0.005, ... 732s]
,最后一次给出的数据是732s.因此FPS = 8000 / 732 = ~10
我希望能够在特定时间从视频中提取图像帧.然后将这些图像路径写入.csv文件.
我尝试了多种方法:第一种方法(openCV):
with open('./data/driving.csv', 'w') as csvfile:
fieldnames = ['image_path', 'time', 'speed']
writer = csv.DictWriter(csvfile, fieldnames = fieldnames)
writer.writeheader()
vidcap = cv2.VideoCapture('./data/drive.mp4')
for idx, item in enumerate(ground_truth):
# set video capture to specific time frame
# multiply time by 1000 to convert to milliseconds
vidcap.set(cv2.CAP_PROP_POS_MSEC, item[0] * 1000)
# read in the image
success, image = vidcap.read()
if success:
image_path = …
Run Code Online (Sandbox Code Playgroud) 我正在使用python
导入moviepy
库创建一个程序,但收到以下错误:
from moviepy.editor import VideoFileClip
white_output = 'videos/testVideo.mp4'
clip1 = VideoFileClip("videos/testVideo.mp4")
OSError Traceback (most recent call last)
<ipython-input-40-f49638833528> in <module>()
1 white_output = 'videos/testVideo.mp4'
----> 2 clip1 = VideoFileClip("videos/testVideo.mp4")
3 white_clip = clip1.fl_image(process_image) #NOTE: this function expects color images!!
4 get_ipython().magic('time white_clip.write_videofile(white_output, audio=False)')
C:\Users\hp pc\Anaconda3\envs\lib\site-packages\moviepy\video\io\VideoFileClip.py in __init__(self, filename, has_mask, audio, audio_buffersize, audio_fps, audio_nbytes, verbose)
53 # Make a reader
54 pix_fmt= "rgba" if has_mask else "rgb24"
---> 55 reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt)
56 self.reader = reader …
Run Code Online (Sandbox Code Playgroud) 有没有一种方法可以成功地将任何剪辑拼接在一起,以防止出现奇怪的故障?我把.mp4
较小的.mp4
文件放在一起,最后得到了一个带有奇怪故障的视频。我通过 Sublime Text 3 在 Windows 10 上运行 Python 3.6.1。我使用 MoviePy 进行连接。
编码:
from moviepy.editor import VideoFileClip, concatenate_videoclips
import os.path
path = "C:/Users/blah/videos/out/"
cliparray = []
for filename in os.listdir(path):
cliparray.append(VideoFileClip(path + filename))
final_clip = concatenate_videoclips(cliparray)
final_clip.write_videofile(path + "concatenatedvideo.mp4", codec = "libx264")
Run Code Online (Sandbox Code Playgroud)
奇怪的故障:
我想在python的视频文件(.mp4)中添加背景音乐。
我浏览了网络,并使用moviepy for python做了一些技巧,但是我没有找到一种将背景音乐添加到已经包含音乐的视频文件中的单一方法。任何想法如何做到这一点?
编辑以下Anil_M的评论: 谢谢,不,我没有看过这个特定的线程,尽管我了解ffmpeg,但看起来又像是一种将没有音频的视频与音轨合并的方法。
因此,现在我将尝试从视频中提取音频,与另一个音频文件合并,然后与视频合并。也许这不是最好的方法,但至少可以解决有关合并2条音轨的问题。
所以我想做的是将使用 pytube 下载 YouTube 视频获得的 mp4 文件转换为使用 moviepy 的 mp3 文件。但是,这些 mp4 文件不包含KeyError: 'video_fps'
在 ffmpeg_reader 中引发的任何帧。
是否可以使用 moviepy 来做到这一点,还是我需要使用不同的工具?我想我也可以只下载带有视频的 mp4 文件,但这会浪费资源,尤其是对于大型播放列表。
这是我使用的代码:
from moviepy.video.io.VideoFileClip import VideoFileClip
import pytube
def downloadPlaylist(url):
playlist = pytube.Playlist(url)
for video in playlist.videos:
filename = video.streams.get_audio_only().download()
clip = VideoFileClip(filename)
clip.audio.write_audiofile(filename[:-4] + ".mp3")
clip.close()
Run Code Online (Sandbox Code Playgroud) 我正在尝试从视频中提取音频pytube
,然后将其转换为wav
格式。为了从视频中提取音频,我尝试使用moviepy
,但我找不到使用以下命令从字节打开视频文件的方法VideoFileClip
。我不想继续保存文件然后阅读它们。
我的尝试:
from pytube import YouTube
import moviepy.editor as mp
yt_video = BytesIO()
yt_audio = BytesIO()
yt = YouTube(text)
videoStream = yt.streams.get_highest_resolution()
videoStream.stream_to_buffer(yt_video) # save video to buffer
my_clip = mp.VideoFileClip(yt_video) # processing video
my_clip.audio.write_audiofile(yt_audio) # extracting audio from video
Run Code Online (Sandbox Code Playgroud) 我第一次使用 moviepy 库。我有一个大约 7 小时长的视频片段,我想将其剪辑成小片段。我有一个开始和结束时间的列表。
video = VideoFileClip("videoFile.mp4")
clips = []
for cut in cuts:
clip = video.subclip(cut[0], cut[1])
clips.append(clip)
clips
clip = video.subclip("7:32:18", "7:38:38")
clips.append(clip)
for clip, title in zip(clips, title_list):
clip.write_videofile(title + '.mp4', threads=8, fps=24, audio=True, codec='libx264',preset=compression)
video.close()
Run Code Online (Sandbox Code Playgroud)
Clips[] 包含剪辑的开始和结束时间。我也有一个从 YouTube 上抓取的标题列表。我没有在这里列出这两个列表,但一个小例子可能是:
cuts = [('0:00', '2:26'),
('2:26', '5:00'),
('5:00', '7:15'),
('7:15', '10:57'),
('10:57', '18:00'),
('18:00', '18:22'),
('18:22', '19:57'),
('19:57', '20:37'),
('20:37', '28:27'),
('28:27', '40:32'),
('40:32', '49:57'),...
title_list = ['Introduction (What is Todoist?), tech stack talk', 'Showing the final …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 MoviePy 从大量图像制作视频。该方法适用于少量图像,但对于大量图像,该过程被终止。添加了大约 500 个图像后,Python 进程使用了大约一半的可用易失性内存。还有更多的图像。
我应该如何解决这个问题?我希望处理完成,我不介意处理时间是否长一点,但如果我能以某种方式限制内存和 CPU 使用情况会很好。使用当前方法,机器在处理时几乎无法使用。
代码如下:
import os
import time
from moviepy.editor import *
def ls_files(
path = "."
):
return([fileName for fileName in os.listdir(path) if os.path.isfile(
os.path.join(path, fileName)
)])
def main():
listOfFiles = ls_files()
listOfTileImageFiles = [fileName for fileName in listOfFiles \
if "_tile.png" in fileName
]
numberOfTiledImages = len(listOfTileImageFiles)
# Create a video clip for each image.
print("create video")
videoClips = []
imageDurations = []
for imageNumber in range(0, numberOfTiledImages):
imageFileName = str(imageNumber) + …
Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 14.04 系统上通过 Django 应用程序使用 Moviepy。当它尝试写入视频文件时,它给我权限错误。以下是错误的详细信息:
MoviePy 错误:FFMPEG 在写入文件 test1TEMP_MPY_wvf_snd.mp3 时遇到以下错误:
test1TEMP_MPY_wvf_snd.mp3:权限被拒绝
它似乎对尝试写入临时文件的目录没有正确的权限。
我已在 /tmp 目录中设置了 777,但没有成功。请帮我解决这个问题。
谢谢
当我在 Moviepy 中连接视频时,输出文件中没有声音,我尝试使用各种参数但没有任何线索。
这是我的代码:
import moviepy.editor as mp
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
clip1 = mp.VideoFileClip("V1.mp4")
clip2 = mp.VideoFileClip(dir_path+"\\V2.mp4")
clip3 = mp.VideoFileClip(dir_path+"\\V3.mp4")
output_movie = 'new_movie1.mp4'
final_clip = mp.concatenate_videoclips([clip1,clip2,clip3])
final_clip.write_videofile(output_movie, remove_temp=False, bitrate="5000k",audio=True, audio_codec="aac",codec='mpeg4')
Run Code Online (Sandbox Code Playgroud)
我试过 codec="libx264"