@ -21,7 +21,7 @@ import { FFprobeFormat, FFprobeStream } from '../../../../ffprobe';
const { ffmpeg : { blackDetect , silenceDetect } } = window . require ( '@electron/remote' ) . require ( './index.js' ) ;
function useSegments ( { filePath , workingRef , setWorking , setProgress , videoStream , fileDuration , getRelevantTime , maxLabelLength , checkFileOpened , invertCutSegments , segmentsToChaptersOnly , timecodePlaceholder , parseTimecode , appendFfmpegCommandLog , fileDurationNonZero , mainFileMeta , seekAbs } : {
function useSegments ( { filePath , workingRef , setWorking , setProgress , videoStream , fileDuration , getRelevantTime , maxLabelLength , checkFileOpened , invertCutSegments , segmentsToChaptersOnly , timecodePlaceholder , parseTimecode , appendFfmpegCommandLog , fileDurationNonZero , mainFileMeta , seekAbs , activeVideoStreamIndex , activeAudioStreamIndexes } : {
filePath? : string | undefined ,
workingRef : MutableRefObject < boolean > ,
setWorking : ( w : { text : string , abortController? : AbortController } | undefined ) = > void ,
@ -39,6 +39,8 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
fileDurationNonZero : number ,
mainFileMeta : { formatData : FFprobeFormat } | undefined ,
seekAbs : ( val : number | undefined ) = > void ,
activeVideoStreamIndex : number | undefined ,
activeAudioStreamIndexes : Set < number > ,
} ) {
// Segment related state
const segColorCounterRef = useRef ( 0 ) ;
@ -193,8 +195,8 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
setFfmpegParametersForDialog ( dialogType , parameters ) ;
invariant ( mode === '1' || mode === '2' ) ;
invariant ( filePath != null ) ;
await detectSegments ( { name : 'blackScenes' , workingText : i18n.t ( 'Detecting black scenes' ) , errorText : i18n.t ( 'Failed to detect black scenes' ) , fn : async ( onSegmentDetected ) = > blackDetect ( { filePath , filterOptions, boundingMode : mode === '1' , onProgress : setProgress , onSegmentDetected , from : start , to : end } ) } ) ;
} , [ currentCutSegOrWholeTimeline , getFfmpegParameters , setFfmpegParametersForDialog , filePath , detectSegments , setProgress] ) ;
await detectSegments ( { name : 'blackScenes' , workingText : i18n.t ( 'Detecting black scenes' ) , errorText : i18n.t ( 'Failed to detect black scenes' ) , fn : async ( onSegmentDetected ) = > blackDetect ( { filePath , streamId: activeVideoStreamIndex , filterOptions, boundingMode : mode === '1' , onProgress : setProgress , onSegmentDetected , from : start , to : end } ) } ) ;
} , [ currentCutSegOrWholeTimeline , getFfmpegParameters , setFfmpegParametersForDialog , filePath , detectSegments , activeVideoStreamIndex, setProgress] ) ;
const detectSilentScenes = useCallback ( async ( ) = > {
const { start , end } = currentCutSegOrWholeTimeline ;
@ -205,8 +207,8 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
const { mode , . . . filterOptions } = parameters ;
invariant ( mode === '1' || mode === '2' ) ;
invariant ( filePath != null ) ;
await detectSegments ( { name : 'silentScenes' , workingText : i18n.t ( 'Detecting silent scenes' ) , errorText : i18n.t ( 'Failed to detect silent scenes' ) , fn : async ( onSegmentDetected ) = > silenceDetect ( { filePath , filterOptions, boundingMode : mode === '1' , onProgress : setProgress , onSegmentDetected , from : start , to : end } ) } ) ;
} , [ currentCutSegOrWholeTimeline, detectSegments , filePath , getFfmpegParameters , setFfmpegParametersForDialog , setProgress ] ) ;
await detectSegments ( { name : 'silentScenes' , workingText : i18n.t ( 'Detecting silent scenes' ) , errorText : i18n.t ( 'Failed to detect silent scenes' ) , fn : async ( onSegmentDetected ) = > silenceDetect ( { filePath , streamId: [ . . . activeAudioStreamIndexes ] [ 0 ] , filterOptions, boundingMode : mode === '1' , onProgress : setProgress , onSegmentDetected , from : start , to : end } ) } ) ;
} , [ activeAudioStreamIndexes, currentCutSegOrWholeTimeline, detectSegments , filePath , getFfmpegParameters , setFfmpegParametersForDialog , setProgress ] ) ;
const detectSceneChanges = useCallback ( async ( ) = > {
const { start , end } = currentCutSegOrWholeTimeline ;
@ -218,8 +220,8 @@ function useSegments({ filePath, workingRef, setWorking, setProgress, videoStrea
// eslint-disable-next-line prefer-destructuring
const minChange = parameters [ 'minChange' ] ;
invariant ( minChange != null ) ;
await detectSegments ( { name : 'sceneChanges' , workingText : i18n.t ( 'Detecting scene changes' ) , errorText : i18n.t ( 'Failed to detect scene changes' ) , fn : async ( onSegmentDetected ) = > ffmpegDetectSceneChanges ( { filePath , minChange, onProgress : setProgress , onSegmentDetected , from : start , to : end } ) } ) ;
} , [ currentCutSegOrWholeTimeline, detectSegments , filePath , getFfmpegParameters , setFfmpegParametersForDialog , setProgress ] ) ;
await detectSegments ( { name : 'sceneChanges' , workingText : i18n.t ( 'Detecting scene changes' ) , errorText : i18n.t ( 'Failed to detect scene changes' ) , fn : async ( onSegmentDetected ) = > ffmpegDetectSceneChanges ( { filePath , streamId: activeVideoStreamIndex , minChange, onProgress : setProgress , onSegmentDetected , from : start , to : end } ) } ) ;
} , [ activeVideoStreamIndex, currentCutSegOrWholeTimeline, detectSegments , filePath , getFfmpegParameters , setFfmpegParametersForDialog , setProgress ] ) ;
const createSegmentsFromKeyframes = useCallback ( async ( ) = > {
const { start , end } = currentCutSegOrWholeTimeline ;