使用媒体服务编码时对视频进行子剪辑 - .NETSubclip a video when encoding with Media Services - .NET
在使用作业对视频进行编码时,可以对其进行剪裁或子剪辑。You can trim or subclip a video when encoding it using a Job. 此功能适用于使用 BuiltInStandardEncoderPreset 预设或 StandardEncoderPreset 预设生成的任何转换。This functionality works with any Transform that is built using either the BuiltInStandardEncoderPreset presets, or the StandardEncoderPreset presets.
下面的 C# 示例创建一个作业,该作业在提交编码作业时剪裁资产中的视频。The following C# example creates a job that trims a video in an Asset as it submits an encoding job.
必备条件Prerequisites
若要完成本主题中所述的步骤,必须:To complete the steps described in this topic, you have to:
- 创建 Azure 媒体服务帐户Create an Azure Media Services account
- 创建转换以及输入和输出资产。Create a Transform and an input and output Assets. 可以在使用 .NET 对视频进行上传、编码和流式处理中了解如何创建转换以及输入和输出资产。You can see how to create a Transform and input and output Assets in the Upload, encode, and stream videos using .NET tutorial.
- 查看编码概念主题。Review the Encoding concept topic.
示例Example
/// <summary>
/// Submits a request to Media Services to apply the specified Transform to a given input video.
/// </summary>
/// <param name="client">The Media Services client.</param>
/// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
/// <param name="accountName"> The Media Services account name.</param>
/// <param name="transformName">The name of the transform.</param>
/// <param name="jobName">The (unique) name of the job.</param>
/// <param name="inputAssetName">The name of the input asset.</param>
/// <param name="outputAssetName">The (unique) name of the output asset that will store the result of the encoding job. </param>
// <SubmitJob>
private static async Task<Job> JobWithBuiltInStandardEncoderWithSingleClipAsync(
IAzureMediaServicesClient client,
string resourceGroupName,
string accountName,
string transformName,
string jobName,
string inputAssetName,
string outputAssetName)
{
var jobOutputs = new List<JobOutputAsset>
{
new JobOutputAsset(state: JobState.Queued, progress: 0, assetName: outputAssetName)
};
var clipStart = new AbsoluteClipTime()
{
Time = new TimeSpan(0, 0, 20)
};
var clipEnd = new AbsoluteClipTime()
{
Time = new TimeSpan(0, 0, 30)
};
var jobInput = new JobInputAsset(assetName: inputAssetName, start: clipStart, end: clipEnd);
Job job = await client.Jobs.CreateAsync(
resourceGroupName,
accountName,
transformName,
jobName,
new Job(input: jobInput, outputs: jobOutputs.ToArray(), name: jobName)
{
Description = $"A Job with transform {transformName} and single clip.",
Priority = Priority.Normal,
});
return job;
}