Fixes to video thumb generation
Some checks failed
Build and Push Image / build-and-push (push) Has been cancelled
Some checks failed
Build and Push Image / build-and-push (push) Has been cancelled
This commit is contained in:
@@ -121,26 +121,36 @@ public class ThumbnailService(IMongoDatabase db, AobaService aobaService)
|
|||||||
public Maybe<Stream> GenerateVideoThumbnail(Stream data, ThumbnailSize size, CancellationToken cancellationToken = default)
|
public Maybe<Stream> GenerateVideoThumbnail(Stream data, ThumbnailSize size, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var w = (int)size;
|
var w = (int)size;
|
||||||
var source = new MemoryStream();
|
var fn = ObjectId.GenerateNewId().ToString();
|
||||||
|
var filePath = $"/tmp/{fn}.in";
|
||||||
|
using var source = new FileStream(filePath, FileMode.CreateNew);
|
||||||
data.CopyTo(source);
|
data.CopyTo(source);
|
||||||
source.Position = 0;
|
source.Flush();
|
||||||
|
source.Dispose();
|
||||||
|
data.Dispose();
|
||||||
|
try
|
||||||
|
{
|
||||||
var output = new MemoryStream();
|
var output = new MemoryStream();
|
||||||
FFMpegArguments.FromPipeInput(new StreamPipeSource(source), opt =>
|
FFMpegArguments.FromFileInput(filePath, false, opt =>
|
||||||
{
|
{
|
||||||
opt.WithCustomArgument("-t 5");
|
opt.WithCustomArgument("-t 5");
|
||||||
}).OutputToPipe(new StreamPipeSink(output), opt =>
|
}).OutputToPipe(new StreamPipeSink(output), opt =>
|
||||||
{
|
{
|
||||||
opt.WithCustomArgument($"-vf \"crop='min(in_w,in_h)':'min(in_w,in_h)',scale={w}:{w}\" -loop 0 -r 15")
|
opt.WithCustomArgument($"-vf \"crop='min(in_w,in_h)':'min(in_w,in_h)',scale={w}:{w}\" -loop 0 -r 15")
|
||||||
.ForceFormat("webp");
|
.ForceFormat("webp");
|
||||||
}).Configure(cfg =>
|
|
||||||
{
|
|
||||||
#if !DEBUG
|
|
||||||
cfg.BinaryFolder = "/usr/bin";
|
|
||||||
#endif
|
|
||||||
}).ProcessSynchronously();
|
}).ProcessSynchronously();
|
||||||
output.Position = 0;
|
output.Position = 0;
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
catch(Exception ex)
|
||||||
|
{
|
||||||
|
return ex;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
File.Delete(filePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<Maybe<Stream>> GenerateDocumentThumbnailAsync(Stream data, ThumbnailSize size, CancellationToken cancellationToken = default)
|
public async Task<Maybe<Stream>> GenerateDocumentThumbnailAsync(Stream data, ThumbnailSize size, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user