Re: [O] Audio/video file playback in org mode
Hi, 1. write a few lines into this that would open another buffer, possibly through capture, starting the relative timer automagically. 2. figure out how to pause the video and the timer simultaneously. As it happens, I've been sitting on some code to do just that, meaning to post it when I got all the bugs out. Which, needless to say, I haven't. But I'll clean it up and post to this thread shortly, since it's a hot topic. Yours, Christian
Re: [O] Audio/video file playback in org mode
Hi Alan and Christian On Sun, Jun 12, 2011 at 01:55, Alan E. Davis lngn...@gmail.com wrote: The main point of this was to play videos asynchronously, so I could continue editing, taking notes using the relative timer of org-mode. Thank you for this cool idea. On Sun, Jun 12, 2011 at 10:23, Christian Moe m...@christianmoe.com wrote: On Sun, Jun 12, 2011 at 01:55, Alan E. Davis lngn...@gmail.com wrote: Two more things would make this process work better, at least for me: 1. write a few lines into this that would open another buffer, possibly through capture, starting the relative timer automagically. 2. figure out how to pause the video and the timer simultaneously. As it happens, I've been sitting on some code to do just that, meaning to post it when I got all the bugs out. Which, needless to say, I haven't. But I'll clean it up and post to this thread shortly, since it's a hot topic. Only as a collection of ideas: Even better if the Org relative timer would not start/stop by user interaction and count the time on its own but if the Org relative timer in this case would only just be replaced by reading the current play time from the media player through the same mechanisms that already update the current play time for display in Emacs. Then the note taking time would also stay in sync with fast forward and rewind. Useful e. g. when searching a certain time in a paused audio file that loops in place. And if the point in the note taking buffer would even move up and down - when enabled - when an already taken note is passed by time from fast forward or rewind this would be neat. Michael
Re: [O] Audio/video file playback in org mode
Hi Paul On Sat, Jun 11, 2011 at 06:48, Paul Sexton psex...@xnet.co.nz wrote: Thanks Michael, I'm glad you think it will be helpful. I have implemented something like what you have requested here. I have hived this code off into a separate file called org-player.el. You can get it at: http://bitbucket.org/eeeickythump/org-player/ Thank you very much for sharing. It worked out of the box to play an Org link with time spec and I like it. I intend to add it to worg in the next little while. That would be great. I first misread it to be added to Org core, but maybe later after some more user feedback. Links can now contain times to start playback, as follows: [[file:/path/to/song.mp3::2:43]] Starts playback at 2 min 43 sec. [[file:/path/to/song.mp3::1:10:45]] Starts playback at 1 hr 10 min 45 sec. [[file:/path/to/song.mp3::3m15s]] Starts playback at 3 min 15 sec. [[file:/path/to/song.mp3::49s]] Starts playback at 0 min 49 sec. [[file:/path/to/song.mp3::1h21m10s]] Starts playback at 1 hr 21 min 10 sec. As you see I have made XX:YY mean minutes and seconds, as it seems more logical to me for this particular purpose. If there is a compelling reason to interpret XX:YY as hours and minutes in these links then I am not totally opposed to changing it, but I think many people would find it confusing and counterintuitive. Ok, in the context of a media file your arguments convinced me. In all cases playback continues until the end of the file. I couldn't find a way to implement playback of 'snippets' with a specified start and end time, unfortunately. I'm sure this is only a question of time, I'll try to solve this too. Michael On 10/06/2011 8:28 p.m., Michael Brand wrote: Hi Paul Thank you very much for sharing this, I will benefit a lot and the interactivity from within Emacs seems extremely useful. My recent searches for how to play an Org link to an audio file didn't find any result and I was about to work out something with mpg123. I planned to define a new link type for this but your solution with file: looks to me more like it should be and is also backwards compatible with links already made with file:. And even better if file: could also cover my requirement to have an optional link search part that lets the player start and stop at a specified time. Let me define the format like this: - start to play in file at 00:03:21, stop at 00:06:54: [[file:some_podcast.mp3::00:03:21-00:06:54]] - start to play in file at 00:03:21, play until end of file: [[file:some_podcast.mp3::00:03:21]] - play the whole file: [[file:some_podcast.mp3]] I would like to explicitly not allow [[file:some_podcast.mp3::03:21]] as a shorter option with MM:SS because I would like to see XX:XX being reserved for HH:MM without exception in Org. There was a recent discussion covering this in the context of time calculation: http://thread.gmane.org/gmane.emacs.orgmode/39487/focus=39840
Re: [O] Audio/video file playback in org mode
Paul Sexton psex...@xnet.co.nz writes: brian powell briangpowellms at gmail.com writes: * Something like this; respectively!?: [[shell:mplayer -ss 00:03:21 -endpos 00:06:54 ~/some_podcast.mp3 ]] [[shell:mplayer -ss 00:03:21 ~/some_podcast.mp3 ]] [[shell:mplayer ~/some_podcast.mp3 ]] The troubles with using shell commands in hyperlinks: 1. Only works in the operating system and directory structure where you were when you wrote the link; 2. No ability to stop playback, pause, etc, unless you run the program as a GUI, which means (horror!) doing something outside Emacs. If you are using different setups on different operating systems, 1) should probably be solved in some general fashion, like setting some vars to important locations depending on environmentearly in your .emacs. 2.) [[elisp:(emms-play-file ~/tmp/video/magit.flv)]] or [[elisp:(emms-play-file (concat MYSCREENCASTSDIR magit.flv))]] or [[elisp:(emms-play-file (concat MYSCREENCASTSDIR magit.flv))][View magit demo]] Of course, there is no problem with setting up org to treat file links to mediafiles special. But given the power of org hyperlinks, I think using elisp: solves your 1.) and 2.) sufficiently. Memnon
Re: [O] Audio/video file playback in org mode
I'll jump in and mention a solution to an at least similar problem I hacked, albeit incompletely, some time ago. I baldly stole code from dired-mplayer at http://www.emacswiki.org/cgi-bin/wiki/EMMS#toc10 , and have been using the result, dired-vlc ever since. The main point of this was to play videos asynchronously, so I could continue editing, taking notes using the relative timer of org-mode. Two more things would make this process work better, at least for me: 1. write a few lines into this that would open another buffer, possibly through capture, starting the relative timer automagically. 2. figure out how to pause the video and the timer simultaneously. Here is the code to dired-vlc. I am not interested in making this work for windows, have no idea whether it would, or how to make it do so. #+BEGIN_EXAMPLE ;; -*- mode: elisp -*- ;; Time-stamp: 2009-01-13 14:27:47 orm ;; AED 05 January 2009 ; (require 'org) (defvar dired-vlc-program /usr/bin/vlc) (defun dired-vlc (optional timer) Asynchronously start vlc on file through dired. If an optional argument is given (C-u), the org relative timer is started. This function purports to start vlc in rc mode, to leave open the possibility of remote control. (interactive P) (let ((file (expand-file-name (dired-get-filename))) ext files basename dir curr-file ;idx-file sub-file srt-file command options) (setq basename (file-name-nondirectory (file-name-sans-extension file))) (setq dir (file-name-directory file)) (setq files (directory-files dir t basename)) (delete file files) (setq command (format \%s\ \%s dired-vlc-program --intf rc)) (if (y-or-n-p (format Run command %s? command)) (start-process junk nil dired-vlc-program file))) (if (equal timer '(4)) (org-timer-start)) ) ;; end dired-vlc.el #+END_EXAMPLE I am interested in what you are doing, also, and I will try it out in a month or two, after I retire and relocate. Alan Davis On Sun, Jun 12, 2011 at 12:00 AM, Memnon Anon gegendosenflei...@googlemail.com wrote: Paul Sexton psex...@xnet.co.nz writes: brian powell briangpowellms at gmail.com writes: * Something like this; respectively!?: [[shell:mplayer -ss 00:03:21 -endpos 00:06:54 ~/some_podcast.mp3 ]] [[shell:mplayer -ss 00:03:21 ~/some_podcast.mp3 ]] [[shell:mplayer ~/some_podcast.mp3 ]] The troubles with using shell commands in hyperlinks: 1. Only works in the operating system and directory structure where you were when you wrote the link; 2. No ability to stop playback, pause, etc, unless you run the program as a GUI, which means (horror!) doing something outside Emacs. If you are using different setups on different operating systems, 1) should probably be solved in some general fashion, like setting some vars to important locations depending on environmentearly in your .emacs. 2.) [[elisp:(emms-play-file ~/tmp/video/magit.flv)]] or [[elisp:(emms-play-file (concat MYSCREENCASTSDIR magit.flv))]] or [[elisp:(emms-play-file (concat MYSCREENCASTSDIR magit.flv))][View magit demo]] Of course, there is no problem with setting up org to treat file links to mediafiles special. But given the power of org hyperlinks, I think using elisp: solves your 1.) and 2.) sufficiently. Memnon
Re: [O] Audio/video file playback in org mode
Hi Paul Thank you very much for sharing this, I will benefit a lot and the interactivity from within Emacs seems extremely useful. My recent searches for how to play an Org link to an audio file didn't find any result and I was about to work out something with mpg123. I planned to define a new link type for this but your solution with file: looks to me more like it should be and is also backwards compatible with links already made with file:. And even better if file: could also cover my requirement to have an optional link search part that lets the player start and stop at a specified time. Let me define the format like this: - start to play in file at 00:03:21, stop at 00:06:54: [[file:some_podcast.mp3::00:03:21-00:06:54]] - start to play in file at 00:03:21, play until end of file: [[file:some_podcast.mp3::00:03:21]] - play the whole file: [[file:some_podcast.mp3]] I would like to explicitly not allow [[file:some_podcast.mp3::03:21]] as a shorter option with MM:SS because I would like to see XX:XX being reserved for HH:MM without exception in Org. There was a recent discussion covering this in the context of time calculation: http://thread.gmane.org/gmane.emacs.orgmode/39487/focus=39840 Michael On Thu, Jun 9, 2011 at 23:55, Paul Sexton psex...@xnet.co.nz wrote: I have spent a few hours figuring this out so I thought I would post it for the benefit of others. I am learning a language, and wanted to include hyperlinks to audio files within my org document, and be able to play each file by clicking on the link. I eventually discovered the variable 'org-file-apps' which allows you to associate particular applications with particular file types. I am using Bongo (https://github.com/dbrock/bongo) as the media player. EMMS is another actively developed media player, but setup looked too complicated at first glance. I am using MPlayer as the actual media player. This supports almost all audio and video file formats. Most importantly, it works on Windows as well as on Linux (VLC has a Windows port but it doesn't work with Bongo as the 'fake-tty' interface is not implemented on Windows.) My current setup means that clicking on a link such as [[file:song.mp3]] adds it to the active Bongo playlist (in another buffer) and immediately starts playing it. Playback can be paused, fast-forwarded etc using Bongo. When Bongo plays a file it puts some icons in the modeline that resemble the 'play', 'stop' etc symbols, and can be used to control playback using the mouse. I found these worked erratically outside the actual Bongo playlist buffer, so I have instead bound some org-mode keys (ctrl + numpad keys) to the relevant functions. This is optional of course. I have only tested this with mp3 files, but it ought to work with video as well. My setup follows: --- ;;; Part 1. Bongo setup (add-to-list 'load-path /path/to/bongo)) (autoload 'bongo bongo Start Bongo by switching to a Bongo buffer. t) (setq bongo-mplayer-program-name (case system-type ((windows-nt cygwin) c:\\Program Files\\MPlayer for Windows\\MPlayer.exe) (t mplayer))) (setq bongo-enabled-backends '(mplayer)) ;;; Part 2. Org setup (defvar av-file-regex (concat \\. (regexp-opt (append bongo-audio-file-name-extensions bongo-video-file-name-extensions)) $)) (add-to-list 'org-file-apps (cons av-file-regex '(org-play-media-file file))) (defun org-play-media-file (filename) (with-bongo-buffer (bongo-insert-file filename) (backward-char) (bongo-play))) ;;; Part 3. Keybindings to allow control of playback within Org buffer ;;; (optional) ;; Numpad Ctrl-0: pause/resume (define-key org-mode-map (kbd C-kp-0) 'bongo-pause/resume) (define-key org-mode-map (kbd C-kp-insert) 'bongo-pause/resume) ;; Numpad Ctrl-.: stop current track, or restart from beginning if stopped (define-key org-mode-map (kbd C-kp-decimal) 'bongo-start/stop) (define-key org-mode-map (kbd C-kp-delete) 'bongo-start/stop) ;; Numpad Ctrl-PgUp, Ctrl-PgDn: raise/lower volume (define-key org-mode-map (kbd C-kp-prior) 'bongo-volume-raise) (define-key org-mode-map (kbd C-kp-next) 'bongo-volume-lower) (define-key org-mode-map (kbd C-kp-9) 'bongo-volume-raise) (define-key org-mode-map (kbd C-kp-3) 'bongo-volume-lower) ;; Numpad Ctrl-left, Ctrl-right: skip back/forward 10 seconds (define-key org-mode-map (kbd C-kp-left) 'bongo-seek-backward-10) (define-key org-mode-map (kbd C-kp-right) 'bongo-seek-forward-10) (define-key org-mode-map (kbd C-kp-4) 'bongo-seek-backward-10) (define-key org-mode-map (kbd C-kp-6) 'bongo-seek-forward-10)
Re: [O] Audio/video file playback in org mode
* Something like this; respectively!?: [[shell:mplayer -ss 00:03:21 -endpos 00:06:54 ~/some_podcast.mp3 ]] [[shell:mplayer -ss 00:03:21 ~/some_podcast.mp3 ]] [[shell:mplayer ~/some_podcast.mp3 ]] VLC works great for this too. [[file:...] works too of course, but you have to make a file association (or like mentioned: 'org-file-apps') to mplayer or emacs OrgMode will just open the file in a buffer. Unclear about statement about earlier posts: I would like to explicitly not allow... P.S. Thanks for the link to BONGO--the EMACS buffer media player. I made my own buffer media player and have used it for many years; but, BONGO.el is wayly kuul too! On Fri, Jun 10, 2011 at 4:28 AM, Michael Brand michael.ch.br...@gmail.comwrote: Hi Paul Thank you very much for sharing this, I will benefit a lot and the interactivity from within Emacs seems extremely useful. My recent searches for how to play an Org link to an audio file didn't find any result and I was about to work out something with mpg123. I planned to define a new link type for this but your solution with file: looks to me more like it should be and is also backwards compatible with links already made with file:. And even better if file: could also cover my requirement to have an optional link search part that lets the player start and stop at a specified time. Let me define the format like this: - start to play in file at 00:03:21, stop at 00:06:54: [[file:some_podcast.mp3::00:03:21-00:06:54]] - start to play in file at 00:03:21, play until end of file: [[file:some_podcast.mp3::00:03:21]] - play the whole file: [[file:some_podcast.mp3]] I would like to explicitly not allow [[file:some_podcast.mp3::03:21]] as a shorter option with MM:SS because I would like to see XX:XX being reserved for HH:MM without exception in Org. There was a recent discussion covering this in the context of time calculation: http://thread.gmane.org/gmane.emacs.orgmode/39487/focus=39840 Michael On Thu, Jun 9, 2011 at 23:55, Paul Sexton psex...@xnet.co.nz wrote: I have spent a few hours figuring this out so I thought I would post it for the benefit of others. I am learning a language, and wanted to include hyperlinks to audio files within my org document, and be able to play each file by clicking on the link. I eventually discovered the variable 'org-file-apps' which allows you to associate particular applications with particular file types. I am using Bongo (https://github.com/dbrock/bongo) as the media player. EMMS is another actively developed media player, but setup looked too complicated at first glance.
Re: [O] Audio/video file playback in org mode
Thanks Michael, I'm glad you think it will be helpful. I have implemented something like what you have requested here. I have hived this code off into a separate file called org-player.el. You can get it at: http://bitbucket.org/eeeickythump/org-player/ I intend to add it to worg in the next little while. Links can now contain times to start playback, as follows: [[file:/path/to/song.mp3::2:43]] Starts playback at 2 min 43 sec. [[file:/path/to/song.mp3::1:10:45]] Starts playback at 1 hr 10 min 45 sec. [[file:/path/to/song.mp3::3m15s]] Starts playback at 3 min 15 sec. [[file:/path/to/song.mp3::49s]] Starts playback at 0 min 49 sec. [[file:/path/to/song.mp3::1h21m10s]] Starts playback at 1 hr 21 min 10 sec. As you see I have made XX:YY mean minutes and seconds, as it seems more logical to me for this particular purpose. If there is a compelling reason to interpret XX:YY as hours and minutes in these links then I am not totally opposed to changing it, but I think many people would find it confusing and counterintuitive. In all cases playback continues until the end of the file. I couldn't find a way to implement playback of 'snippets' with a specified start and end time, unfortunately. Cheers Paul
Re: [O] Audio/video file playback in org mode
brian powell briangpowellms at gmail.com writes: * Something like this; respectively!?: [[shell:mplayer -ss 00:03:21 -endpos 00:06:54 ~/some_podcast.mp3 ]] [[shell:mplayer -ss 00:03:21 ~/some_podcast.mp3 ]] [[shell:mplayer ~/some_podcast.mp3 ]] The troubles with using shell commands in hyperlinks: 1. Only works in the operating system and directory structure where you were when you wrote the link; 2. No ability to stop playback, pause, etc, unless you run the program as a GUI, which means (horror!) doing something outside Emacs. VLC works great for this too. In windows VLC works as a shell command, but doesn't work with Bongo. P.S. Thanks for the link to BONGO--the EMACS buffer media player. I made my own buffer media player and have used it for many years; but, BONGO.el is wayly kuul too! You're welcome. Are you aware of EMMS, it seems to be Bongo's main rival (I haven't tried it). Paul
[O] Audio/video file playback in org mode
I have spent a few hours figuring this out so I thought I would post it for the benefit of others. I am learning a language, and wanted to include hyperlinks to audio files within my org document, and be able to play each file by clicking on the link. I eventually discovered the variable 'org-file-apps' which allows you to associate particular applications with particular file types. I am using Bongo (https://github.com/dbrock/bongo) as the media player. EMMS is another actively developed media player, but setup looked too complicated at first glance. I am using MPlayer as the actual media player. This supports almost all audio and video file formats. Most importantly, it works on Windows as well as on Linux (VLC has a Windows port but it doesn't work with Bongo as the 'fake-tty' interface is not implemented on Windows.) My current setup means that clicking on a link such as [[file:song.mp3]] adds it to the active Bongo playlist (in another buffer) and immediately starts playing it. Playback can be paused, fast-forwarded etc using Bongo. When Bongo plays a file it puts some icons in the modeline that resemble the 'play', 'stop' etc symbols, and can be used to control playback using the mouse. I found these worked erratically outside the actual Bongo playlist buffer, so I have instead bound some org-mode keys (ctrl + numpad keys) to the relevant functions. This is optional of course. I have only tested this with mp3 files, but it ought to work with video as well. My setup follows: --- ;;; Part 1. Bongo setup (add-to-list 'load-path /path/to/bongo)) (autoload 'bongo bongo Start Bongo by switching to a Bongo buffer. t) (setq bongo-mplayer-program-name (case system-type ((windows-nt cygwin) c:\\Program Files\\MPlayer for Windows\\MPlayer.exe) (t mplayer))) (setq bongo-enabled-backends '(mplayer)) ;;; Part 2. Org setup (defvar av-file-regex (concat \\. (regexp-opt (append bongo-audio-file-name-extensions bongo-video-file-name-extensions)) $)) (add-to-list 'org-file-apps (cons av-file-regex '(org-play-media-file file))) (defun org-play-media-file (filename) (with-bongo-buffer (bongo-insert-file filename) (backward-char) (bongo-play))) ;;; Part 3. Keybindings to allow control of playback within Org buffer ;;; (optional) ;; Numpad Ctrl-0: pause/resume (define-key org-mode-map (kbd C-kp-0) 'bongo-pause/resume) (define-key org-mode-map (kbd C-kp-insert) 'bongo-pause/resume) ;; Numpad Ctrl-.: stop current track, or restart from beginning if stopped (define-key org-mode-map (kbd C-kp-decimal) 'bongo-start/stop) (define-key org-mode-map (kbd C-kp-delete) 'bongo-start/stop) ;; Numpad Ctrl-PgUp, Ctrl-PgDn: raise/lower volume (define-key org-mode-map (kbd C-kp-prior) 'bongo-volume-raise) (define-key org-mode-map (kbd C-kp-next) 'bongo-volume-lower) (define-key org-mode-map (kbd C-kp-9) 'bongo-volume-raise) (define-key org-mode-map (kbd C-kp-3) 'bongo-volume-lower) ;; Numpad Ctrl-left, Ctrl-right: skip back/forward 10 seconds (define-key org-mode-map (kbd C-kp-left) 'bongo-seek-backward-10) (define-key org-mode-map (kbd C-kp-right) 'bongo-seek-forward-10) (define-key org-mode-map (kbd C-kp-4) 'bongo-seek-backward-10) (define-key org-mode-map (kbd C-kp-6) 'bongo-seek-forward-10)
Re: [O] Audio/video file playback in org mode
Very cool, Would you mind posting this to Worg to increase that chances that it will be found by future Orgers? The first place that comes to mind is the org-hacks page at http://orgmode.org/worg/org-hacks.html Cheers -- Eric Paul Sexton psex...@xnet.co.nz writes: I have spent a few hours figuring this out so I thought I would post it for the benefit of others. I am learning a language, and wanted to include hyperlinks to audio files within my org document, and be able to play each file by clicking on the link. I eventually discovered the variable 'org-file-apps' which allows you to associate particular applications with particular file types. I am using Bongo (https://github.com/dbrock/bongo) as the media player. EMMS is another actively developed media player, but setup looked too complicated at first glance. I am using MPlayer as the actual media player. This supports almost all audio and video file formats. Most importantly, it works on Windows as well as on Linux (VLC has a Windows port but it doesn't work with Bongo as the 'fake-tty' interface is not implemented on Windows.) My current setup means that clicking on a link such as [[file:song.mp3]] adds it to the active Bongo playlist (in another buffer) and immediately starts playing it. Playback can be paused, fast-forwarded etc using Bongo. When Bongo plays a file it puts some icons in the modeline that resemble the 'play', 'stop' etc symbols, and can be used to control playback using the mouse. I found these worked erratically outside the actual Bongo playlist buffer, so I have instead bound some org-mode keys (ctrl + numpad keys) to the relevant functions. This is optional of course. I have only tested this with mp3 files, but it ought to work with video as well. My setup follows: --- ;;; Part 1. Bongo setup (add-to-list 'load-path /path/to/bongo)) (autoload 'bongo bongo Start Bongo by switching to a Bongo buffer. t) (setq bongo-mplayer-program-name (case system-type ((windows-nt cygwin) c:\\Program Files\\MPlayer for Windows\\MPlayer.exe) (t mplayer))) (setq bongo-enabled-backends '(mplayer)) ;;; Part 2. Org setup (defvar av-file-regex (concat \\. (regexp-opt (append bongo-audio-file-name-extensions bongo-video-file-name-extensions)) $)) (add-to-list 'org-file-apps (cons av-file-regex '(org-play-media-file file))) (defun org-play-media-file (filename) (with-bongo-buffer (bongo-insert-file filename) (backward-char) (bongo-play))) ;;; Part 3. Keybindings to allow control of playback within Org buffer ;;; (optional) ;; Numpad Ctrl-0: pause/resume (define-key org-mode-map (kbd C-kp-0) 'bongo-pause/resume) (define-key org-mode-map (kbd C-kp-insert) 'bongo-pause/resume) ;; Numpad Ctrl-.: stop current track, or restart from beginning if stopped (define-key org-mode-map (kbd C-kp-decimal) 'bongo-start/stop) (define-key org-mode-map (kbd C-kp-delete) 'bongo-start/stop) ;; Numpad Ctrl-PgUp, Ctrl-PgDn: raise/lower volume (define-key org-mode-map (kbd C-kp-prior) 'bongo-volume-raise) (define-key org-mode-map (kbd C-kp-next) 'bongo-volume-lower) (define-key org-mode-map (kbd C-kp-9) 'bongo-volume-raise) (define-key org-mode-map (kbd C-kp-3) 'bongo-volume-lower) ;; Numpad Ctrl-left, Ctrl-right: skip back/forward 10 seconds (define-key org-mode-map (kbd C-kp-left) 'bongo-seek-backward-10) (define-key org-mode-map (kbd C-kp-right) 'bongo-seek-forward-10) (define-key org-mode-map (kbd C-kp-4) 'bongo-seek-backward-10) (define-key org-mode-map (kbd C-kp-6) 'bongo-seek-forward-10) -- Eric Schulte http://cs.unm.edu/~eschulte/