MemoryError
大きなビデオファイルをYouTubeにアップロードしようとしているときに取得します。小さいファイルをアップロードする場合は問題ありませんが、ファイルが大きい場合はMemoryError
。コードがビデオファイルをRAMにロードしようとしているためだと思います。RAMにロードせずにビデオをアップロードする方法はありますか?
import os
from googleapiclient.http import MediaFileUpload
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
scopes = ["https://www.googleapis.com/auth/youtube.upload"]
def main():
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "0"
client_secret_file = 'client_credentials.json'
api_name = 'youtube'
api_version = 'v3'
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(client_secret_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(api_name, api_version, credentials=credentials)
request = youtube.videos().insert(
part='snippet,status',
body={
'snippet': {
'categoryId': "20",
'title': 'test title',
'tags': ['tag1', 'tag2']
},
'status': {
'privacyStatus': 'private'
}
},
media_body=MediaFileUpload(File Path)
)
response = request.execute()
print(response)
if __name__ == '__main__':
main()
MemoryError
例外の理由は次のとおりです。入力ビデオファイルは、リモートサービスに送信されるために処理される前に、完全にメモリにロードされます。
def createMethod(methodName, methodDesc, rootDesc, schema):
...
def method(self, **kwargs):
...
if media_filename:
...
if media_upload.resumable():
...
else:
# A non-resumable upload
if body is None:
...
else:
...
payload = media_upload.getbytes(0, media_upload.size())
...
動画を一度にアップロードするのではなく、定評のある公開Googleスクリプトを使用して再開可能なアップロードを使用することを強くお勧めしますupload_video.py
。(このスクリプトには公式ドキュメントもあります。スクリプトからわかりやすい使用法情報ページを取得するには、コマンドラインオプションを指定して発行するだけ--help
です。)
Python 3を使用している場合(コードが示唆している)、そのスクリプトはPython 2用に記述されているため、Python 3に変換する必要があります。これについては、私の1つの回答のパッチ適用upload_video.py
のセクションを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加