mirror of
https://github.com/Xinrea/bili-shadowreplay.git
synced 2025-11-25 04:22:24 +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());
|
log::error!("Get file metadata error: {} {}", e, file.display());
|
||||||
e.to_string()
|
e.to_string()
|
||||||
})?;
|
})?;
|
||||||
|
let mut cover_generate_ffmpeg = true;
|
||||||
let cover_file = file.with_extension("jpg");
|
let cover_file = file.with_extension("jpg");
|
||||||
let base64 = params.cover.split("base64,").nth(1).unwrap();
|
if !params.cover.is_empty() {
|
||||||
let bytes = base64::engine::general_purpose::STANDARD
|
if let Some(base64) = params.cover.split("base64,").nth(1) {
|
||||||
.decode(base64)
|
if let Ok(bytes) = base64::engine::general_purpose::STANDARD.decode(base64) {
|
||||||
.unwrap();
|
// write cover file to fs
|
||||||
// write cover file to fs
|
tokio::fs::write(&cover_file, bytes).await.map_err(|e| {
|
||||||
tokio::fs::write(&cover_file, bytes).await.map_err(|e| {
|
log::error!("Write cover file error: {} {}", e, cover_file.display());
|
||||||
log::error!("Write cover file error: {} {}", e, cover_file.display());
|
e.to_string()
|
||||||
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
|
// get filename from path
|
||||||
let filename = Path::new(&file)
|
let filename = Path::new(&file)
|
||||||
.file_name()
|
.file_name()
|
||||||
|
|||||||
@@ -605,8 +605,16 @@ const clip_range = tool(
|
|||||||
room_id: z.string().describe("The room id of the room"),
|
room_id: z.string().describe("The room id of the room"),
|
||||||
live_id: z.string().describe("The live id of the live"),
|
live_id: z.string().describe("The live id of the live"),
|
||||||
range: z.object({
|
range: z.object({
|
||||||
start: z.number().describe("The start time in SECONDS of the clip"),
|
start: z
|
||||||
end: z.number().describe("The end time in SECONDS of the clip"),
|
.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
|
danmu: z
|
||||||
.boolean()
|
.boolean()
|
||||||
|
|||||||
Reference in New Issue
Block a user