在Google Colab用Curl传视频至YouTube后遇处理失败问题求助
问题场景
将MP4视频上传至Google Colab磁盘存储,替换Google Console的access token后执行以下curl命令发起可恢复上传初始化请求:
!curl -X POST -i "https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus" \ -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json; charset=UTF-8" \ -d "{\"snippet\":{\"categoryId\":\"22\",\"description\":\"Description of uploaded video.\",\"title\":\"Test video upload.\"},\"status\":{\"privacyStatus\":\"private\"}}"
获取location URL后,替换视频路径执行以下PUT命令(请求返回成功):
!curl -X PUT -i 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus&upload_id=###' \ -F "media=@/path/to/video.mp4"
但YouTube频道始终出现「Processing abandoned: The video could not be processed」错误,测试不同大小的视频(包括3MB小文件)均存在该问题,排除视频大小因素。
排查与解决方法
检查视频编码合规性
YouTube对MP4容器的内部编码有严格要求,即使文件后缀是MP4,编码不符合标准也会导致处理失败:- 视频编码需为H.264(Main/High Profile,级别3.1及以上)或VP9
- 音频编码需为AAC-LC(采样率48kHz或更低)或Vorbis
用ffmpeg检查视频编码信息:
!ffmpeg -i /path/to/video.mp4若编码不符合,用ffmpeg转码修正:
!ffmpeg -i /path/to/video.mp4 -c:v libx264 -profile:v main -level 3.1 -c:a aac -b:a 128k /path/to/fixed_video.mp4修正PUT请求的Content-Type与传输方式
原PUT请求使用-F参数(以multipart/form-data格式传输)不符合YouTube可恢复上传的要求,会导致平台无法正确解析媒体内容。需改为指定正确的媒体类型并直接传递文件二进制数据:!curl -X PUT -i 'https://www.googleapis.com/upload/youtube/v3/videos?uploadType=resumable&part=snippet%2Cstatus&upload_id=###' \ -H "Content-Type: video/mp4" \ --data-binary "@/path/to/video.mp4"验证Access Token的权限范围
确保获取的Access Token包含https://www.googleapis.com/auth/youtube.upload权限,若需设置视频隐私状态等额外操作,需确认权限范围覆盖对应功能。可在Google Console的OAuth 2.0客户端设置中检查已申请的权限,重新生成token时勾选正确权限。检查视频文件完整性
确认Colab中的视频文件未损坏,可通过计算本地文件与Colab中文件的MD5值对比验证:# 本地终端计算MD5 md5sum local_video.mp4 # Colab中计算MD5 !md5sum /path/to/video.mp4若MD5值不一致,重新上传视频至Colab。
检查YouTube频道状态
尝试手动上传同一视频到频道,若手动上传也失败,可能是频道存在违规限制或视频内容不符合平台规范,需检查频道状态或调整视频内容。
内容的提问来源于stack exchange,提问作者mitisani lisinani

