feat: add mp4 transcode job and variant record

This commit is contained in:
William Valentin
2026-02-01 15:48:01 -08:00
parent 0bf2f2d827
commit 4fecfd469f
5 changed files with 129 additions and 3 deletions

View File

@@ -11,7 +11,8 @@ const envSchema = z.object({
export const jobNameSchema = z.enum([
"scan_minio_prefix",
"process_asset",
"copy_to_canonical"
"copy_to_canonical",
"transcode_video_mp4"
]);
export type QueueJobName = z.infer<typeof jobNameSchema>;
@@ -36,15 +37,23 @@ export const copyToCanonicalPayloadSchema = z
})
.strict();
export const transcodeVideoMp4PayloadSchema = z
.object({
assetId: z.string().uuid()
})
.strict();
export const payloadByJobNameSchema = z.discriminatedUnion("name", [
z.object({ name: z.literal("scan_minio_prefix"), payload: scanMinioPrefixPayloadSchema }),
z.object({ name: z.literal("process_asset"), payload: processAssetPayloadSchema }),
z.object({ name: z.literal("copy_to_canonical"), payload: copyToCanonicalPayloadSchema })
z.object({ name: z.literal("copy_to_canonical"), payload: copyToCanonicalPayloadSchema }),
z.object({ name: z.literal("transcode_video_mp4"), payload: transcodeVideoMp4PayloadSchema })
]);
export type ScanMinioPrefixPayload = z.infer<typeof scanMinioPrefixPayloadSchema>;
export type ProcessAssetPayload = z.infer<typeof processAssetPayloadSchema>;
export type CopyToCanonicalPayload = z.infer<typeof copyToCanonicalPayloadSchema>;
export type TranscodeVideoMp4Payload = z.infer<typeof transcodeVideoMp4PayloadSchema>;
type QueueEnv = z.infer<typeof envSchema>;
@@ -126,3 +135,12 @@ export async function enqueueCopyToCanonical(input: CopyToCanonicalPayload) {
backoff: { type: "exponential", delay: 1000 }
});
}
export async function enqueueTranscodeVideoMp4(input: TranscodeVideoMp4Payload) {
const payload = transcodeVideoMp4PayloadSchema.parse(input);
const queue = getQueue();
return queue.add("transcode_video_mp4", payload, {
attempts: 3,
backoff: { type: "exponential", delay: 1000 }
});
}