gpt4 book ai didi

java - 从 S3 上的视频创建缩略图而无需下载

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:39:04 25 4
gpt4 key购买 nike

S3 中存储了一些视频文件(主要是.mp4)。它们可能相当大。我需要获取视频文件的缩略图 - 比如说 0.5 秒的帧(以跳过可能的黑屏等)。

如果我下载整个文件,我可以创建缩略图,但它太长了,我试图避免这种情况并下载一些最小的片段。

我知道how to download first N bytes from AWS S3 - 请求指定范围,但问题是视频文件已损坏,无法识别为正确的视频。

我尝试用代码模拟 header 字节检索

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test {
public static void main(String[] args) throws Exception {
try(FileInputStream fis = new FileInputStream("D://temp//1.mp4");
FileOutputStream fos = new FileOutputStream("D://temp//1_cut.mp4");
) {
byte[] buf=new byte[1000000];
fis.read(buf);
fos.write(buf);
fos.flush();
System.out.println("Done");
}
}

}

要处理静态文件,但结果 1_cut.mp4 无效。玩家无法识别它,也无法识别 avconv 库。

有没有办法只下载视频文件的片段并从该片段创建图像?

最佳答案

不确定您是否需要完整的 Java 实现,但如果您的文件可以在 S3 上通过直接或签名的 URL 访问,并且您可以使用 ffmpeg,那么下面应该可以解决问题。

ffmpeg -i $amazon_s3_signed_url -ss 00:00:00.500 -vframes 1 thumbnail.png

您可以使用 Amazon Java SDK创建预签名 URL,然后执行上面的命令创建缩略图。

GeneratePresignedUrlRequest generatePresignedUrlRequest = 
new GeneratePresignedUrlRequest(bucketName, objectKey);
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);

URL url = s3client.generatePresignedUrl(generatePresignedUrlRequest);
String urlString = url.toString();

Runtime run = Runtime.getRuntime();
Process proc = run.exec("ffmpeg -i " + urlString +" -ss 00:00:00.500 -vframes 1 thumbnail.png");

关于java - 从 S3 上的视频创建缩略图而无需下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47330009/

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