gpt4 book ai didi

google-app-engine - 使用 ffmpeg 转码 GCS 文件

转载 作者:行者123 更新时间:2023-12-04 23:22:43 26 4
gpt4 key购买 nike

我的最终目标是对上传到一个 GCS 存储桶的视频文件进行转码,使用 App Engine 将它们转码为 HLS,然后将它们存储在另一个存储桶中进行流式传输。我从其他人编写的代码开始,这些代码非常适合我的用例。现在我只是将它设置为将文件保存为 mp4 以查看它是否有效,并且我没有收到任何错误消息并且将“成功”记录到控制台但是当我检查 GCS 时,它创建的输出文件只有大约一个 kb (基本上它只是元数据)。我相信这个问题与 .pipe(remoteWriteStream, { end: true }); 有关行和 ffmpeg 的东西,因为如果我改为运行 originStream.pipe(remoteWriteStream, {end: true}); 行测试.pipe功能我得到了我所期望的(正确大小的文件的副本)。我见过很多其他人,例如 here使用与云功能基本相同的方法并取得成功。知道我哪里出错了吗?

import { Storage } from '@google-cloud/storage';

import ffmpegInstaller from '@ffmpeg-installer/ffmpeg';
import ffmpeg from 'fluent-ffmpeg';

ffmpeg.setFfmpegPath(ffmpegInstaller.path);

export default async function transcode(
//My try
name: String,
bucket: String,
suffix: String,
size: String,

): Promise<void> {
return new Promise((resolve, reject) => {
const storage = new Storage();

const originBucket = storage.bucket(bucket);
const destinationBucket = storage.bucket('storieshls-2e4b1');

const originFile = originBucket.file(name);
const originStream = originFile.createReadStream();

const remoteWriteStream = destinationBucket.file(name.replace(".MOV", ".mp4")).createWriteStream({
metadata: {
contentType: 'video/mp4', // This could be whatever else you are transcoding to
},
});

//originStream.pipe(remoteWriteStream, {end: true});

ffmpeg()
.input(originStream)
.outputOptions('-c:v copy') // Change these options to whatever suits your needs
.outputOptions('-c:a aac')
.outputOptions('-b:a 160k')
.outputOptions('-f mp4')
.outputOptions('-preset fast')
.outputOptions('-movflags frag_keyframe+empty_moov')
.on('start', cmdLine => {
console.log(`[${suffix}] Started FFMpeg`, cmdLine);
})
.on('end', () => {
console.log(`[${suffix}] Success!.`);
resolve();
})
.on('error', (err: Error, stdout, stderr) => {
console.log(`[${suffix}] Error:`, err.message);
console.error('stdout:', stdout);
console.error('stderr:', stderr);

reject();
})
.pipe(remoteWriteStream, { end: true });
});
}

最佳答案

您需要生成 GCS 文件的公共(public) URL 并将该 URL 传递到 ffmpeg 功能。

ffmpeg(file_url)
.output(basename + '-1280x720.mp4')
.videoCodec('libx264')
.size('1280x720')

.output(basename + '-1920x1080.mp4')
.videoCodec('libx264')
.size('1920x1080')

.on('error', function(err) {
console.log('An error occurred: ' + err.message);
})
.on('progress', function(progress) {
console.log('... frames: ' + progress.frames);
})
.on('end', function() {
console.log('Finished processing');
})
.run();

关于google-app-engine - 使用 ffmpeg 转码 GCS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62054832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com