From 03be04b91e5123a27a15cb3521b4c7b8fc278b11 Mon Sep 17 00:00:00 2001 From: chrominance Date: Sat, 10 Feb 2024 20:10:28 -0500 Subject: [PATCH] feat: auto-trim streams w "AI Subtitles" watermark --- data/black_cropped_aisubs.jpg | Bin 0 -> 39387 bytes data/black_cropped_nologo_aisubs.jpg | Bin 0 -> 31543 bytes src/ffmpeg.ts | 36 +++++++++++++++++++++------ 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 data/black_cropped_aisubs.jpg create mode 100644 data/black_cropped_nologo_aisubs.jpg diff --git a/data/black_cropped_aisubs.jpg b/data/black_cropped_aisubs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..64c807f254cbdc5a56105c9b1f57ba13d5d57bd2 GIT binary patch literal 39387 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 literal 0 HcmV?d00001 diff --git a/data/black_cropped_nologo_aisubs.jpg b/data/black_cropped_nologo_aisubs.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e6aa95e15ae6179f2aff47fb96bf12e26d5ff25 GIT binary patch literal 31543 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 T(5A02T=gZGa2y*K@vHv__5OVw literal 0 HcmV?d00001 diff --git a/src/ffmpeg.ts b/src/ffmpeg.ts index a8524ae..d2869d7 100644 --- a/src/ffmpeg.ts +++ b/src/ffmpeg.ts @@ -77,31 +77,43 @@ const MINIMUM_BOUNDARY_SILENCE_SECONDS = 0.1; const BOUNDARY_STRATEGIES = [ { name: 'black-logo', - filters: [9], + filters: [11], minSilenceSeconds: 1.5, minFrames: 5 }, { name: 'white-logo', - filters: [11], + filters: [13], minSilenceSeconds: 1.5, minFrames: 5 }, { name: 'white-borders-logo', - filters: [13], + filters: [15], + minSilenceSeconds: 1.5, + minFrames: 5 + }, + { + name: 'black-logo-ai-subtitles', + filters: [17], + minSilenceSeconds: 1.5, + minFrames: 5 + }, + { + name: 'black-no-logo-ai-subtitles', + filters: [19], minSilenceSeconds: 1.5, minFrames: 5 }, { name: 'no-logo', - filters: [14], + filters: [20], minSilenceSeconds: 0.1, minFrames: 3 }, { name: 'newsline', - filters: [16], + filters: [22], minSilenceSeconds: 0, minFrames: 1 } @@ -157,6 +169,8 @@ const getFfmpegBoundaryDetectionArguments = ( ['-i', join(appRootPath.path, 'data/black_cropped.jpg')], ['-i', join(appRootPath.path, 'data/white_cropped.jpg')], ['-i', join(appRootPath.path, 'data/white_borders_cropped.jpg')], + ['-i', join(appRootPath.path, 'data/black_cropped_aisubs.jpg')], + ['-i', join(appRootPath.path, 'data/black_cropped_nologo_aisubs.jpg')], ['-i', join(appRootPath.path, 'data/newsline_intro.jpg')], [ '-filter_complex', @@ -166,19 +180,25 @@ const getFfmpegBoundaryDetectionArguments = ( '[1]extractplanes=y[by]', '[2]extractplanes=y[wy]', '[3]extractplanes=y[wby]', - '[4]extractplanes=y[nly]', + '[4]extractplanes=y[bay]', + '[5]extractplanes=y[bnlay]', + '[6]extractplanes=y[nly]', '[vy]split=outputs=2[vy0][vy1]', // Crop top left corner '[vy0]crop=w=960:h=540:x=0:y=0[cvy]', - '[cvy]split=outputs=4[cvy0][cvy1][cvy2][cvy3]', + '[cvy]split=outputs=6[cvy0][cvy1][cvy2][cvy3][cvy4][cvy5]', // Detect black frames with logo '[cvy0][by]blend=difference,blackframe=99', // Detect white frames with logo '[cvy1][wy]blend=difference,blackframe=99:50', // Detect white frames with logo and border '[cvy2][wby]blend=difference,blackframe=99:50', + // Detect black frames with logo and AI Subtitle text + '[cvy3][bay]blend=difference,blackframe=99', + // Detect black frames with no logo, with AI Subtitle text + '[cvy4][bnlay]blend=difference,blackframe=99', // Detect black frames with no logo - '[cvy3]blackframe=99', + '[cvy5]blackframe=99', // Detect Newsline intro '[vy1][nly]blend=difference,blackframe=99', // Detect silences greater than MINIMUM_BOUNDARY_SILENCE_SECONDS