项目作者: porjo

项目描述 :
Scripted uploads to Youtube
高级语言: Go
项目地址: git://github.com/porjo/youtubeuploader.git
创建时间: 2015-05-21T09:59:26Z
项目社区:https://github.com/porjo/youtubeuploader

开源协议:Apache License 2.0

下载


Youtube Uploader

Tests

Scripted uploads to youtube.

  • upload video files from local disk or from the web.
  • ratelimit upload bandwidth

Download

Grab a precompiled binary for Linux, Mac or Windows or build it yourself.

Setup

Youtube API

Talking to the Youtube API requires oauth2 authentication. As such, you must:

  1. Create an account on the Google Developers Console
  2. Create a new project for this app
  3. Enable the Youtube API (APIs & Services -> Enable APIs and Services -> Click ‘ENABLE APIS AND SERVICES’ top right). Select ‘YouTube Data API v3’
  4. Create OAuth consent screen (APIs & Services -> OAuth Consent Screen)
    • Add a test user in “Audience -> Test users”. This can be any Google User account but it should correspond with the Youtube account where videos will be uploaded.
  5. Create Credentials (APIs & Services -> Credentials -> click ‘CREATE CREDENTIALS’), select ‘OAuth client ID’, select ‘Web application’
  6. Download the client secrets JSON file (click download icon next to newly created client ID) and save it as file client_secrets.json in the same directory as the utility e.g.
  1. {
  2. "web": {
  3. "client_id": "xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
  4. "project_id": "youtubeuploader-yyyyy",
  5. "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  6. "token_uri": "https://oauth2.googleapis.com/token",
  7. "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  8. "client_secret": "xxxxxxxxxxxxxxxxxxxx",
  9. "redirect_uris": [
  10. "http://localhost:8080/oauth2callback"
  11. ]
  12. }
  13. }

NOTE 1 Google will apply ‘private’ status on videos uploaded to newly created projects - from Google’s Announcement:

All videos uploaded via the videos.insert endpoint from unverified API projects created after 28 July 2020 will be restricted to private viewing mode. To lift this restriction, each project must undergo an audit to verify compliance with the Terms of Service.

See Issue #86 for more information.

NOTE 2 By default you will only be able to upload ~6 videos every 24 hours due to quota restrictions set by Google. See Issue #119 for more information.

Usage

At a minimum, just specify a filename:

  1. ./youtubeuploader -filename blob.mp4

If it is the first time you’ve run the utility, a browser window should popup and prompt you to provide Youtube credentials. A token will be created and stored in request.token file in the local directory for subsequent use. To run the utility on a headless-server, generate the token file locally first, then simply copy the token file along with youtubeuploader and client_secrets.json to the remote host.

Full list of options:

  1. Usage:
  2. -cache string
  3. token cache file (default "request.token")
  4. -caption string
  5. caption filename. Can be a URL
  6. -categoryId string
  7. video category Id
  8. -chunksize int
  9. size (in bytes) of each upload chunk. A zero value will cause all data to be uploaded in a single request (default 16777216)
  10. -debug
  11. turn on verbose log output
  12. -description string
  13. video description (default "uploaded by youtubeuploader")
  14. -filename string
  15. video filename. Can be a URL. Read from stdin with '-'
  16. -language string
  17. video language (default "en")
  18. -limitBetween string
  19. only rate limit between these times e.g. 10:00-14:00 (local time zone)
  20. -metaJSON string
  21. JSON file containing title,description,tags etc (optional)
  22. -metaJSONout string
  23. filename to write uploaded video metadata into (optional)
  24. -notify
  25. notify channel subscribers of new video. Specify '-notify=false' to disable. (default true)
  26. -oAuthPort int
  27. TCP port to listen on when requesting an oAuth token (default 8080)
  28. -playlistID value
  29. playlistID to add the video to. Can be used multiple times
  30. -privacy string
  31. video privacy status (default "private")
  32. -quiet
  33. suppress progress indicator
  34. -ratelimit int
  35. rate limit upload in Kbps. No limit by default
  36. -recordingDate value
  37. recording date e.g. 2024-11-23
  38. -secrets string
  39. Client Secrets configuration (default "client_secrets.json")
  40. -sendFilename
  41. send original file name to YouTube (default true)
  42. -tags string
  43. comma separated list of video tags
  44. -thumbnail string
  45. thumbnail filename. Can be a URL
  46. -title string
  47. video title
  48. -version
  49. show version

NOTE: When specifying a URL as the filename, the data will be streamed through the localhost (download from remote host, then upload to Youtube)

If -quiet is specified, no upload progress will be displayed. Current progress can be output by sending signal USR1 to the process e.g. kill -USR1 <pid> (Linux/Unix only).

Metadata

Video title, description etc can specified via the command line flags or via a JSON file using the -metaJSON flag. An example JSON file would be:

  1. {
  2. "title": "my test title",
  3. "description": "my test description",
  4. "tags": ["test tag1", "test tag2"],
  5. "privacyStatus": "private",
  6. "madeForKids": false,
  7. "embeddable": true,
  8. "license": "creativeCommon",
  9. "publicStatsViewable": true,
  10. "publishAt": "2017-06-01T12:05:00+02:00",
  11. "categoryId": "10",
  12. "recordingdate": "2017-05-21",
  13. "playlistIds": ["xxxxxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyyyyy"],
  14. "playlistTitles": ["my test playlist"],
  15. "language": "fr"
  16. }
  • all fields are optional
  • use \n in the description to insert newlines
  • times can be provided in one of two formats: yyyy-mm-dd (UTC) or yyyy-mm-ddThh:mm:ss+zz:zz
  • any values supplied via -metaJSON will take precedence over flags

Credit

Based on Go Youtube API Sample code

Thanks to github.com/tokland/youtube-upload for insight into how to update playlists.