YouTube上传器
用于脚本化上传视频到YouTube。
- 从本地磁盘或网络上传视频文件
- 限制上传带宽
下载
获取适用于Linux、Mac或Windows的预编译二进制文件,或自行编译。
设置
YouTube API
与YouTube API通信需要OAuth2认证。因此,您必须:
- 在Google开发者控制台创建一个账户
- 为此应用创建一个新项目
- 启用YouTube API(API和服务 -> 启用API和服务 -> 点击右上角的"启用API和服务")。选择"YouTube Data API v3"
- 创建OAuth同意屏幕(API和服务 -> OAuth同意屏幕)
- 添加一个测试用户。可以是任何Google用户账户,但应与将上传视频的YouTube账户对应。
- 创建凭据(API和服务 -> 凭据 -> 点击"创建凭据"),选择"OAuth客户端ID",选择"Web应用程序"
- 添加一个"授权重定向URI"为"http://localhost:8080/oauth2callback"
- 下载客户端密钥JSON文件(点击新创建的客户端ID旁边的下载图标),并将其保存为
client_secrets.json
文件,放在与工具相同的目录中,例如:
{
"web": {
"client_id": "xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
"project_id": "youtubeuploader-yyyyy",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "xxxxxxxxxxxxxxxxxxxx",
"redirect_uris": [
"http://localhost:8080/oauth2callback"
]
}
}
注意1 Google将对上传到新创建项目的视频应用"私密"状态 - 来自Google的公告:
2020年7月28日之后创建的未验证API项目通过videos.insert端点上传的所有视频将被限制为私密观看模式。要解除此限制,每个项目必须通过审核以验证是否符合服务条款。
更多信息请参见问题#86。
注意2 默认情况下,由于Google设置的配额限制,每24小时您只能上传约6个视频。更多信息请参见问题#119。
使用方法
最简单的用法,只需指定一个文件名:
./youtubeuploader -filename blob.mp4
如果这是您第一次运行该工具,会弹出一个浏览器窗口,提示您提供YouTube凭据。令牌将被创建并存储在本地目录的request.token
文件中,供后续使用。要在无头服务器上运行该工具,请先在本地生成令牌文件,然后将令牌文件与youtubeuploader
和client_secrets.json
一起复制到远程主机。
完整选项列表:
-cache string
令牌缓存文件(默认为"request.token")
-caption string
字幕文件名。可以是URL
-categoryId string
视频分类ID
-chunksize int
每个上传块的大小(以字节为单位)。值为零将导致所有数据在单个请求中上传(默认为16777216)
-debug
开启详细日志输出
-description string
视频描述(默认为"uploaded by youtubeuploader")
-filename string
视频文件名。可以是URL。从标准输入读取使用'-'
-language string
视频语言(默认为"en")
-limitBetween string
仅在这些时间之间限制速率,例如 10:00-14:00(本地时区)
-metaJSON string
包含标题、描述、标签等的JSON文件(可选)
-metaJSONout string
写入已上传视频元数据的文件名(可选)
-notify
通知频道订阅者新视频。指定'-notify=false'以禁用。(默认为true)
-oAuthPort int
请求oAuth令牌时监听的TCP端口(默认为8080)
-privacy string
视频隐私状态(默认为"private")
-quiet
抑制进度指示器
-ratelimit int
以Kbps限制上传速率。默认无限制
-secrets string
客户端密钥配置(默认为"client_secrets.json")
-tags string
以逗号分隔的视频标签列表
-thumbnail string
缩略图文件名。可以是URL
-title string
视频标题
-version
显示版本
注意: 当将URL指定为文件名时,数据将通过本地主机流式传输(从远程主机下载,然后上传到YouTube)
如果指定了-quiet
,将不显示上传进度。可以通过向进程发送USR1
信号来输出当前进度,例如kill -USR1 <pid>
(仅适用于Linux/Unix)。
元数据
视频标题、描述等可以通过命令行标志或使用-metaJSON
标志通过JSON文件指定。示例JSON文件如下:
{
"title": "我的测试标题",
"description": "我的测试描述",
"tags": ["测试标签1", "测试标签2"],
"privacyStatus": "private",
"madeForKids": false,
"embeddable": true,
"license": "creativeCommon",
"publicStatsViewable": true,
"publishAt": "2017-06-01T12:05:00+02:00",
"categoryId": "10",
"recordingdate": "2017-05-21",
"playlistIds": ["xxxxxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyyyyy"],
"playlistTitles": ["我的测试播放列表"],
"language": "fr"
}
- 所有字段都是可选的
- 在描述中使用
\n
插入换行符 - 时间可以以两种格式之一提供:
yyyy-mm-dd
(UTC)或yyyy-mm-ddThh:mm:ss+zz:zz
- 通过命令行提供的任何值都将优先
发布
使用Goreleaser构建发布版本:
# 签名标签
git tag -s <标签>
git push --tags
GITHUB_TOKEN=xxxxyyy goreleaser release
致谢
感谢 github.com/tokland/youtube-upload 提供的更新播放列表的见解。