fix: thumbnail gen single frame

This commit is contained in:
kieran 2025-01-27 10:14:24 +00:00
parent 71f6f47a00
commit 0d8686a850
No known key found for this signature in database
GPG Key ID: DE71CEB3925BE941

View File

@ -1,7 +1,9 @@
use anyhow::{bail, Error, Result};
use ffmpeg_rs_raw::ffmpeg_sys_the_third::AVPixelFormat::AV_PIX_FMT_YUV420P;
use ffmpeg_rs_raw::{Demuxer, DemuxerInfo, Encoder, Muxer, StreamType, Transcoder};
use ffmpeg_rs_raw::ffmpeg_sys_the_third::{av_frame_free, av_packet_free, AVFrame};
use ffmpeg_rs_raw::{Decoder, Demuxer, DemuxerInfo, Encoder, Scaler, StreamType, Transcoder};
use std::path::{Path, PathBuf};
use std::ptr;
use uuid::Uuid;
#[cfg(feature = "labels")]
@ -93,15 +95,26 @@ impl WebpProcessor {
.with_framerate(1.0)?
.open(None)?;
let mut trans = Transcoder::new_custom_io(
input,
Muxer::builder()
.with_output_path(out_path.to_str().unwrap(), Some("webp"))?
.build()?,
);
let mut sws = Scaler::new();
let mut decoder = Decoder::new();
decoder.setup_decoder(image_stream, None)?;
trans.transcode_stream(image_stream, enc)?;
trans.run(None)?;
while let Ok((mut pkt, _stream)) = input.get_packet() {
let mut frame_save: *mut AVFrame = ptr::null_mut();
for mut frame in decoder.decode_pkt(pkt)? {
if frame_save.is_null() {
frame_save = sws.process_frame(frame, w, h, AV_PIX_FMT_YUV420P)?;
}
av_frame_free(&mut frame);
}
av_packet_free(&mut pkt);
if !frame_save.is_null() {
enc.save_picture(frame_save, out_path.to_str().unwrap())?;
av_frame_free(&mut frame_save);
return Ok(());
}
}
Ok(())
}