KeyError: 'video_fps' with moviepy ffmpeg
KeyError: 'video_fps' with moviepy ffmpeg
我正在编写 Python 脚本以将 Django 服务器上的视频 (.MP4) 转换为音频文件 (.MP3)。为此,我使用了 Moviepy 库,但是当我 运行 脚本时,出现以下错误:
Internal Server Error: /test/
Traceback (most recent call last):
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\shoe\musicsite\main\views.py", line 29, in test
video = VideoFileClip(os.path.join(basePath + ".mp4"))
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 88, in __init__
self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 34, in __init__
self.fps = infos['video_fps']
KeyError: 'video_fps'
[15/Nov/2019 23:49:43] "POST /test/ HTTP/1.1" 500 80909
我几乎找不到关于此错误或如何解决它的信息,因此非常感谢任何帮助或见解。
这是我的 Python 脚本 (views.py):
import pyodbc, json, pytube
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework import parsers
import os
from moviepy.editor import *
@csrf_exempt
def test(request):
if request.method == 'POST':
filePath = 'C:\Users\etsho\Music\'
#retrieve url from app
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
videoURL = body['url']
print("before download")
#download youtube video
youtube = pytube.YouTube(videoURL)
videoTitle = youtube.title
video = youtube.streams.filter(only_audio=True).first()
freshDownload = video.download(filePath)
print("after download")
basePath, extension = os.path.splitext(freshDownload)
video = VideoFileClip(os.path.join(basePath + ".mp4"))
video.audio.write_audiofile(os.path.join(basePath + ".mp3"))
print("video converted")
return HttpResponse("")
所以@furas 说到点子上了。最终成为问题的是该行的 only_audio=True
部分。视频仍在下载,文件仍然是 .MP4,但视频没有图片(根据 only_audio
),但对我来说,它只是一个黑色视频。实际发生的是视频没有实际帧,因此 video_fps
是错误名称。删除 only_audio=True
输入后,下载了一个普通视频,然后按预期进行了转换。
当视频不包含任何视觉内容时会出现错误,请确保您上传的视频不是空白的。
我正在编写 Python 脚本以将 Django 服务器上的视频 (.MP4) 转换为音频文件 (.MP3)。为此,我使用了 Moviepy 库,但是当我 运行 脚本时,出现以下错误:
Internal Server Error: /test/
Traceback (most recent call last):
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\django\views\decorators\csrf.py", line 54, in wrapped_view
return view_func(*args, **kwargs)
File "C:\shoe\musicsite\main\views.py", line 29, in test
video = VideoFileClip(os.path.join(basePath + ".mp4"))
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 88, in __init__
self.reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt,
File "C:\Users\etsho\AppData\Local\Programs\Python\Python38\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 34, in __init__
self.fps = infos['video_fps']
KeyError: 'video_fps'
[15/Nov/2019 23:49:43] "POST /test/ HTTP/1.1" 500 80909
我几乎找不到关于此错误或如何解决它的信息,因此非常感谢任何帮助或见解。
这是我的 Python 脚本 (views.py):
import pyodbc, json, pytube
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework import parsers
import os
from moviepy.editor import *
@csrf_exempt
def test(request):
if request.method == 'POST':
filePath = 'C:\Users\etsho\Music\'
#retrieve url from app
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
videoURL = body['url']
print("before download")
#download youtube video
youtube = pytube.YouTube(videoURL)
videoTitle = youtube.title
video = youtube.streams.filter(only_audio=True).first()
freshDownload = video.download(filePath)
print("after download")
basePath, extension = os.path.splitext(freshDownload)
video = VideoFileClip(os.path.join(basePath + ".mp4"))
video.audio.write_audiofile(os.path.join(basePath + ".mp3"))
print("video converted")
return HttpResponse("")
所以@furas 说到点子上了。最终成为问题的是该行的 only_audio=True
部分。视频仍在下载,文件仍然是 .MP4,但视频没有图片(根据 only_audio
),但对我来说,它只是一个黑色视频。实际发生的是视频没有实际帧,因此 video_fps
是错误名称。删除 only_audio=True
输入后,下载了一个普通视频,然后按预期进行了转换。
当视频不包含任何视觉内容时会出现错误,请确保您上传的视频不是空白的。