65.9K
CodeProject 正在变化。 阅读更多。
Home

用于将视频上传到 Vimeo 的命令行工具和 C# 类

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2016年5月29日

CPOL

7分钟阅读

viewsIcon

25985

downloadIcon

660

一个命令行工具和一个简单的 C# 类,包含一套完整的函数,可以轻松地将视频上传到 Vimeo

引言

Vimeo 是一个用于存档和与他人分享视频的优秀平台;它提供了一套简单而完整的 API 来控制其几乎所有功能 (https://developer.vimeo.com/api)。您可能需要在此处以编程方式上传视频文件,例如,因为您有一个应用程序会自动生成需要与某些用户共享的视频。如何处理这种情况?

在互联网上,您可以找到一些 Java、C# 和 Python 的 API 封装器 (https://developer.vimeo.com/api/libraries)。我寻找一个可以在我的 C# 应用程序中使用的,但我没有找到任何满足我期望的:开源且非常简单。Vimeo 还提供了一个功能,允许您自动从 Dropbox 帐户中拉取视频。它的优点是理论上上传视频,您只需将文件复制到文件夹中,并且上传是在专用进程上执行的。缺点是它不提供很多灵活性,例如,您无法设置视频标题、描述和预览,也无法在上传后执行一些操作。此外,您无法精确控制视频何时上传,并且将依赖于 Dropbox 系统。对我来说一个不错的解决方案是一个可以从外部应用程序轻松启动的“Vimeo 命令行工具”。因此,我决定创建它以及一个简单的 C# 类来管理 Vimeo API,它可以轻松集成到任何应用程序中。在这里,我将描述这些工具,您可以下载两者的完整源代码。

背景

Vimeo HTTP API 需要在 HTTP 请求的授权头中包含授权令牌。因此,我的命令行工具和我的类也需要此令牌。要获取令牌,您需要

  1. 通过单击“创建新应用”并填写所示表单,在 https://developer.vimeo.com/apps 上注册您的应用。
  2. 进入您的应用页面,单击“请求上传权限”并填写表单。
  3. 获得上传权限后,进入您的应用页面,打开“身份验证”部分,然后按“生成令牌”来创建它。

使用命令行工具

vimeouploader.exe 是一个命令行工具,您可以使用它来在 Vimeo 上上传视频并控制此服务提供的许多其他功能。它使用 C# 编译,需要 .NET Framework 4。

语法如下

Vimeouploader <command> -t=<token> -f=<videofile> -pf=<picturefile> -pt=<picturetime>
 -v=<video id> -n=<video name> -d=<video description> 
 -cf=<folder to check for video upload> -df=<folder for uploaded videos> -ci=<check interval>

command 参数是必需的,其他参数是可选的,并取决于命令值。

您必须使用 –t 参数提供有效的授权令牌,如果令牌无效,您将收到以下错误:“远程服务器返回错误:(401) 未经授权”。

例如,您可以使用以下命令获取视频列表

Vimeouploader LV -t=<token>

您可以避免每次调用 vimeouploader.exe 时都提供令牌,而是使用以下命令将其值保存在注册表中

Vimeouploader ST -t=<token> 

因此,下次要获取视频列表时,您只需调用

Vimeouploader LV

可用的命令有

  • LV: 列出您的视频。报告的信息是:视频 URI、视频名称和创建时间。您可以使用 VINFO 命令(见下文)获取特定视频的更多信息。
  • 接下来的命令可能需要一个 video id 参数:它是没有“/videos/”部分的视频 URI。
  • QUOTA: 显示您已使用和可用的空间。
  • UPLOAD: 上传视频。您必须在 –f 参数上提供有效的视频文件名,您可以选择在 –n 参数上指定视频名称,并在 –d 参数上指定视频描述。示例
    Vimeouploader UPLOAD -f="c:\video.avi" -n="video1" -d="my First Video"

    上传完成后,软件将显示以下行:“视频已上传:<videoid>”。

    您可以使用此 URI 在您的网站上嵌入此视频:https://player.vimeo.com/video/<videoid>

  • DEL: 删除视频,您必须在 –v 参数上提供视频 ID。示例
    Vimeouploader DEL -v:<videoid>
  • EDT: 设置给定视频的名称和描述。您必须在 –v 参数上提供视频 ID,在 -n 参数上提供视频名称,并在 -d 参数上提供视频描述。示例
    Vimeouploader EDT -v:<videoid> -n="Video1" -d="My first video"
  • SETPIC: 为给定视频设置预览图片。您必须在 –v 参数上提供视频 ID,在 -pf 参数上提供图像路径。示例
    Vimeouploader SETPIC -v:<videoid> -pf="v:\videoimm.jpg"
  • UINFO: 显示有关您的 Vimeo 帐户的信息
  • VINFO: 显示有关指定视频的信息。您必须在 –v 参数上提供视频 ID。示例
    Vimeouploader VINFO -v:<videoid>
  • VSTATUS: 只显示指定视频的状态。您必须在 –v 参数上提供视频 ID。
  • ST: 将授权令牌保存到注册表,以避免每次都指定它。您必须在 -t 参数上指定令牌。
  • PULLFD: 检查给定文件夹,如果有视频,它将被上传并移动到另一个文件夹。您必须在 -cf 参数上指定要检查的文件夹,并在 -df 参数上指定移动上传视频的文件夹。
    Vimeouploader PULLFD -cf:"c:\video_to_upload" -df:"c:\video_uploaded"

    每个上传的视频都将以文件名作为标题。您还可以将与视频同名的图片包含在文件夹中。如果工具找到它,它也会上传它并将其设置为视频的缩略图。默认情况下,每 5 秒检查一次新视频,但您可以使用 -ci 参数指定自定义检查间隔(以毫秒为单位)。

  • HELP: 显示软件版本和可用命令的简要说明

使用 VimeoApi C# 类

VimeoApi 类是一个非常简单的类,您可以在 C# 应用程序中使用它与 Vimeo 交互。您只需在解决方案中包含 VimeoApi.cs 文件,并添加对 Newtonsoft.Json 的引用(用于解码 Vimeo API 返回的 Json 信息)。

类构造函数接受授权令牌作为参数,该令牌可以按上述方法获取。

VimeoApi 类公开的方法有

名称 描述
void DeleteVideo(string videoId)

删除指定的视频

VimeoApi.UserInfo GetQuota() 获取 Vimeo 上的可用空间
UserInfo GetUserInfo() 获取有关 Vimeo 帐户的信息
VideoEntryData GetVideoDetails(string videoId) 获取有关视频的信息
VideoEntry GetVideos() 获取用户视频
string GetVideoStatus(string videoId) 获取视频状态描述
void SaveAuth() 将授权令牌保存到注册表
void ReadAuth() 从注册表读取授权令牌
void SetPicture(string videoId, int timeOffset) 为给定视频设置缩略图。图片将从视频的给定帧中截取
void SetPicture(string videoId, string fileName) 使用图像文件为给定视频设置缩略图
void SetVideoMetadata(string videoId, string name, string description) 设置给定视频的名称和描述
string UploadVideo(string videoFileName, string videoName, string videoDescription, System.Action<long,long> uploadCB) 上传视频。您可以传递一个回调,该回调将在每发送一兆字节时调用

关注点

在本文中,我们介绍了一个有趣的命令行工具,它可以让您轻松地在 Vimeo 上上传视频并控制其他功能。您可以单独使用此工具,也可以通过其他应用程序调用它。可能还有一些功能可以添加,但我认为这个初始版本已经是自动化上传视频到 Vimeo 的强大工具。

您也可以为此目的使用 VimeoApi C# 类。相对于其他 C# 封装器,它的主要优点是它是一个包含在单个 .cs 文件中的单个类,因此它易于集成到您的应用程序中,出现问题时易于调试,并且易于根据您的需要进行更改。

历史

  • 2016 年 5 月 30 日:初始版本
  • 2019 年 8 月 23 日:使用 .NET Framework 4.7.2 重新编译项目,以避免“System.Net.WebException”错误,并强制使用 Vimeo API 3.2,以避免上传期间出现问题。
© . All rights reserved.