Is there any Windows-based media player software that allows you to pause a video, and then un-pause a few seconds earlier?

106

Solution 1

I suggest a player agnostic solution: Install: AutoHotkey (freeware)

Example for Windows Media Player Define Space to be a macro for Ctrl+P and

 ;AutoHotkey Pause + Left Macro Example

 Space::
 Send ^p{Left}

To use it, enable the macro and set the focus (= click once) on Media Player's time scrollbar. This way while playing something you press Space and it pauses and goes back a few seconds. To continue press Space again and it continues and goes back a few more seconds.

Warning: Don't forget to disable the macro when not using that feature or it will drive you nuts ;)

AutoHotkey has a powerful macro language. If you can do a little programming you may even build something like a simplified remote control for your player by changing window focus and such things.

Solution 2

You can do it with VLC.

Combinations of CTRL, SHIFT, ALT and Left arrow will jump backwards - replace with right arrow to jump forwards.

If you look in the VLC preferences window, under hotkeys, you can see which key-combination does which jump.

Solution 3

If you are an advanced user (or know someone) and your computer has a microphone, then you might be able to use Windows Speech Recognition Macros :

The Windows Speech Recognition Macros tool or WSR Macros for short extends the usefulness of the speech recognition capabilities in Windows Vista.

Users can create powerful macros that are triggered by spoken commands which can perform a series of tasks from as simple as inserting your mailing address to as complex as providing a completely different speech interaction with applications.

Please note that most Bluetooth microphones do not function well with Windows Speech Recognition due to limited audio bandwidth.

So in theory, by using nothing else than one's voice, one should be able to program a speech-activated macro that will send keyboard commands to the player to pause, rewind and unpause. Most players support a keyboard interface.

The download is available from here, some archived macros are available here, and a forum here.

From the large availability of related material on the Internet, I would say that the technology does work. However, I have never tried it, so cannot testify for its efficiency.

Solution 4

Daum PotPlayer, or The KMPlayer. Both can do this. Just hit the left arrow key to jump back(5 seconds is default but you can change this.) http://filehippo.com/download_kmplayer/ You can search around for the PotPlayer.

Share:
106

Related videos on Youtube

Brian Var
Author by

Brian Var

Updated on September 18, 2022

