;;; thanos-multimedia.el --- -*- lexical-binding: t; -*- ;; Copyright (C) 2023 Thanos Apollo ;; Author: Thanos Apollo ;; Keywords: ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; ╭━━━━┳╮╱╱╱╱╱╱╱╱╱╱╱╱╱╱╭━━━╮╱╱╱╱╱╭╮╭╮╱╱╱╱╱╱╱╱╭━━━╮ ;; ┃╭╮╭╮┃┃╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃╭━╮┃╱╱╱╱╱┃┃┃┃╱╱╱╱╱╱╱╱┃╭━━╯ ;; ╰╯┃┃╰┫╰━┳━━┳━╮╭━━┳━━╮┃┃╱┃┣━━┳━━┫┃┃┃╭━━╮╱╱╱╱┃╰━━┳╮╭┳━━┳━━┳━━╮ ;; ╱╱┃┃╱┃╭╮┃╭╮┃╭╮┫╭╮┃━━┫┃╰━╯┃╭╮┃╭╮┃┃┃┃┃╭╮┃╭━━╮┃╭━━┫╰╯┃╭╮┃╭━┫━━┫ ;; ╱╱┃┃╱┃┃┃┃╭╮┃┃┃┃╰╯┣━━┃┃╭━╮┃╰╯┃╰╯┃╰┫╰┫╰╯┃╰━━╯┃╰━━┫┃┃┃╭╮┃╰━╋━━┃ ;; ╱╱╰╯╱╰╯╰┻╯╰┻╯╰┻━━┻━━╯╰╯╱╰┫╭━┻━━┻━┻━┻━━╯╱╱╱╱╰━━━┻┻┻┻╯╰┻━━┻━━╯ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱┃┃ ;; ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╰╯ ;;; Code: ;; EMMS (require 'emms) (emms-all) (setf emms-player-list '(emms-player-mpv) emms-player-mpv-parameters '("--no-video") emms-info-functions '(emms-info-native) emms-playlist-buffer-name "*Music*" emms-source-file-default-directory "~/Music") (define-key 'thanos/applications-map (kbd "e") 'emms) (define-key emms-playlist-mode-map (kbd "A") 'emms-add-directory-tree) ;; yeetube (defun yeetube-download-vimeo-videos () (interactive) (let ((url "") (name "") (download-counter 1)) (while (not (string= url "q")) (setf url (read-string "Enter URL (q to quit): ")) (unless (string= url "q") (setf name (read-string (format "Custom name (download counter: %d) " download-counter))) (setf download-counter (1+ download-counter)) (call-process-shell-command (format "yt-dlp '%s' -o '%s'" (replace-regexp-in-string "\\.json" ".m3u8" url) name) nil 0))))) (defun yeetube-download-videos-ffmpeg () "Download one or multiple videos using yt-dlp. This command is not meant to be used in the *Yeetube Search* buffer. Usage Example: Open a Dired buffer and navigate where you want to download your videos, then run this command interactively. You can leave the 'Custom name:' prompt blank to keep the default name." (interactive) (let ((url "") (name "") (download-counter 1) (stored-contents nil)) ;; Read links and names until "q" is entered (while (not (string= url "q")) (setf url (read-string "Enter URL (q to quit): ")) (unless (string= url "q") (setf name (read-string (format "Custom name (download counter: %d) " download-counter))) (push (cons url name) stored-contents) (setf download-counter (1+ download-counter)))) ;; Process the collected links and names (dolist (pair stored-contents) (let ((url (car pair)) (name (cdr pair))) (async-shell-command (format "ffmpeg -protocol_whitelist file,crypto,data,https,tls,tcp -stats -i '%s' -codec copy '%s.mp4'" url name)))))) (when is-zeus (add-to-list 'load-path "~/Developer/emacs-lisp/yeetube") (load-file "~/Developer/emacs-lisp/yeetube/yeetube.el")) (require 'yeetube) (setf yeetube-results-limit 30 yeetube-mpv-disable-video t) (defun yeetube-play-url (url) "Open URL using yeetube-player." (interactive "sURL:") (let ((media-player (executable-find (symbol-name yeetube-player)))) (unless media-player (error (format "%s not found." media-player))) (when (string-prefix-p "http" url) (setf yeetube-last-played url) (if (eq yeetube-player 'mpv) (yeetube-start-mpv-process url) (yeetube-start-process (format "%s \"%s\"" media-player (replace-regexp-in-string "\\byewtu\\.be\b" "youtube.com" url))))))) (define-prefix-command 'thanos/yeetube) (global-set-key (kbd "C-c y") 'thanos/yeetube) (define-key thanos/yeetube (kbd "s") 'yeetube-search) (define-key thanos/yeetube (kbd "b") 'yeetube-play-saved-video) (define-key thanos/yeetube (kbd "d") 'yeetube-download-videos) (define-key thanos/yeetube (kbd "p") 'yeetube-mpv-toggle-pause) (define-key thanos/yeetube (kbd "v") 'yeetube-mpv-toggle-no-video-flag) (define-key thanos/yeetube (kbd "C-p") 'yeetube-mpv-toggle-video) (define-key thanos/yeetube (kbd "k") 'yeetube-remove-saved-video) (define-key thanos/yeetube (kbd "u") 'yeetube-change-platform) (define-key thanos/yeetube (kbd "C-d") 'yeetube-download-vimeo-videos) (define-key yeetube-mode-map (kbd "c") 'yeetube-switch-mpv) (provide 'thanos-multimedia) ;;; thanos-multimedia.el ends here