@ -53,7 +53,7 @@ import { captureFrameFromTag, captureFrameFfmpeg } from './capture-frame';
import {
getStreamFps , isCuttingStart , isCuttingEnd ,
readFileMeta , getSmarterOutFormat , renderThumbnails as ffmpegRenderThumbnails ,
extractStreams , runStartupCheck ,
extractStreams , runStartupCheck , setCustomFfPath as ffmpegSetCustomFfPath ,
isIphoneHevc , tryMapChaptersToEdl ,
getDuration , getTimecodeFromStreams , createChaptersFromSegments , extractSubtitleTrack ,
} from './ffmpeg' ;
@ -197,9 +197,13 @@ const App = memo(() => {
const zoomedDuration = isDurationValid ( duration ) ? duration / zoom : undefined ;
const {
captureFormat , setCaptureFormat , customOutDir , setCustomOutDir , keyframeCut , setKeyframeCut , preserveMovData , setPreserveMovData , movFastStart , setMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , simpleMode , setSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut ,
captureFormat , setCaptureFormat , customOutDir , setCustomOutDir , keyframeCut , setKeyframeCut , preserveMovData , setPreserveMovData , movFastStart , setMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , simpleMode , setSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut , customFfPath , setCustomFfPath ,
} = useUserSettingsRoot ( ) ;
useEffect ( ( ) => {
ffmpegSetCustomFfPath ( customFfPath ) ;
} , [ customFfPath ] ) ;
const {
concatFiles , html5ifyDummy , cutMultiple , autoConcatCutSegments , html5ify , fixInvalidDuration ,
} = useFfmpegOperations ( { filePath , enableTransferTimestamps } ) ;
@ -741,8 +745,8 @@ const App = memo(() => {
} ) , [ hideAllNotifications , setSimpleMode ] ) ;
const userSettingsContext = useMemo ( ( ) => ( {
captureFormat , setCaptureFormat , toggleCaptureFormat , customOutDir , setCustomOutDir , changeOutDir , keyframeCut , setKeyframeCut , toggleKeyframeCut , preserveMovData , setPreserveMovData , togglePreserveMovData , movFastStart , setMovFastStart , toggleMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , toggleExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , toggleSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , togglePreserveMetadataOnMerge , simpleMode , setSimpleMode , toggleSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , toggleSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut ,
} ) , [ askBeforeClose , autoDeleteMergedSegments , autoExportExtraStreams , autoLoadTimecode , autoMerge , autoSaveProjectFile , avoidNegativeTs , captureFormat , changeOutDir , custom OutDir, enableAskForFileOpenAction , enableAskForImportChapters , enableAutoHtml5ify , enableSmartCut , enableTransferTimestamps , exportConfirmEnabled , ffmpegExperimental , hideNotifications , invertCutSegments , invertTimelineScroll , keyBindings , keyboardNormalSeekSpeed , keyboardSeekAccFactor , keyframeCut , language , movFastStart , outFormatLocked , outSegTemplate , playbackVolume , preserveMetadataOnMerge , preserveMovData , resetKeyBindings , safeOutputFileName , segmentsToChapters , segmentsToChaptersOnly , setAskBeforeClose , setAutoDeleteMergedSegments , setAutoExportExtraStreams , setAutoLoadTimecode , setAutoMerge , setAutoSaveProjectFile , setAvoidNegativeTs , setCaptureFormat , setCustomOutDir , setEnableAskForFileOpenAction , setEnableAskForImportChapters , setEnableAutoHtml5ify , setEnableSmartCut , setEnableTransferTimestamps , setExportConfirmEnabled , setFfmpegExperimental , setHideNotifications , setInvertCutSegments , setInvertTimelineScroll , setKeyBindings , setKeyboardNormalSeekSpeed , setKeyboardSeekAccFactor , setKeyframeCut , setLanguage , setMovFastStart , setOutFormatLocked , setOutSegTemplate , setPlaybackVolume , setPreserveMetadataOnMerge , setPreserveMovData , setSafeOutputFileName , setSegmentsToChapters , setSegmentsToChaptersOnly , setSimpleMode , setTimecodeFormat , setWheelSensitivity , simpleMode , timecodeFormat , toggleCaptureFormat , toggleExportConfirmEnabled , toggleKeyframeCut , toggleMovFastStart , togglePreserveMetadataOnMerge , togglePreserveMovData , toggleSafeOutputFileName , toggleSegmentsToChapters , toggleSimpleMode , wheelSensitivity ] ) ;
captureFormat , setCaptureFormat , toggleCaptureFormat , customOutDir , setCustomOutDir , changeOutDir , keyframeCut , setKeyframeCut , toggleKeyframeCut , preserveMovData , setPreserveMovData , togglePreserveMovData , movFastStart , setMovFastStart , toggleMovFastStart , avoidNegativeTs , setAvoidNegativeTs , autoMerge , setAutoMerge , timecodeFormat , setTimecodeFormat , invertCutSegments , setInvertCutSegments , autoExportExtraStreams , setAutoExportExtraStreams , askBeforeClose , setAskBeforeClose , enableAskForImportChapters , setEnableAskForImportChapters , enableAskForFileOpenAction , setEnableAskForFileOpenAction , playbackVolume , setPlaybackVolume , autoSaveProjectFile , setAutoSaveProjectFile , wheelSensitivity , setWheelSensitivity , invertTimelineScroll , setInvertTimelineScroll , language , setLanguage , ffmpegExperimental , setFfmpegExperimental , hideNotifications , setHideNotifications , autoLoadTimecode , setAutoLoadTimecode , autoDeleteMergedSegments , setAutoDeleteMergedSegments , exportConfirmEnabled , setExportConfirmEnabled , toggleExportConfirmEnabled , segmentsToChapters , setSegmentsToChapters , toggleSegmentsToChapters , preserveMetadataOnMerge , setPreserveMetadataOnMerge , togglePreserveMetadataOnMerge , simpleMode , setSimpleMode , toggleSimpleMode , outSegTemplate , setOutSegTemplate , keyboardSeekAccFactor , setKeyboardSeekAccFactor , keyboardNormalSeekSpeed , setKeyboardNormalSeekSpeed , enableTransferTimestamps , setEnableTransferTimestamps , outFormatLocked , setOutFormatLocked , safeOutputFileName , setSafeOutputFileName , toggleSafeOutputFileName , enableAutoHtml5ify , setEnableAutoHtml5ify , segmentsToChaptersOnly , setSegmentsToChaptersOnly , keyBindings , setKeyBindings , resetKeyBindings , enableSmartCut , setEnableSmartCut , customFfPath , setCustomFfPath ,
} ) , [ askBeforeClose , autoDeleteMergedSegments , autoExportExtraStreams , autoLoadTimecode , autoMerge , autoSaveProjectFile , avoidNegativeTs , captureFormat , changeOutDir , custom FfPath, custom OutDir, enableAskForFileOpenAction , enableAskForImportChapters , enableAutoHtml5ify , enableSmartCut , enableTransferTimestamps , exportConfirmEnabled , ffmpegExperimental , hideNotifications , invertCutSegments , invertTimelineScroll , keyBindings , keyboardNormalSeekSpeed , keyboardSeekAccFactor , keyframeCut , language , movFastStart , outFormatLocked , outSegTemplate , playbackVolume , preserveMetadataOnMerge , preserveMovData , resetKeyBindings , safeOutputFileName , segmentsToChapters , segmentsToChaptersOnly , setAskBeforeClose , setAutoDeleteMergedSegments , setAutoExportExtraStreams , setAutoLoadTimecode , setAutoMerge , setAutoSaveProjectFile , setAvoidNegativeTs , setCaptureFormat , setCustomFfPath , setCustomOutDir , setEnableAskForFileOpenAction , setEnableAskForImportChapters , setEnableAutoHtml5ify , setEnableSmartCut , setEnableTransferTimestamps , setExportConfirmEnabled , setFfmpegExperimental , setHideNotifications , setInvertCutSegments , setInvertTimelineScroll , setKeyBindings , setKeyboardNormalSeekSpeed , setKeyboardSeekAccFactor , setKeyframeCut , setLanguage , setMovFastStart , setOutFormatLocked , setOutSegTemplate , setPlaybackVolume , setPreserveMetadataOnMerge , setPreserveMovData , setSafeOutputFileName , setSegmentsToChapters , setSegmentsToChaptersOnly , setSimpleMode , setTimecodeFormat , setWheelSensitivity , simpleMode , timecodeFormat , toggleCaptureFormat , toggleExportConfirmEnabled , toggleKeyframeCut , toggleMovFastStart , togglePreserveMetadataOnMerge , togglePreserveMovData , toggleSafeOutputFileName , toggleSegmentsToChapters , toggleSimpleMode , wheelSensitivity ] ) ;
const isCopyingStreamId = useCallback ( ( path , streamId ) => (
! ! ( copyStreamIdsByFile [ path ] || { } ) [ streamId ]
@ -2124,9 +2128,10 @@ const App = memo(() => {
if ( ! isStoreBuild ) loadMifiLink ( ) . then ( setMifiLink ) ;
} , [ ] ) ;
const haveCustomFfPath = ! ! customFfPath ;
useEffect ( ( ) => {
runStartupCheck ( ) . catch ( ( err ) => handleError ( 'LosslessCut is installation is broken' , err ) ) ;
} , [ ] ) ;
if ( ! haveCustomFfPath ) runStartupCheck ( ) . catch ( ( err ) => handleError ( 'LosslessCut is installation is broken' , err ) ) ;
} , [ haveCustomFfPath ] ) ;
useEffect ( ( ) => {
const keyScrollPreventer = ( e ) => {