我的代码在下面。断路器文件:
from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
splits = [[1, 2], [5, 6], [7, 10]]
for i, split in enumerate(splits):
start, end = split
ffmpeg_extract_subclip("video.m4v", start, end, targetname="clips/{0}.mp4".format(i))
此断路器代码可以工作,并成功地将夹子断开为适当的长度。打开它们时,会出现以下错误:
连接的代码:
from moviepy.editor import *
clips = []
for i in range(1, 3):
clips.append(VideoFileClip("{0}.mp4".format(i)))
concat = concatenate_videoclips(clips)
concat.write_videofile("output.mp4")
这也是有效的,尽管在打开时我得到了上面第(4)点中写的错误。
额外信息:
pip uninstall moviepy
-这是拉斯维加斯单独查看这些文件的截图(我没有剪切它们,这只是我将它们直接粘贴到拉斯维加斯):
更新:我已尝试下载FFMPEG的exe文件,并直接调用它进行拆分(不使用Python下载版本//FFMPEG的moviepy链接),但问题仍然存在。我从这篇文章中得到了这个想法。
更新:我已经尝试了很多方法来排除将原始文件拆分为问题的可能性,但我开始相信这个问题在连接文件上得到了高度重视。将尝试查找此函数的旧版本。
更新:对于我更改的每个版本,一些令人反感的变化。在2.0.0
中,子剪辑的末尾被冻结,而没有音频播放。在1.0.0
中,剪辑故障的开始。在1.0.1-2
中,剪辑的末尾在进入新剪辑时出现故障。非常困惑。
更新:我只是不知道该从什么角度来处理这个问题。例如:我尝试了一个不同的视频,第一次运行时它是半可行的(扔到拉斯维加斯,四处移动以获得正确的时间,将其渲染为一个过得去的视频),但是一旦我做出改变(比如尝试在剪辑时增加一两秒钟),就好像一切都停止同步并放弃了。一旦我回到之前的正常剪辑(这是可行的),剪辑就完全不可预测,并且完全停止同步。我现在正在寻找的只是卸载和重新安装的东西,或者替代方案。
出现问题的原因是,您可能在指定的时间戳处没有关键帧。因为非关键帧对最近关键帧的差异进行编码,所以它们只显示与前一个关键帧的差异,这就是为什么它们非常高效,但不一致。类似的理论也适用于音频,这取决于C的编解码器/格式!
在核心moviPY也使用ffmpeg工具,这里是API参考的官方页面,以及引擎盖下的详细信息,https://zulko.github.io/moviepy/_modules/moviepy/video/io/ffmpeg_tools.html
使用mp4容器,可以在不使用编辑列表重新编码的情况下剪切非关键帧(关于编辑列表的问题)。换句话说,如果3s之前最接近的关键帧在0,那么它将复制从0开始的视频并使用编辑列表告诉播放器从0开始播放,而不是从3秒开始,而是从0开始播放,因为它最近的关键帧Rest帧被丢弃。这就是为什么有时音频播放和视频图像挂起,但时间线一直在运行的原因。
你所做的,它不会重新编码原始的东西!它只是在距离指定的开始/结束时间最近的关键帧处分割,并且它们的间距不相等,因此最终结果的长度不相等。
不要这样做:即使这是我找到的最快、最好的ffmpeg方式,我也认为你的方法就是这样做的:
ffmpeg -ss 00:01:00 -i input.mp4 -to 00:02:00 -c copy output.mp4
但下面的东西会剪切并重新编码:
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
重新编码时,您可能还希望包含其他编解码器选项,然后使用此::
ffmpeg -ss 00:03:00 -t 00:00:05 -i test.wmv -acodec libmp3lame -vcodec libx264 1.mp4
但是斯瓦米有什么区别?
我们没有使用-c copy参数。因此,不只是转储原始I/O流。但再次对其进行重新编码,需要更多的cpu工作!
此外,-t选项指定的是持续时间,而不是结束时间。上述命令(第二个代码段)将从3s开始对8s视频进行编码。要从3秒开始到8秒结束,请使用-t 5(第三个代码段)。
注意:如果您使用的是当前版本的ffmpeg(我猜是2015年以上),您也可以在上面的命令中将-t替换为-to以在指定时间结束。
我正在尝试使用连接两个剪辑,但输出视频中没有音频。我可以在视频连接时看到临时音频文件。 终端提供此输出, 我也尝试过这个答案,但它不能解决问题。你知道为什么会这样吗?
我正在使用以下代码调整mp4视频的大小(moviepy): 当我在电脑上播放时,调整大小的剪辑的音频可以工作,但在iPhone上不行。(原始剪辑的音频确实适用于我的iPhone。) 我怎样才能解决这个问题? 第一幅图像:已调整大小的视频的编解码器 第二幅图像:原始视频的编解码器
我正在尝试用Objective-C编写一个波阵面OBJ文件查看器,它能够从文件中加载网格/材质/着色器。我已经为着色器和着色器程序创建了类,我正在尝试创建一个OpenGL着色器程序对象,作为着色器程序类的init方法的一部分: 但是,调用glCreateProgram会导致EXC_BAD_访问,调用[SRShader compile]也会导致EXC_BAD_访问,而[SRShader compil
问题内容: 我需要减少Android应用程序中音频和视频文件的大小。我可以使用FFMPEG库吗,如果可以,请提供代码或一些教程链接的帮助。 或者,如果还有其他方法可以实现这一目标,请提出建议。 问题答案: 是的,您可以使用FFMPEG做到这一点。 快速的Google搜索: 在这里。
问题内容: 我觉得这是一个相当普遍的问题,但我尚未找到合适的答案。我有很多想在单词上打断的人类语音音频文件,可以通过查看波形中的停顿来试探性地完成,但是谁能指出我在python中自动执行此功能的函数/库吗? 问题答案: 一个简单的方法是使用pydub模块。最近添加的静默实用程序可以完成所有繁重的工作,如,。等等,并且与所提到的其他方法相比,大大简化了代码。 这是一个演示实现,从这里得到启发 设定:
我把很久以前在一次演讲中拍的一组电影连在一起。现在我要为每一个问题/答案剪掉它们。 我是这样做的。 ffmpeg-ss 00:00:34.7-t 00:10:44.6-y-i输入_movie.mp4-vcodec拷贝-acodec拷贝输出_1.mp4 ffmpeg-ss 00:11:22.2-y-i输入_movie.mp4-vcodec拷贝-acodec拷贝输出_2.mp4 然而,对于第二部分,我