Sta*_*avL 4 java video video-capture amazon-s3 amazon-web-services
有一些视频文件(主要是 .mp4)存储在 S3 中。它们可能相当大。我需要获取视频文件的缩略图 - 假设 0.5 秒的帧(跳过可能的黑屏等)。
如果我下载整个文件,我可以创建缩略图,但它太长了,我试图避免这种情况并下载一些最小的片段。
我知道如何从 AWS S3 下载前 N 个字节- 具有指定范围的请求,但问题是视频文件已损坏且未被识别为正确的视频。
我试图模拟用代码检索的标头字节
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用静态文件但结果1_cut.mp4无效。任何玩家都无法识别它,也无法识别avconv库。
有没有办法只下载视频文件的片段并从片段创建图像?
不确定您是否需要完整的 java 实现,但如果您的文件可以在 S3 上通过直接或签名的 URL 访问,并且您可以使用,而ffmpeg不是以下应该可以解决问题。
ffmpeg -i $amazon_s3_signed_url -ss 00:00:00.500 -vframes 1 thumbnail.png
Run Code Online (Sandbox Code Playgroud)
您可以使用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");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3044 次 |
| 最近记录: |