Comments

  • Brian Var
    Brian Var almost 2 years

    I'm following an MVVM pattern for my application and to prevent memory leaks, I need to cut down the number of object instances to one. This object instance should then be handed of to the other classes where needed.

    In my current implementation the instance is being set up in the AppVM, and passed to the AdductionAbductionFlexionViewModel. But from doing a search for the MyoDeviceModle() instance, a second instance is shown here in the AdductionAbductionFlexionView.

    My question is how can I set up the constructor in the AdductionAbductionFlexionView to take the _connectedDevice instance that's being used throughout the app?

    This is the AppVM showing the main and only instance that should be used:

    private MyoDeviceModel _connectedDevice;
    
            #endregion
    
            /// <summary>
            /// Initializes a new instance of the <see cref="ApplicationViewModel"/> class.
            /// </summary>
            public ApplicationViewModel()
            {
                _connectedDevice = new MyoDeviceModel();
                // Add available pages
                PageViewModels.Add(new HomeViewModel(new UserLoginModel()));
                PageViewModels.Add(new AdductionAbductionFlexionViewModel(_connectedDevice, new DatabaseModel()));
    
    
                // Set starting page
                CurrentPageViewModel = PageViewModels[0];
            }
    

    And this is how its passed to the AdductionAbductionFlexionViewModel:

    private MyoDeviceModel _myoDevice; private DatabaseModel _dataObj;

    public event Action<string> DataChanged;
    
    private string _itemString;
    
    
    /// <summary>
    /// Initializes a new instance of the <see cref="AdductionAbductionFlexionViewModel"/> class.
    /// </summary>
    /// <param name="Myodevice">The device.</param>
    /// <param name="progressData">The progress data.</param>
    public AdductionAbductionFlexionViewModel(MyoDeviceModel Myodevice, DatabaseModel progressData)
    {
    
        DataSubmitCommand = new RelayCommand (this.SaveChangesToPersistence);
        CalibrationSetCommand = new RelayCommand(this.CallibratePitchMinimumCall);
        DatabaseSearchCommand = new RelayCommand(this.QueryDataFromPersistence);
    
        _myoDevice = Myodevice;
        _myoDevice.MyoDeviceStart();
    
        _dataObj = progressData;
    
        _myoDevice.StatusUpdated += (update) =>
        {
            CurrentStatus = update;   
        };
    
    
        _myoDevice.PoseUpdated += (update) =>
        {
            PoseStatus = update;   
        };
    
    
        _myoDevice.PainfulArcDegreeUpdated += (update) =>
        {
            PainfulArcStatus = update;
        };
    
    
        _myoDevice.DegreesUpdated += (update) =>
        {
            DegreeStatus = update;
        };
    
        _myoDevice.StartDegreeUpdated += (update) =>
        {
            StartDegreeStatus = update;    
        };
    
        _myoDevice.EndDegreeUpdated += (update) =>
        {
            EndDegreeStatus = update;    
        };
    
    
    }
    

    But I'm wondering how I can pass the _connectedDevice instance instead of new MyoDeviceModel()

            public AdductionAbductionFlexionView()
            {
                InitializeComponent();
                this.DataContext = new AdductionAbductionFlexionViewModel(new MyoDeviceModel(), new DatabaseModel()); 
                this.Loaded += AdductionAbductionFlexionView_Loaded;
                this.Loaded -= AdductionAbductionFlexionView_Loaded;
    
                ((AdductionAbductionFlexionViewModel)DataContext).DataChanged += x =>
                {
    
                    new ToastPopUp("Submit Succeeded!", "Progress data submitted succesfully", NotificationType.Information)
                    {
                        Background = new LinearGradientBrush(System.Windows.Media.Color.FromRgb(0, 189, 222), System.Windows.Media.Color.FromArgb(255, 10, 13, 248), 90),
                        BorderBrush = new SolidColorBrush(System.Windows.Media.Color.FromRgb(0, 189, 222)),
                        FontColor = new SolidColorBrush(System.Windows.Media.Color.FromRgb(255, 255, 255))
                    }.Show();
    
                };
    
            }
    
    • faljbour
      faljbour over 9 years
      why do you say that is a second instance since you are passing the instance in the constructor of AdductionAbductionFlexionViewModel, it seems to me you are using one instance.
    • Brian Var
      Brian Var over 9 years
      I forgot to rename, these are two separate instances. I want to remove the _myoDeviceSecondObj and only reference the instance from the AppVM which is _myoDevice
    • faljbour
      faljbour over 9 years
      that is still the same, you code is fine, you are using one instance since you passing it in the constructor of AdductionAbductionFlexionViewModel. You do not need to change anything. Unless I am missing something
    • Peter Duniho
      Peter Duniho over 9 years
      It's not clear what doesn't work in your code example. Also, you haven't provided a good, minimal, complete code example to illustrate the problem. Please read that link, as well as stackoverflow.com/help/how-to-ask for advice on how to present your question in a clearer, useful way.
    • Brian Var
      Brian Var over 9 years
      @PeterDuniho edited the question for better clarity.
  • slhck
    slhck about 13 years
    Could you elaborate on this? How exactly will VLC let him do that?
  • Joe Schmoe
    Joe Schmoe about 13 years
    I've got VLC installed. Can you tell how you do it?
  • Kevin M
    Kevin M about 13 years
    -1: I've had VLC for a long time now and I don't think it can do this.
  • Joe Schmoe
    Joe Schmoe about 13 years
    So can this be set up to rewind automatically on unpause? While cooking, my hands are usually quite messy so minimizing keyboard contact is a must
  • Joe Schmoe
    Joe Schmoe about 13 years
    Ideally, because my hands are messy while cooking, I want to minimize keyboard contact hence the reason I would like it to rewind automatically on unpause
  • Joe Schmoe
    Joe Schmoe about 13 years
    Normally, I use the keyboard. I'll give that suggestion a try
  • Joe Schmoe
    Joe Schmoe about 13 years
    Unfortunately, while you can apparently bind both keys to the same hotkey, it appears that only the play/pause hotkey is fired off
  • Rhys
    Rhys about 13 years
    I don't know of any way to do it by default but you could certainly make an autohotkey script to execute: Space, Shift+Left. You could assign it to your spacebar.
  • ntw1103
    ntw1103 about 13 years
    When you hit the left arrow key to jump back, it doesn't pause at all, it just jumps back and continues to play. if you want to pause it you can hit space. (all of the keys are configurable)
  • ntw1103
    ntw1103 about 13 years
    To do what you are trying to do, ctrl + left will jump you back 30 seconds. If this is too hard, you can set it to another key: once The KMPlayer is open, hit F2 in the tree view on the left select General, then Keys/Global Control In the tree view in the center, under playback select & Jump(to) click 30 sec. Backward click on the text field labeled Key(it is red) then press whichever key you want to use to jump back 30 seconds. Hit close, and you should be good to go.
  • ntw1103
    ntw1103 about 13 years
    Also, if you want to do this in VLC it is possible. tools -> Preferences. In the bottom left there is a simple/all radio button. Select all. In the tree on the left, select interface -> Hotkeys. There is the option to adjust jump sizes. you can set the Short jump to 30 seconds. Next in the list, scroll to the medium backwards jump. The default is Ctrl+left. You can select it and enter a new key to use in the box then hit apply. Click save at the bottom and you should be good to go.
  • harrymc
    harrymc about 13 years
    The microphone should be placed far enough from the speakers to lessen background noise. Conflicts are minimized since the recorded command will be in your own voice. Use command words or short phrases that are clearly pronounceable and test the result. See this example (voice quality is low so turn up the volume to hear).
  • harrymc
    harrymc about 13 years
    See also this article : Control Your PC with Your Voice.
  • Joe Schmoe
    Joe Schmoe about 13 years
    Thanks. That works simply and elegantly. In case anyone's interested, I'm firing off the SHIFT and LEFT combination for smaller jumps in Windows Media Player which equates to +{LEFT} in the script. The nice side-effect of this is that pressing the space bar a few times enables you to rewind the video further if necessary while touching no other keys. And even if my hands are too dirty to touch the keyboard, I can just use whatever utensil I can find lying around to just prod the space bar :)
  • Brian Var
    Brian Var over 9 years
    yes got that figured out, I seem to have another instance in my View though, will add that to my question.
  • Admin
    Admin over 9 years
    @BrianJ, iro other instances, you need to wrap your instance using the singelton pattern. Then you can access this instance anywhere in your code through the static member that contains the instance and do not need to create other instances. That it is the purpose of a singleton.