我被一个问题困住了。我有一个 Python 脚本,我想在我的 OSX 上运行它,但似乎我遇到了很多问题。
要运行脚本,我应该同时安装 Python 和 Moviepy。
要安装 Moviepy,我使用了以下命令:
sudo pip install moviepy
Run Code Online (Sandbox Code Playgroud)
回应是:
sudo: pip: command not found
Run Code Online (Sandbox Code Playgroud)
所以我尝试使用以下命令安装 pip:
sudo easy_install pip
Run Code Online (Sandbox Code Playgroud)
并得到了这个答案:
Searching for pip
Best match: pip 9.0.1
Processing pip-9.0.1-py2.7.egg
pip 9.0.1 is already the active version in easy-install.pth
Using /Library/Python/2.7/site-packages/pip-9.0.1-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip
Run Code Online (Sandbox Code Playgroud)
我试图再次运行
sudo pip install moviepy
Run Code Online (Sandbox Code Playgroud)
但我还是遇到了那个问题。我该做什么?
更新:
在 OSX 上不确定,但你能试试 pip3 – Rehan Azher 23 分钟前
sudo pip3 install moviepy
Password:
sudo: pip3: command …Run Code Online (Sandbox Code Playgroud) 我写了以下代码:
from moviepy.editor import *
from PIL import Image
clip= VideoFileClip("video.mp4")
video= CompositeVideoClip([clip])
video.write_videofile("video_new.mp4",fps=clip.fps)
Run Code Online (Sandbox Code Playgroud)
然后为了检查帧是否已更改以及如果更改,哪个函数更改了它们,我检索了“clip”、“video”和“video_new.mp4”的第一帧并比较了它们:
clip1= VideoFileClip("video_new.mp4")
img1= clip.get_frame(0)
img2= video.get_frame(0)
img3= clip1.get_frame(0)
a=img1[0,0,0]
b=img2[0,0,0]
c=img3[0,0,0]
Run Code Online (Sandbox Code Playgroud)
我发现 a=24,b=24,但 c=26....事实上,在运行数组比较循环时,我发现“img1”和“img2”相同,但“img3”不同。我怀疑函数 video.write_videofile 负责数组的更改。但我不知道为什么......任何人都可以向我解释这一点,并建议一种在不改变帧的情况下编写剪辑的方法吗?
'VideoFileClip'PS:我阅读了,的文档'FFMPEG_VideoWriter','FFMPEG_VideoReader'但找不到任何有用的东西...我需要在编写我正在处理的代码之前阅读确切的框架。请给我建议一个方法。
我正在玩 moviepy,目的是创建视频以嵌入网页中。但是,我无法让我创建的视频在 chrome 和 firefox 中实际播放(它可以在 safari :/ 中播放)。\nFirefox 声称“文件已损坏”。
\n\n我发现我很可能没有正确安装某些东西。我关注了(除其他外,因为我还没有被授权发布足够的链接来充分描述我的情况,#thanksStackOverflow ;P)http://wiki.webmproject.org/ffmpeg/building-with-libvpx,但根据[如果允许的话我会分享的链接:P]这些东西都是“在MoviePy \ xe2 \ x80 \ x99s安装期间自动安装的”,所以我不确定我是如何把它搞砸的。
\n\n查看示例代码(我已经用“python”、“python3”和“python3.5”尝试过):
\n\nfrom moviepy.editor import *\n\nfilepath = "../read_videos/MOVI0011.avi"\nfile = VideoFileClip(filepath)\n\nclips = []\nclips.append(file.subclip(10, 12))\nclips.append(file.subclip(20, 22))\nclips.append(file.subclip(30, 32))\nclips.append(file.subclip(40, 42))\n\nconcatenated_clip = concatenate_videoclips(clips)\n\nconcatenated_clip.write_videofile("../write_videos/clip.mp4", fps=24, codec=\'mpeg4\')\nRun Code Online (Sandbox Code Playgroud)\n\n\n\nOSX El Capitan (10.11.3)
\n你如何在Pygame中播放mp4视频?
我试过pygame.movie但这不起作用......
Theres也是moviepy,但我无法更改弹出窗口的标题.它说"MoviePy",不知道如何改变它.
import moviepy
from moviepy.editor import *
import os
os.environ["SDL_VIDEO_CENTERED"] = "1"
clip = VideoFileClip('qq.mp4')
clip.preview()
execfile("qq.py") # Execute my game right after the clip shows
Run Code Online (Sandbox Code Playgroud)
如何将标题从"MoviePy"更改为"我的游戏名称"
任何帮助,将不胜感激!
我曾经尝试运行代码如下图所示。第一次一切正常时,它只有一个进度条。但是当我再次运行它(制作视频)时,进度条会变得疯狂如下,它每秒为单个任务生成许多进度条!我怎样才能让它只生成单个进度条。谢谢!
我正在尝试编写一个 python 函数,使用 moviepy 将一个视频中的视频添加到另一个视频(没有声音)。首先,我尝试了
clip = mpe.VideoFileClip(video-to-add-sound.mp4)
clip = clip.set_audio(mpe.AudioFileClip(video-that-has-sound.mp4))
Run Code Online (Sandbox Code Playgroud)
这没有任何作用。所以,我意识到我没有 write_videofile 来剪辑所以,我创建了一个函数
def addAudioBack(original_vid, processed_vid):
clip = mpe.VideoFileClip(processed_vid)
clip = clip.set_audio(mpe.AudioFileClip(original_vid))
clip.write_videofile(processed_vid,codec='libx264')
Run Code Online (Sandbox Code Playgroud)
它将把original_vid 中的音频添加到processed_vid 中,并将旧的processed_vid 覆盖到具有orignal_vid 中音频的新音频。声音效果很好,但问题是我的视频比特率和数据率正在下降,这使得视频质量看起来更差。我尝试添加bitrate='3000k'到最后一行,但它不起作用。原版的速度约为3000kbps,但编辑后的速度降至约300kbps或以下。
附言。我编辑了最后一行,以免覆盖旧文件并写入新文件。比特率提高到大约 900kbps,但我想要的是与我的旧视频具有相似比特率的视频(将添加声音)
那么,我如何根据上述目的编写视频,使其与原始视频具有相同或几乎相同的比特率?
谢谢
我使用 PyAV 库,因为它是 Python 可用的最快库之一。
这是我想使用的一个简单的代码示例:
import av
video = av.open("My_Super_Video.mp4")
total_frames = # ????
for i, frame in enumerate(video.decode(video=0)):
img = frame.to_image() # PIL image
print("Frame: %d/%d ..." % (i, total_frames))
Run Code Online (Sandbox Code Playgroud)
显然我可以使用其他库来加载该库,但是如果可能的话,我更喜欢使用 PyAV,因为它的处理速度很快。
问题1:用PyAV可以获取帧数吗?如果是,怎么办?
问题2:在这种情况下,我会考虑使用另一个库来逐帧加载和处理视频。哪个库可以让我以尽可能最高的速度完成上述操作。我知道以下内容,但不知道它们如何比较:
知道如何将 S3 mp4 文件直接读取到 moviepy 中吗?
我努力了,
import boto3
from io import BytesIO
from moviepy.editor import *
client = boto3.client('s3')
obj = client.get_object(Bucket='some-bucket', Key='some-file')
VideoFileClip(BytesIO(obj['Body'].read()))
Run Code Online (Sandbox Code Playgroud)
但我越来越,
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/<path>/lib/python3.6/site-packages/moviepy/video/io/VideoFileClip.py", line 91, in __init__
fps_source=fps_source)
File "/<path>/lib/python3.6/site-packages/moviepy/video/io/ffmpeg_reader.py", line 33, in __init__
fps_source)
File "/<path>/lib/python3.6/site-packages/moviepy/video/io/ffmpeg_reader.py", line 243, in ffmpeg_parse_infos
is_GIF = filename.endswith('.gif')
AttributeError: '_io.BytesIO' object has no attribute 'endswith'
Run Code Online (Sandbox Code Playgroud)
其中路径是我的虚拟环境
我正在尝试使用moviepy调整视频大小。它在本地运行时完全正常,但在 AWS BeanStalk 上,渲染的视频中没有音频。
clip_resized = clip.resize(height=video_max_height)
clip_resized.write_videofile(RESIZED_VIDEO_NAME, temp_audiofile="temp-audio.m4a",
remove_temp=True,
codec="libx264",
audio_codec="aac", fps=30,
logger=None, threads=4)
Run Code Online (Sandbox Code Playgroud)
我正在使用此链接在 AWS 上安装 ffmpeg
heroku的类似问题
在某些情况下,我们需要向视频添加字幕。就我而言,我正在处理与视频描述(字幕)相关的问题。此 python 代码有助于向视频添加字幕。我想知道是否有人需要解决方案,请随意来试验代码。
import moviepy.editor as mp
my_video = mp.VideoFileClip("video.mp4") #video path
w,h = moviesize = my_video.size
my_text = mp.TextClip("A man and a women are sitting on a bench", font="Amiri-regular", color="white", fontsize=34)
txt_col = my_text.on_color(size=(my_video.w + my_text.w, my_text.h+5), color=(0,0,0), pos=(6,"center"), col_opacity=0.6)
txt_mov = txt_col.set_pos( lambda t: (max(w/30,int(w-0.5*w*t)),max(5*h/6,int(100*t))) )
final = mp.CompositeVideoClip([my_video,txt_mov])
final.subclip(0,17).write_videofile("final.mp4",fps=24,codec="libx264")
Run Code Online (Sandbox Code Playgroud)
这对于单个标题很有效。您可以使用参数进行更改
"""Multiple Text in single video"""
import moviepy.editor as mp
my_video = mp.VideoFileClip("/home/user/cap/video.mp4").subclip(0,10)
print(my_video.duration)
w,h = moviesize = my_video.size
texts = []
with open("/home/user/cap/caption.txt") as file:
for line …Run Code Online (Sandbox Code Playgroud)