diff --git a/LanguageBaseEnglish.xml b/LanguageBaseEnglish.xml index 699b10626..b7a0591e3 100644 --- a/LanguageBaseEnglish.xml +++ b/LanguageBaseEnglish.xml @@ -2692,6 +2692,8 @@ can edit in same subtitle file (collaboration) Go to previous shot change Go to next shot change Toggle shot change + Move all shot changes one frame forward + Move all shot changes one frame back Remove/export shot changes Auto adjust start via volume/shot change One frame back diff --git a/src/libse/Settings/Settings.cs b/src/libse/Settings/Settings.cs index f191d55b3..483f8b5ef 100644 --- a/src/libse/Settings/Settings.cs +++ b/src/libse/Settings/Settings.cs @@ -8466,6 +8466,18 @@ namespace Nikse.SubtitleEdit.Core.Settings shortcuts.WaveformToggleShotChange = subNode.InnerText; } + subNode = node.SelectSingleNode("WaveformAllShotChangesOneFrameForward"); + if (subNode != null) + { + shortcuts.WaveformAllShotChangesOneFrameForward = subNode.InnerText; + } + + subNode = node.SelectSingleNode("WaveformAllShotChangesOneFrameBack"); + if (subNode != null) + { + shortcuts.WaveformAllShotChangesOneFrameBack = subNode.InnerText; + } + subNode = node.SelectSingleNode("WaveformListShotChanges"); if (subNode != null) { @@ -10222,6 +10234,8 @@ namespace Nikse.SubtitleEdit.Core.Settings textWriter.WriteElementString("WaveformGoToPreviousShotChange", shortcuts.WaveformGoToPreviousShotChange); textWriter.WriteElementString("WaveformGoToNextShotChange", shortcuts.WaveformGoToNextShotChange); textWriter.WriteElementString("WaveformToggleShotChange", shortcuts.WaveformToggleShotChange); + textWriter.WriteElementString("WaveformAllShotChangesOneFrameForward", shortcuts.WaveformAllShotChangesOneFrameForward); + textWriter.WriteElementString("WaveformAllShotChangesOneFrameBack", shortcuts.WaveformAllShotChangesOneFrameBack); textWriter.WriteElementString("WaveformListShotChanges", shortcuts.WaveformListShotChanges); textWriter.WriteElementString("WaveformGuessStart", shortcuts.WaveformGuessStart); textWriter.WriteElementString("Waveform100MsLeft", shortcuts.Waveform100MsLeft); diff --git a/src/libse/Settings/Shortcuts.cs b/src/libse/Settings/Shortcuts.cs index 184cd1d48..b3b543717 100644 --- a/src/libse/Settings/Shortcuts.cs +++ b/src/libse/Settings/Shortcuts.cs @@ -390,6 +390,8 @@ namespace Nikse.SubtitleEdit.Core.Settings public string WaveformGoToPreviousShotChange { get; set; } public string WaveformGoToNextShotChange { get; set; } public string WaveformToggleShotChange { get; set; } + public string WaveformAllShotChangesOneFrameForward { get; set; } + public string WaveformAllShotChangesOneFrameBack { get; set; } public string WaveformListShotChanges { get; set; } public string WaveformGuessStart { get; set; } public string Waveform100MsLeft { get; set; } diff --git a/src/ui/Forms/Main.cs b/src/ui/Forms/Main.cs index e65d0697a..b7a76dd26 100644 --- a/src/ui/Forms/Main.cs +++ b/src/ui/Forms/Main.cs @@ -18568,6 +18568,28 @@ namespace Nikse.SubtitleEdit.Forms e.SuppressKeyPress = true; } + else if (audioVisualizer.ShotChanges != null && mediaPlayer.IsPaused && e.KeyData == _shortcuts.WaveformAllShotChangesOneFrameForward) + { + var frameMs = (double)Math.Round(1000.0 / CurrentFrameRate); + for (var i = 0; i < audioVisualizer.ShotChanges.Count; i++) + { + audioVisualizer.ShotChanges[i] += (frameMs / 1000.0); + } + + ShotChangeHelper.SaveShotChanges(_videoFileName, audioVisualizer.ShotChanges); + e.SuppressKeyPress = true; + } + else if (audioVisualizer.ShotChanges != null && mediaPlayer.IsPaused && e.KeyData == _shortcuts.WaveformAllShotChangesOneFrameBack) + { + var frameMs = (double)Math.Round(1000.0 / CurrentFrameRate); + for (var i = 0; i < audioVisualizer.ShotChanges.Count; i++) + { + audioVisualizer.ShotChanges[i] -= (frameMs / 1000.0); + } + + ShotChangeHelper.SaveShotChanges(_videoFileName, audioVisualizer.ShotChanges); + e.SuppressKeyPress = true; + } else if (audioVisualizer.ShotChanges != null && mediaPlayer.IsPaused && e.KeyData == _shortcuts.WaveformGuessStart) { AutoGuessStartTime(_subtitleListViewIndex); diff --git a/src/ui/Forms/Options/Settings.cs b/src/ui/Forms/Options/Settings.cs index dadbc4366..161a16419 100644 --- a/src/ui/Forms/Options/Settings.cs +++ b/src/ui/Forms/Options/Settings.cs @@ -1927,6 +1927,8 @@ namespace Nikse.SubtitleEdit.Forms.Options AddNode(audioVisualizerNode, LanguageSettings.Current.Main.VideoControls.InsertNewSubtitleAtVideoPosition, nameof(Configuration.Settings.Shortcuts.MainWaveformInsertAtCurrentPosition)); AddNode(audioVisualizerNode, language.WaveformGoToPreviousShotChange, nameof(Configuration.Settings.Shortcuts.WaveformGoToPreviousShotChange)); AddNode(audioVisualizerNode, language.WaveformGoToNextShotChange, nameof(Configuration.Settings.Shortcuts.WaveformGoToNextShotChange)); + AddNode(audioVisualizerNode, language.WaveformAllShotChangesOneFrameBack, nameof(Configuration.Settings.Shortcuts.WaveformAllShotChangesOneFrameBack)); + AddNode(audioVisualizerNode, language.WaveformAllShotChangesOneFrameForward, nameof(Configuration.Settings.Shortcuts.WaveformAllShotChangesOneFrameForward)); AddNode(audioVisualizerNode, language.WaveformToggleShotChange, nameof(Configuration.Settings.Shortcuts.WaveformToggleShotChange)); AddNode(audioVisualizerNode, language.WaveformRemoveOrExportShotChanges, nameof(Configuration.Settings.Shortcuts.WaveformListShotChanges), true); AddNode(audioVisualizerNode, language.WaveformGuessStart, nameof(Configuration.Settings.Shortcuts.WaveformGuessStart)); diff --git a/src/ui/Logic/Language.cs b/src/ui/Logic/Language.cs index 665654afa..064db57d3 100644 --- a/src/ui/Logic/Language.cs +++ b/src/ui/Logic/Language.cs @@ -3062,6 +3062,8 @@ can edit in same subtitle file (collaboration)", WaveformGoToPreviousShotChange = "Go to previous shot change", WaveformGoToNextShotChange = "Go to next shot change", WaveformToggleShotChange = "Toggle shot change", + WaveformAllShotChangesOneFrameForward = "Move all shot changes one frame forward", + WaveformAllShotChangesOneFrameBack = "Move all shot changes one frame back", WaveformRemoveOrExportShotChanges = "Remove/export shot changes", WaveformGuessStart = "Auto adjust start via volume/shot change", GoBack1Frame = "One frame back", diff --git a/src/ui/Logic/LanguageDeserializer.cs b/src/ui/Logic/LanguageDeserializer.cs index 7c661a053..5362b4996 100644 --- a/src/ui/Logic/LanguageDeserializer.cs +++ b/src/ui/Logic/LanguageDeserializer.cs @@ -7372,6 +7372,12 @@ namespace Nikse.SubtitleEdit.Logic case "Settings/WaveformToggleShotChange": language.Settings.WaveformToggleShotChange = reader.Value; break; + case "Settings/WaveformAllShotChangesOneFrameForward": + language.Settings.WaveformAllShotChangesOneFrameForward = reader.Value; + break; + case "Settings/WaveformAllShotChangesOneFrameBack": + language.Settings.WaveformAllShotChangesOneFrameBack = reader.Value; + break; case "Settings/WaveformRemoveOrExportShotChanges": language.Settings.WaveformRemoveOrExportShotChanges = reader.Value; break; diff --git a/src/ui/Logic/LanguageStructure.cs b/src/ui/Logic/LanguageStructure.cs index b4d3e7761..080c9c420 100644 --- a/src/ui/Logic/LanguageStructure.cs +++ b/src/ui/Logic/LanguageStructure.cs @@ -2870,6 +2870,8 @@ public string WaveformGoToPreviousShotChange { get; set; } public string WaveformGoToNextShotChange { get; set; } public string WaveformToggleShotChange { get; set; } + public string WaveformAllShotChangesOneFrameForward { get; set; } + public string WaveformAllShotChangesOneFrameBack { get; set; } public string WaveformRemoveOrExportShotChanges { get; set; } public string WaveformGuessStart { get; set; } public string GoBack1Frame { get; set; } diff --git a/src/ui/Logic/MainShortcuts.cs b/src/ui/Logic/MainShortcuts.cs index 1baffe36e..1363c9901 100644 --- a/src/ui/Logic/MainShortcuts.cs +++ b/src/ui/Logic/MainShortcuts.cs @@ -270,6 +270,8 @@ namespace Nikse.SubtitleEdit.Logic public Keys WaveformGoToPreviousShotChange { get; set; } public Keys WaveformGoToNextShotChange { get; set; } public Keys WaveformToggleShotChange { get; set; } + public Keys WaveformAllShotChangesOneFrameForward { get; set; } + public Keys WaveformAllShotChangesOneFrameBack { get; set; } public Keys WaveformListShotChanges { get; set; } public Keys WaveformGuessStart { get; set; } public Keys WaveformAudioToTextVosk { get; set; } @@ -549,6 +551,8 @@ namespace Nikse.SubtitleEdit.Logic WaveformSetParagraphAsNewSelection = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformSetParagraphAsSelection); WaveformGoToPreviousShotChange = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformGoToPreviousShotChange); WaveformGoToNextShotChange = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformGoToNextShotChange); + WaveformAllShotChangesOneFrameForward = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformAllShotChangesOneFrameForward); + WaveformAllShotChangesOneFrameBack = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformAllShotChangesOneFrameBack); WaveformToggleShotChange = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformToggleShotChange); WaveformListShotChanges = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformListShotChanges); WaveformGuessStart = UiUtil.GetKeys(Configuration.Settings.Shortcuts.WaveformGuessStart);