kopia lustrzana https://github.com/mifi/lossless-cut
140 wiersze
6.7 KiB
TypeScript
140 wiersze
6.7 KiB
TypeScript
export type KeyboardAction = 'addSegment' | 'togglePlayResetSpeed' | 'togglePlayNoResetSpeed' | 'reducePlaybackRate' | 'reducePlaybackRateMore' | 'increasePlaybackRate' | 'increasePlaybackRateMore' | 'timelineToggleComfortZoom' | 'seekPreviousFrame' | 'seekNextFrame' | 'captureSnapshot' | 'setCutStart' | 'setCutEnd' | 'removeCurrentSegment' | 'cleanupFilesDialog' | 'splitCurrentSegment' | 'focusSegmentAtCursor' | 'increaseRotation' | 'goToTimecode' | 'seekBackwards' | 'seekBackwards2' | 'seekBackwards3' | 'seekBackwardsPercent' | 'seekBackwardsPercent' | 'seekBackwardsKeyframe' | 'jumpCutStart' | 'seekForwards' | 'seekForwards2' | 'seekForwards3' | 'seekForwardsPercent' | 'seekForwardsPercent' | 'seekForwardsKeyframe' | 'jumpCutEnd' | 'jumpTimelineStart' | 'jumpTimelineEnd' | 'jumpFirstSegment' | 'jumpPrevSegment' | 'timelineZoomIn' | 'timelineZoomIn' | 'batchPreviousFile' | 'jumpLastSegment' | 'jumpNextSegment' | 'timelineZoomOut' | 'timelineZoomOut' | 'batchNextFile' | 'batchOpenSelectedFile' | 'batchOpenPreviousFile' | 'batchOpenNextFile' | 'undo' | 'undo' | 'redo' | 'redo' | 'copySegmentsToClipboard' | 'copySegmentsToClipboard' | 'toggleFullscreenVideo' | 'labelCurrentSegment' | 'export' | 'toggleKeyboardShortcuts' | 'closeActiveScreen' | 'increaseVolume' | 'decreaseVolume' | 'toggleMuted' | 'detectBlackScenes' | 'detectSilentScenes' | 'detectSceneChanges' | 'toggleLastCommands' | 'play' | 'pause' | 'reloadFile' | 'html5ify' | 'togglePlayOnlyCurrentSegment' | 'toggleLoopOnlyCurrentSegment' | 'toggleLoopStartEndOnlyCurrentSegment' | 'toggleLoopSelectedSegments' | 'editCurrentSegmentTags' | 'duplicateCurrentSegment' | 'reorderSegsByStartTime' | 'invertAllSegments' | 'fillSegmentsGaps' | 'shiftAllSegmentTimes' | 'alignSegmentTimesToKeyframes' | 'createSegmentsFromKeyframes' | 'createFixedDurationSegments' | 'createNumSegments' | 'createRandomSegments' | 'shuffleSegments' | 'combineOverlappingSegments' | 'combineSelectedSegments' | 'clearSegments' | 'toggleSegmentsList' | 'selectOnlyCurrentSegment' | 'deselectAllSegments' | 'selectAllSegments' | 'toggleCurrentSegmentSelected' | 'invertSelectedSegments' | 'removeSelectedSegments' | 'toggleStreamsSelector' | 'extractAllStreams' | 'showStreamsSelector' | 'showIncludeExternalStreamsDialog' | 'captureSnapshotAsCoverArt' | 'extractCurrentSegmentFramesAsImages' | 'extractSelectedSegmentsFramesAsImages' | 'convertFormatBatch' | 'convertFormatCurrentFile' | 'fixInvalidDuration' | 'closeBatch' | 'concatBatch' | 'toggleKeyframeCutMode' | 'toggleCaptureFormat' | 'toggleStripAudio' | 'toggleStripThumbnail' | 'setStartTimeOffset' | 'toggleWaveformMode' | 'toggleShowThumbnails' | 'toggleShowKeyframes' | 'toggleSettings' | 'openSendReportDialog' | 'openFilesDialog' | 'openDirDialog' | 'exportYouTube' | 'closeCurrentFile' | 'quit';
|
||
|
||
export interface KeyBinding {
|
||
keys: string,
|
||
action: KeyboardAction,
|
||
}
|
||
|
||
export type CaptureFormat = 'jpeg' | 'png' | 'webp';
|
||
|
||
// https://www.electronjs.org/docs/api/locales
|
||
// See i18n.js
|
||
export const langNames = {
|
||
en: 'English',
|
||
cs: 'Čeština',
|
||
de: 'Deutsch',
|
||
es: 'Español',
|
||
fr: 'Français',
|
||
it: 'Italiano',
|
||
nl: 'Nederlands',
|
||
nb: 'Norsk (bokmål)',
|
||
nn: 'Norsk (nynorsk)',
|
||
pl: 'Polski',
|
||
pt: 'Português',
|
||
pt_BR: 'Português do Brasil',
|
||
sl: 'Slovenščina',
|
||
sk: 'slovenčina',
|
||
fi: 'Suomi',
|
||
ru: 'Русский',
|
||
// sr: 'Cрпски',
|
||
tr: 'Türkçe',
|
||
vi: 'Tiếng Việt',
|
||
ja: '日本語',
|
||
zh: '中文',
|
||
zh_Hant: '繁體中文',
|
||
zh_Hans: '简体中文',
|
||
ko: '한국어',
|
||
};
|
||
|
||
export type LanguageKey = keyof typeof langNames;
|
||
|
||
export type TimecodeFormat = 'timecodeWithDecimalFraction' | 'frameCount' | 'timecodeWithFramesFraction';
|
||
|
||
export type AvoidNegativeTs = 'make_zero' | 'auto' | 'make_non_negative' | 'disabled';
|
||
|
||
export type ModifierKey = 'ctrl' | 'shift' | 'alt' | 'meta';
|
||
|
||
export type PreserveMetadata = 'default' | 'nonglobal' | 'none'
|
||
|
||
|
||
export interface Config {
|
||
captureFormat: CaptureFormat,
|
||
customOutDir: string | undefined,
|
||
keyframeCut: boolean,
|
||
autoMerge: boolean,
|
||
autoDeleteMergedSegments: boolean,
|
||
segmentsToChaptersOnly: boolean,
|
||
enableSmartCut: boolean,
|
||
timecodeFormat: TimecodeFormat,
|
||
invertCutSegments: boolean,
|
||
autoExportExtraStreams: boolean,
|
||
exportConfirmEnabled: boolean,
|
||
askBeforeClose: boolean,
|
||
enableAskForImportChapters: boolean,
|
||
enableAskForFileOpenAction: boolean,
|
||
playbackVolume: number,
|
||
autoSaveProjectFile: boolean,
|
||
wheelSensitivity: number,
|
||
language: LanguageKey | undefined,
|
||
ffmpegExperimental: boolean,
|
||
preserveChapters: boolean,
|
||
preserveMetadata: PreserveMetadata,
|
||
preserveMetadataOnMerge: boolean,
|
||
preserveMovData: boolean,
|
||
movFastStart: boolean,
|
||
avoidNegativeTs: AvoidNegativeTs,
|
||
hideNotifications: 'all' | undefined,
|
||
hideOsNotifications: 'all' | undefined,
|
||
autoLoadTimecode: boolean,
|
||
segmentsToChapters: boolean,
|
||
simpleMode: boolean,
|
||
outSegTemplate: string | undefined,
|
||
mergedFileTemplate: string | undefined,
|
||
keyboardSeekAccFactor: number,
|
||
keyboardNormalSeekSpeed: number,
|
||
keyboardSeekSpeed2: number,
|
||
keyboardSeekSpeed3: number,
|
||
treatInputFileModifiedTimeAsStart: boolean,
|
||
treatOutputFileModifiedTimeAsStart: boolean | undefined | null,
|
||
outFormatLocked: string | undefined,
|
||
safeOutputFileName: boolean,
|
||
windowBounds: { x: number, y: number, width: number, height: number } | undefined,
|
||
storeWindowBounds: boolean,
|
||
enableAutoHtml5ify: boolean,
|
||
keyBindings: KeyBinding[],
|
||
customFfPath: string | undefined,
|
||
storeProjectInWorkingDir: boolean,
|
||
enableOverwriteOutput: boolean,
|
||
mouseWheelZoomModifierKey: ModifierKey,
|
||
mouseWheelFrameSeekModifierKey: ModifierKey,
|
||
mouseWheelKeyframeSeekModifierKey: ModifierKey,
|
||
captureFrameMethod: 'videotag' | 'ffmpeg',
|
||
captureFrameQuality: number,
|
||
captureFrameFileNameFormat: 'timestamp' | 'index',
|
||
enableNativeHevc: boolean,
|
||
enableUpdateCheck: boolean,
|
||
cleanupChoices: {
|
||
trashTmpFiles: boolean, askForCleanup: boolean, closeFile: boolean, cleanupAfterExport?: boolean | undefined,
|
||
},
|
||
allowMultipleInstances: boolean,
|
||
darkMode: boolean,
|
||
preferStrongColors: boolean,
|
||
outputFileNameMinZeroPadding: number,
|
||
cutFromAdjustmentFrames: number,
|
||
cutToAdjustmentFrames: number,
|
||
invertTimelineScroll: boolean | undefined,
|
||
}
|
||
|
||
export interface Waveform {
|
||
buffer: Buffer,
|
||
}
|
||
|
||
export interface ApiActionRequest {
|
||
id: number
|
||
action: string
|
||
args?: unknown[] | undefined,
|
||
}
|
||
|
||
export type Html5ifyMode = 'fastest' | 'fast-audio-remux' | 'fast-audio' | 'fast' | 'slow' | 'slow-audio' | 'slowest';
|
||
|
||
export type WaveformMode = 'big-waveform' | 'waveform';
|
||
|
||
// This is the contract with the user, see https://github.com/mifi/lossless-cut/blob/master/expressions.md
|
||
export interface ScopeSegment {
|
||
label: string,
|
||
start: number,
|
||
end: number,
|
||
duration: number,
|
||
tags: Record<string, string>,
|
||
}
|