mirror of
https://github.com/Xinrea/bili-shadowreplay.git
synced 2025-11-24 20:15:34 +08:00
fix: ai clip error by empty cover (#225)
* fix: ai clip error * fix: using ffmpeg as fallback for cover
This commit is contained in:
@@ -414,16 +414,28 @@ async fn clip_range_inner(
|
||||
log::error!("Get file metadata error: {} {}", e, file.display());
|
||||
e.to_string()
|
||||
})?;
|
||||
let mut cover_generate_ffmpeg = true;
|
||||
let cover_file = file.with_extension("jpg");
|
||||
let base64 = params.cover.split("base64,").nth(1).unwrap();
|
||||
let bytes = base64::engine::general_purpose::STANDARD
|
||||
.decode(base64)
|
||||
.unwrap();
|
||||
// write cover file to fs
|
||||
tokio::fs::write(&cover_file, bytes).await.map_err(|e| {
|
||||
log::error!("Write cover file error: {} {}", e, cover_file.display());
|
||||
e.to_string()
|
||||
})?;
|
||||
if !params.cover.is_empty() {
|
||||
if let Some(base64) = params.cover.split("base64,").nth(1) {
|
||||
if let Ok(bytes) = base64::engine::general_purpose::STANDARD.decode(base64) {
|
||||
// write cover file to fs
|
||||
tokio::fs::write(&cover_file, bytes).await.map_err(|e| {
|
||||
log::error!("Write cover file error: {} {}", e, cover_file.display());
|
||||
e.to_string()
|
||||
})?;
|
||||
cover_generate_ffmpeg = false;
|
||||
} else {
|
||||
log::error!("Decode base64 error: {}", params.cover);
|
||||
}
|
||||
} else {
|
||||
log::error!("Invalid cover base64: {}", params.cover);
|
||||
}
|
||||
}
|
||||
// generate cover file from video as fallback
|
||||
if cover_generate_ffmpeg {
|
||||
ffmpeg::generate_thumbnail(&file, 0.0).await?;
|
||||
}
|
||||
// get filename from path
|
||||
let filename = Path::new(&file)
|
||||
.file_name()
|
||||
|
||||
@@ -605,8 +605,16 @@ const clip_range = tool(
|
||||
room_id: z.string().describe("The room id of the room"),
|
||||
live_id: z.string().describe("The live id of the live"),
|
||||
range: z.object({
|
||||
start: z.number().describe("The start time in SECONDS of the clip"),
|
||||
end: z.number().describe("The end time in SECONDS of the clip"),
|
||||
start: z
|
||||
.number()
|
||||
.describe(
|
||||
"The start time in SECONDS of the clip that relative to the live start time"
|
||||
),
|
||||
end: z
|
||||
.number()
|
||||
.describe(
|
||||
"The end time in SECONDS of the clip that relative to the live start time"
|
||||
),
|
||||
}),
|
||||
danmu: z
|
||||
.boolean()
|
||||
|
||||
Reference in New Issue
Block a user