You need to enable JavaScript to run this app.
文档中心
对象存储

对象存储

复制全文
下载 pdf
视频处理
创建视频转码任务(Java SDK)
复制全文
下载 pdf
创建视频转码任务(Java SDK)
本文介绍如何通过 TOS Java SDK 创建视频转码任务。​
注意事项​
仅 Java SDK 2.9.15 及以上版本支持创建视频转码任务的功能。​
示例代码​
根据模板 ID 创建视频转码任务​
​
package org.example.CreateVideoConvertJob;​
​
// 根据模板Id创建视频转码任务​
import com.volcengine.tos.TOSV2;​
import com.volcengine.tos.TOSV2ClientBuilder;​
import com.volcengine.tos.TosClientException;​
import com.volcengine.tos.TosServerException;​
import com.volcengine.tos.comm.common.*;​
import com.volcengine.tos.model.bucket.*;​
import com.volcengine.tos.model.object.*;​
​
public class CreateVideoConvertJobExample {​
public static void main(String[] args) {​
String endpoint = System.getenv("TOS_ENDPOINT");​
String region = System.getenv("TOS_REGION");​
String accessKey = System.getenv("TOS_ACCESS_KEY");​
String secretKey = System.getenv("TOS_SECRET_KEY");​
​
// 填写 BucketName​
String bucketName = System.getenv("TOS_BUCKET");​
// 模板 ID​
String templateId = "3633373966613563353858a1015403c6e03f";​
​
// 初始化客户端​
TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);​
​
try {​
// 1. 根据用例类型设置相应的参数(通过模板 ID 触发转码)​
// 源对象 Key(占位符,请替换为实际视频对象)​
String sourceObjectKey = "example-input.mp4";​
ConvertJobInput jobInput = ConvertJobInput.builder()​
.object(sourceObjectKey)​
.build();​
​
// 目标输出(将转码后的结果写入同一桶的指定对象)​
ConvertJobOutput jobOutput = ConvertJobOutput.builder()​
.region(region) // 输出区域:使用当前 region​
.bucket(bucketName) // 输出桶:与输入桶相同,亦可配置为其他桶​
.object("example-output.mp4") // 输出对象 Key(占位符)​
.build();​
​
// 使用模板 ID 构造转码配置;Transcode 为空对象即可​
TranscodeConfig transcodeConfig = TranscodeConfig.builder()​
.templateID(templateId) // 引用已创建的视频转码模板 ID​
.transcode(new Transcode()) // 通过模板进行转码,无需额外细项​
.build();​
​
// 2. 调用对应的 API 函数​
CreateVideoConvertJobInput input = CreateVideoConvertJobInput.builder()​
.bucket(bucketName)​
.input(jobInput)​
.output(jobOutput)​
.transcodeConfig(transcodeConfig)​
.build();​
CreateVideoConvertJobOutput output = tos.createVideoConvertJob(input);​
​
// 3. 处理返回结果​
System.out.println("创建视频转码任务成功");​
System.out.println("RequestID: " + output.getRequestInfo().getRequestId());​
System.out.println("StatusCode: " + output.getRequestInfo().getStatusCode());​
System.out.println("JobID: " + output.getJobId());​
​
// 4. 添加适当的注释说明:本用例通过模板 ID 创建任务,适合复用统一转码策略​
​
} catch (TosClientException e) {​
// 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送​
System.out.println("操作失败");​
System.out.println("Message: " + e.getMessage());​
if (e.getCause() != null) {​
e.getCause().printStackTrace();​
}​
} catch (TosServerException e) {​
// 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息​
System.out.println("操作失败");​
System.out.println("StatusCode: " + e.getStatusCode());​
System.out.println("Code: " + e.getCode());​
System.out.println("Message: " + e.getMessage());​
System.out.println("RequestID: " + e.getRequestID());​
} catch (Throwable t) {​
// 作为兜底捕获其他异常,一般不会执行到这里​
System.out.println("操作失败");​
System.out.println("unexpected exception, message: " + t.getMessage());​
}​
}​
}​
​
根据参数配置创建视频转码任务​
​
package org.example.CreateVideoConvertJob;​
​
// 根据参数配置创建视频转码任务​
import com.volcengine.tos.TOSV2;​
import com.volcengine.tos.TOSV2ClientBuilder;​
import com.volcengine.tos.TosClientException;​
import com.volcengine.tos.TosServerException;​
import com.volcengine.tos.comm.common.*;​
import com.volcengine.tos.model.bucket.*;​
import com.volcengine.tos.model.object.*;​
​
public class CreateVideoConvertJobExample2 {​
public static void main(String[] args) {​
String endpoint = System.getenv("TOS_ENDPOINT");​
String region = System.getenv("TOS_REGION");​
String accessKey = System.getenv("TOS_ACCESS_KEY");​
String secretKey = System.getenv("TOS_SECRET_KEY");​
​
// 填写 BucketName​
String bucketName = System.getenv("TOS_BUCKET");​
​
// 初始化客户端​
TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);​
​
try {​
// 1. 根据用例类型设置相应的参数(直接配置视频与音频转码参数)​
// 容器封装格式:MP4​
Container container = Container.builder()​
.format(ContainerFormatType.MP4)​
.build();​
​
// 视频参数:编码 h264,分辨率 1280x720,CRF=23,像素 yuv420p,码率 2Mbps,帧率 30fps​
Video video = Video.builder()​
.codec("h264")​
.width(1280)​
.height(720)​
.crf(23)​
.pixFmt("yuv420p")​
.bitRate(2_000_000)​
.fps(30)​
.remove(false)​
.build();​
​
// 音频参数:编码 aac,码率 128Kbps,采样率 44100Hz,双声道​
Audio audio = Audio.builder()​
.codec("aac")​
.bitRate(128_000)​
.sampleFormat("fltp")​
.sampleRate(44_100)​
.channels(2)​
.remove(false)​
.build();​
​
// 转码时间区间(示例:从第 0 毫秒开始,持续 10 秒)​
TimeInterval timeInterval = TimeInterval.builder()​
.start(0)​
.duration(10_000)​
.build();​
​
// 汇总转码配置​
Transcode transcode = Transcode.builder()​
.timeInterval(timeInterval)​
.container(container)​
.video(video)​
.audio(audio)​
.build();​
TranscodeConfig transcodeConfig = TranscodeConfig.builder()​
.transcode(transcode)​
.build();​
​
// 源对象与目标输出​
ConvertJobInput jobInput = ConvertJobInput.builder()​
.object("example-input.mp4")​
.build();​
ConvertJobOutput jobOutput = ConvertJobOutput.builder()​
.region(region)​
.bucket(bucketName)​
.object("example-output.mp4")​
.build();​
​
// 2. 调用对应的 API 函数​
CreateVideoConvertJobInput input = CreateVideoConvertJobInput.builder()​
.bucket(bucketName)​
.input(jobInput)​
.output(jobOutput)​
.transcodeConfig(transcodeConfig)​
.callback("http://example.com/callback")​
.build();​
CreateVideoConvertJobOutput output = tos.createVideoConvertJob(input);​
​
// 3. 处理返回结果​
System.out.println("创建视频转码任务成功");​
System.out.println("RequestID: " + output.getRequestInfo().getRequestId());​
System.out.println("StatusCode: " + output.getRequestInfo().getStatusCode());​
System.out.println("JobID: " + output.getJobId());​
​
​
} catch (TosClientException e) {​
// 操作失败,捕获客户端异常,一般情况是请求参数错误,此时请求并未发送​
System.out.println("操作失败");​
System.out.println("Message: " + e.getMessage());​
if (e.getCause() != null) {​
e.getCause().printStackTrace();​
}​
} catch (TosServerException e) {​
// 操作失败,捕获服务端异常,可以获取到从服务端返回的详细错误信息​
System.out.println("操作失败");​
System.out.println("StatusCode: " + e.getStatusCode());​
System.out.println("Code: " + e.getCode());​
System.out.println("Message: " + e.getMessage());​
System.out.println("RequestID: " + e.getRequestID());​
} catch (Throwable t) {​
// 作为兜底捕获其他异常,一般不会执行到这里​
System.out.println("操作失败");​
System.out.println("unexpected exception, message: " + t.getMessage());​
}​
}​
}​
​
创建带文字水印的视频转码任务​
以下代码展示如何通过 TranscodeConfig.watermark 直接传入文字水印配置。​
​
import com.volcengine.tos.TOSV2;​
import com.volcengine.tos.TOSV2ClientBuilder;​
import com.volcengine.tos.TosClientException;​
import com.volcengine.tos.TosServerException;​
import com.volcengine.tos.comm.common.ContainerFormatType;​
import com.volcengine.tos.model.bucket.Container;​
import com.volcengine.tos.model.bucket.ConvertJobInput;​
import com.volcengine.tos.model.bucket.ConvertJobOutput;​
import com.volcengine.tos.model.bucket.CreateVideoConvertJobInput;​
import com.volcengine.tos.model.bucket.CreateVideoConvertJobOutput;​
import com.volcengine.tos.model.bucket.Transcode;​
import com.volcengine.tos.model.bucket.TranscodeConfig;​
import com.volcengine.tos.model.bucket.Watermark;​
import com.volcengine.tos.model.bucket.WatermarkText;​
​
import java.util.Collections;​
​
public class CreateVideoConvertJobWithWatermarkExample {​
public static void main(String[] args) {​
String endpoint = System.getenv("TOS_ENDPOINT");​
String region = System.getenv("TOS_REGION");​
String accessKey = System.getenv("TOS_ACCESS_KEY");​
String secretKey = System.getenv("TOS_SECRET_KEY");​
String bucketName = System.getenv("TOS_BUCKET");​
String objectKey = System.getenv("TOS_OBJECT_KEY");​
​
TOSV2 tos = new TOSV2ClientBuilder().build(region, endpoint, accessKey, secretKey);​
try {​
String outputKey = "java-sdk-example/create-video-convert-job/watermark-output-"​
+ System.currentTimeMillis() + ".mp4";​
WatermarkText watermarkText = WatermarkText.builder()​
.fontSize(50)​
.fontType("wqy-microhei")​
.fontColor("red")​
.transparency(20)​
.text("Java SDK Example")​
.build();​
Watermark watermark = Watermark.builder()​
.type("Text")​
.pos("TopRight")​
.locMode("Relative")​
.dx(10)​
.dy(10)​
.startTime(0)​
.endTime(10000)​
.text(watermarkText)​
.build();​
Transcode transcode = Transcode.builder()​
.container(Container.builder()​
.format(ContainerFormatType.MP4)​
.build())​
.build();​
​
CreateVideoConvertJobOutput output = tos.createVideoConvertJob(CreateVideoConvertJobInput.builder()​
.bucket(bucketName)​
.input(ConvertJobInput.builder()​
.object(objectKey)​
.build())​
.transcodeConfig(TranscodeConfig.builder()​
.transcode(transcode)​
.watermark(Collections.singletonList(watermark))​
.build())​
.output(ConvertJobOutput.builder()​
.region(region)​
.bucket(bucketName)​
.object(outputKey)​
.build())​
.build());​
​
System.out.println("createVideoConvertJob with watermark succeed.");​
System.out.println("Code: " + output.getCode());​
System.out.println("Message: " + output.getMessage());​
System.out.println("Job ID: " + output.getJobId());​
System.out.println("Output object: " + outputKey);​
System.out.println("Request ID: " + output.getRequestInfo().getRequestId());​
} catch (TosClientException e) {​
System.out.println("createVideoConvertJob with watermark failed");​
System.out.println("Message: " + e.getMessage());​
if (e.getCause() != null) {​
e.getCause().printStackTrace();​
}​
} catch (TosServerException e) {​
System.out.println("createVideoConvertJob with watermark failed");​
System.out.println("StatusCode: " + e.getStatusCode());​
System.out.println("Code: " + e.getCode());​
System.out.println("Message: " + e.getMessage());​
System.out.println("RequestID: " + e.getRequestID());​
} catch (Throwable t) {​
System.out.println("createVideoConvertJob with watermark failed");​
System.out.println("unexpected exception, message: " + t.getMessage());​
}​
}​
}​
​
回调请求说明​
当设置 Callback 字段时,任务执行成功后将对 Callback URL 发送回调请求:​
​
​
Post <callback_url_path> HTTP/1.1​
Host: <callback_url_host>​
​
{​
"JobID": "fa81ef2a00a2211f08a9aa5fa72ccf57a", // 任务id​
"CreateTime": "2025-03-26T17:14:01+0800", // 任务创建时间,RFC 3339格式​
"StartTime": "2025-03-26T17:14:02+0800", // 任务执行时间,RFC 3339格式​
"EndTime": "2025-03-26T17:14:02+0800", // 任务结束时间,RFC 3339格式​
"Callback": "https://myapp.com/callback", // 回调URL​
"State": "Success", // 任务状态,取值: Success/Failed​
"Code": 0, // 任务状态码​
"Message": "success", // 任务状态消息​
"Input" : { // 源文件​
"Object" : "sample.mp4" ​
},​
"TranscodeConfig": { // 下发任务时使用的转码参数​
"Transcode": {​
"TimeInterval": {​
"Start": 0,​
"Duration": 10000​
},​
"Container": {​
"Format": "mp4"​
},​
"Video": {​
"Codec": "h264",​
"Width": 480,​
"Height": 480,​
"Crf": 1,​
"PixFmt": "yuv420p"​
}​
},​
},​
"Output" : { // 输出文件​
"Region" : "cn-beijing", ​
"Bucket" : "testbkt",​
"Object" : "output.mp4"​
}​
}​
​
相关文档​
关于创建视频转码任务的相关 API 接口,请参见CreateTranscodeJob。​
最近更新时间:2026.05.25 16:49:53
这个页面对您有帮助吗?
有用
有用
无用
无用