@ -337,7 +337,7 @@ function App() {
} , [ isFileOpened ] ) ;
const {
cutSegments , cutSegmentsHistory , createSegmentsFromKeyframes , shuffleSegments , detectBlackScenes , detectSilentScenes , detectSceneChanges , removeSegment , invertAllSegments , fillSegmentsGaps , combineOverlappingSegments , combineSelectedSegments , shiftAllSegmentTimes , alignSegmentTimesToKeyframes , updateSegOrder , updateSegOrders , reorderSegsByStartTime , addSegment , setCutStart , setCutEnd , labelSegment , splitCurrentSegment , focusSegmentAtCursor , createNumSegments , createFixedDurationSegments , createFixedByteSizedSegments , createRandomSegments , haveInvalidSegs , currentSegIndexSafe , currentCutSeg , inverseCutSegments , clearSegments , clearSegColorCounter , loadCutSegments , isSegmentSelected , setCutTime , setCurrentSegIndex , labelSelectedSegments , deselectAllSegments , selectAllSegments , selectOnlyCurrentSegment , toggleCurrentSegmentSelected , invertSelectedSegments , removeSelectedSegments , setDeselectedSegmentIds , selectSegmentsByLabel , selectSegmentsByExpr , selectAllMarkers , mutateSegmentsByExpr , toggleSegmentSelected , selectOnlySegment , selectedSegments , se lectedSegmentsOrInverse, nonFilteredSe gmentsOrInverse, segmentsToExport , duplicateCurrentSegment , duplicateSegment , updateSegAtIndex , findSegmentsAtCursor , maybeCreateFullLengthSegment ,
cutSegments , cutSegmentsHistory , createSegmentsFromKeyframes , shuffleSegments , detectBlackScenes , detectSilentScenes , detectSceneChanges , removeSegment , invertAllSegments , fillSegmentsGaps , combineOverlappingSegments , combineSelectedSegments , shiftAllSegmentTimes , alignSegmentTimesToKeyframes , updateSegOrder , updateSegOrders , reorderSegsByStartTime , addSegment , setCutStart , setCutEnd , labelSegment , splitCurrentSegment , focusSegmentAtCursor , createNumSegments , createFixedDurationSegments , createFixedByteSizedSegments , createRandomSegments , haveInvalidSegs , currentSegIndexSafe , currentCutSeg , inverseCutSegments , clearSegments , clearSegColorCounter , loadCutSegments , isSegmentSelected , setCutTime , setCurrentSegIndex , labelSelectedSegments , deselectAllSegments , selectAllSegments , selectOnlyCurrentSegment , toggleCurrentSegmentSelected , invertSelectedSegments , removeSelectedSegments , setDeselectedSegmentIds , selectSegmentsByLabel , selectSegmentsByExpr , selectAllMarkers , mutateSegmentsByExpr , toggleSegmentSelected , selectOnlySegment , selectedSegments , se gmentsOrInverse, segmentsToExport , duplicateCurrentSegment , duplicateSegment , updateSegAtIndex , findSegmentsAtCursor , maybeCreateFullLengthSegment ,
} = useSegments ( { filePath , workingRef , setWorking , setProgress , videoStream : activeVideoStream , fileDuration , getRelevantTime , maxLabelLength , checkFileOpened , invertCutSegments , segmentsToChaptersOnly , timecodePlaceholder , parseTimecode , appendFfmpegCommandLog , fileDurationNonZero , mainFileMeta } ) ;
const { getEdlFilePath , projectFileSavePath , getProjectFileSavePath } = useSegmentsAutoSave ( { autoSaveProjectFile , storeProjectInWorkingDir , filePath , customOutDir , cutSegments } ) ;
@ -1045,7 +1045,7 @@ function App() {
// Special segments-to-chapters mode:
let chaptersToAdd : Chapter [ ] | undefined ;
if ( segmentsToChaptersOnly ) {
const sortedSegments = sortSegments ( se lectedSe gmentsOrInverse) ;
const sortedSegments = sortSegments ( se gmentsOrInverse. selected ) ;
if ( hasAnySegmentOverlap ( sortedSegments ) ) {
errorToast ( i18n . t ( 'Make sure you have no overlapping segments.' ) ) ;
return ;
@ -1191,7 +1191,7 @@ function App() {
setWorking ( undefined ) ;
setProgress ( undefined ) ;
}
} , [ filePath , numStreamsToCopy , segmentsToExport , haveInvalidSegs , workingRef , setWorking , segmentsToChaptersOnly , outSegTemplateOrDefault , generateOutSegFileNames , cutMultiple , outputDir , customOutDir , fileFormat , fileDuration , isRotationSet , effectiveRotation , copyFileStreams , allFilesMeta , keyframeCut , shortestFlag , ffmpegExperimental , preserveMetadata , preserveMetadataOnMerge , preserveMovData , preserveChapters , movFastStart , avoidNegativeTs , customTagsByFile , paramsByStreamId , detectedFps , willMerge , enableOverwriteOutput , exportConfirmEnabled , mainFileFormatData , mainStreams , exportExtraStreams , areWeCutting , hideAllNotifications , cleanupChoices . cleanupAfterExport , cleanupFilesWithDialog , se lectedSe gmentsOrInverse, t , mergedFileTemplateOrDefault , segmentsToChapters , invertCutSegments , generateMergedFileNames , autoConcatCutSegments , autoDeleteMergedSegments , nonCopiedExtraStreams , extractStreams , showOsNotification , handleExportFailed ] ) ;
} , [ filePath , numStreamsToCopy , segmentsToExport , haveInvalidSegs , workingRef , setWorking , segmentsToChaptersOnly , outSegTemplateOrDefault , generateOutSegFileNames , cutMultiple , outputDir , customOutDir , fileFormat , fileDuration , isRotationSet , effectiveRotation , copyFileStreams , allFilesMeta , keyframeCut , shortestFlag , ffmpegExperimental , preserveMetadata , preserveMetadataOnMerge , preserveMovData , preserveChapters , movFastStart , avoidNegativeTs , customTagsByFile , paramsByStreamId , detectedFps , willMerge , enableOverwriteOutput , exportConfirmEnabled , mainFileFormatData , mainStreams , exportExtraStreams , areWeCutting , hideAllNotifications , cleanupChoices . cleanupAfterExport , cleanupFilesWithDialog , se gmentsOrInverse, t , mergedFileTemplateOrDefault , segmentsToChapters , invertCutSegments , generateMergedFileNames , autoConcatCutSegments , autoDeleteMergedSegments , nonCopiedExtraStreams , extractStreams , showOsNotification , handleExportFailed ] ) ;
const onExportPress = useCallback ( async ( ) = > {
if ( ! filePath ) return ;
@ -2440,7 +2440,7 @@ function App() {
numStreamsToCopy = { numStreamsToCopy }
numStreamsTotal = { numStreamsTotal }
setStreamsSelectorShown = { setStreamsSelectorShown }
selectedSegments = { se lectedSe gmentsOrInverse}
selectedSegments = { se gmentsOrInverse. selected }
/ >
< div style = { { flexGrow : 1 , display : 'flex' , overflowY : 'hidden' } } >
@ -2559,7 +2559,7 @@ function App() {
toggleSegmentsList = { toggleSegmentsList }
splitCurrentSegment = { splitCurrentSegment }
isSegmentSelected = { isSegmentSelected }
selectedSegments = { se lectedSe gmentsOrInverse}
selectedSegments = { se gmentsOrInverse. selected }
onSelectSingleSegment = { selectOnlySegment }
onToggleSegmentSelected = { toggleSegmentSelected }
onDeselectAllSegments = { deselectAllSegments }
@ -2677,7 +2677,7 @@ function App() {
{ /* Dialogs */ }
< ExportConfirm areWeCutting = { areWeCutting } nonFilteredSegmentsOrInver se= { nonFilteredSe gmentsOrInverse} selectedSegments = { s electedS egmentsOrInverse} segmentsToExport = { segmentsToExport } willMerge = { willMerge } visible = { exportConfirmVisible } onClosePress = { closeExportConfirm } onExportConfirm = { onExportConfirm } renderOutFmt = { renderOutFmt } outputDir = { outputDir } numStreamsTotal = { numStreamsTotal } numStreamsToCopy = { numStreamsToCopy } onShowStreamsSelectorClick = { handleShowStreamsSelectorClick } outFormat = { fileFormat } setOutSegTemplate = { setOutSegTemplate } outSegTemplate = { outSegTemplateOrDefault } mergedFileTemplate = { mergedFileTemplateOrDefault } setMergedFileTemplate = { setMergedFileTemplate } generateOutSegFileNames = { generateOutSegFileNames } generateMergedFileNames = { generateMergedFileNames } currentSegIndexSafe = { currentSegIndexSafe } mainCopiedThumbnailStreams = { mainCopiedThumbnailStreams } needSmartCut = { needSmartCut } smartCutBitrate = { smartCutBitrate } setSmartCutBitrate = { setSmartCutBitrate } toggleSettings = { toggleSettings } outputPlaybackRate = { outputPlaybackRate } / >
< ExportConfirm areWeCutting = { areWeCutting } segmentsOrInverse= { s egmentsOrInverse} segmentsToExport = { segmentsToExport } willMerge = { willMerge } visible = { exportConfirmVisible } onClosePress = { closeExportConfirm } onExportConfirm = { onExportConfirm } renderOutFmt = { renderOutFmt } outputDir = { outputDir } numStreamsTotal = { numStreamsTotal } numStreamsToCopy = { numStreamsToCopy } onShowStreamsSelectorClick = { handleShowStreamsSelectorClick } outFormat = { fileFormat } setOutSegTemplate = { setOutSegTemplate } outSegTemplate = { outSegTemplateOrDefault } mergedFileTemplate = { mergedFileTemplateOrDefault } setMergedFileTemplate = { setMergedFileTemplate } generateOutSegFileNames = { generateOutSegFileNames } generateMergedFileNames = { generateMergedFileNames } currentSegIndexSafe = { currentSegIndexSafe } mainCopiedThumbnailStreams = { mainCopiedThumbnailStreams } needSmartCut = { needSmartCut } smartCutBitrate = { smartCutBitrate } setSmartCutBitrate = { setSmartCutBitrate } toggleSettings = { toggleSettings } outputPlaybackRate = { outputPlaybackRate } / >
< Sheet visible = { streamsSelectorShown } onClosePress = { ( ) = > setStreamsSelectorShown ( false ) } maxWidth = { 1000 } >
{ mainStreams && filePath != null && (