add some video component

This commit is contained in:
Ingolf Wagner 2023-11-07 09:02:41 +01:00
parent 8f4f86aa37
commit 4a3334895d
No known key found for this signature in database
GPG key ID: 76BF5F1928B9618B
8 changed files with 166 additions and 4 deletions

View file

@ -8,6 +8,7 @@ with lib;
imports = [ imports = [
./icecast.nix ./icecast.nix
./tts.nix ./tts.nix
./video.nix
]; ];
config = mkIf config.components.media.enable { }; config = mkIf config.components.media.enable { };

View file

@ -0,0 +1,20 @@
#! /bin/bash
# todo : add a dry-run
sanitize() {
shopt -s extglob;
filename=$(basename "$1")
directory=$(dirname "$1")
filename_clean="${filename//+([^[:alnum:]_-\\.])/_}"
if (test "$filename" != "$filename_clean")
then
mv -v --backup=numbered "$1" "$directory/$filename_clean"
fi
}
export -f sanitize
find $1 -depth -exec bash -c 'sanitize "$0"' {} \;

View file

@ -0,0 +1,119 @@
{ config, pkgs, lib, ... }:
with lib;
let
# Lassulus streaming setup
# -------------------------
# ffmpeg \
# -f pulse \
# -i default \
# -vaapi_device /dev/dri/renderD128 \
# -f x11grab \
# -video_size 1366x768 \
# -i :0 \
# -vf 'hwupload,scale_vaapi=format=nv12' \
# -c:v h264_vaapi \
# -c:a aac \
# -b:a 96k \
# -af "highpass=f=200, lowpass=f=3000" \
# -qp 30 \
# -f flv \
# rtmp://lassul.us:1935/stream/nixos \
# ./rc3-output-$(date +%d%H%M%S).mp4
#
# Dann abspielen mit :
# mpv rtmp://lassul.us:1935/stream/nixos
# show keyboard input on desktop for screencasts
screenKey = pkgs.symlinkJoin {
name = "screen-keys";
paths =
let
screenKeyScript = { position ? "bottom", size ? "small", ... }:
pkgs.writeShellScriptBin "screenkeys-${position}-${size}" # sh
''
${pkgs.screenkey}/bin/screenkey \
--no-detach \
--bg-color '#fdf6e3' \
--font-color '#073642' \
-p ${position} \
-s ${size} \
"$@"
'';
in
lib.flatten (lib.flip map [ "large" "small" "medium" ] (size:
lib.flip map [ "top" "center" "bottom" ]
(position: screenKeyScript { inherit size position; })));
};
mpvReview =
let
moveToDir = key: dir: pkgs.writeText "move-with-${key}.lua" ''
tmp_dir = "${dir}"
function move_current_track_${key}()
track = mp.get_property("path")
os.execute("mkdir -p '" .. tmp_dir .. "'")
os.execute("mv '" .. track .. "' '" .. tmp_dir .. "'")
print("moved '" .. track .. "' to " .. tmp_dir)
mp.command("playlist-next")
end
mp.add_key_binding("${key}", "move_current_track_${key}", move_current_track_${key})
'';
delete = moveToDir "D" "./.graveyard";
good = moveToDir "G" "./.good";
in
pkgs.writers.writeDashBin "mpv-review" ''
exec ${pkgs.mpv}/bin/mpv --no-config --script=${delete} --script=${good} "$@"
'';
alphaSafe = pkgs.writers.writeBashBin "alpha-safe" ''
export PATH=${pkgs.gnused}/bin:$PATH
echo "$1" | sed 's/[^a-zA-Z0-9]/-/g' | sed 's/--/-/g' | sed 's/-$//g'
'';
sanitizeFolder = pkgs.writers.writeBashBin "sanitize-folder" (fileContents ./sanitize_folder.sh);
in
{
options.components.media.video.enable = mkOption {
type = lib.types.bool;
default = config.components.media.enable;
};
config = mkIf (config.components.media.video.enable) {
environment.systemPackages = with pkgs; [
unstable.youtube-dl
unstable.yt-dlp
mplayer
mpv
mpvReview
# sanitazion
alphaSafe
sanitizeFolder
# to record your screen
# ---------------------
simplescreenrecorder
screenKey
obs-studio
# to transcode video material
# ---------------------------
handbrake
ffmpeg-full
];
};
}

View file

@ -73,7 +73,6 @@
}; };
}; };
programs.custom.video.enable = false;
programs.custom.steam.enable = true; programs.custom.steam.enable = true;
services.printing.enable = true; services.printing.enable = true;

View file

@ -45,7 +45,6 @@
}; };
programs.custom.steam.enable = false; programs.custom.steam.enable = false;
programs.custom.video.enable = false;
# keyboard fiddling # keyboard fiddling
i18n.defaultLocale = "de_DE.UTF-8"; i18n.defaultLocale = "de_DE.UTF-8";

View file

@ -27,7 +27,6 @@
users.users.mainUser.extraGroups = [ "adbusers" "video" ]; users.users.mainUser.extraGroups = [ "adbusers" "video" ];
programs.custom.steam.enable = false; programs.custom.steam.enable = false;
programs.custom.video.enable = false;
services.printing.enable = false; services.printing.enable = false;
services.nginx.enable = true; services.nginx.enable = true;

View file

@ -28,7 +28,7 @@
./programs/steam.nix ./programs/steam.nix
#./programs/taskwarrior.nix #./programs/taskwarrior.nix
./programs/urxvt.nix ./programs/urxvt.nix
./programs/video.nix #./programs/video.nix
./programs/vim.nix ./programs/vim.nix
./programs/xterm.nix ./programs/xterm.nix

View file

@ -50,6 +50,29 @@ let
(position: screenKeyScript { inherit size position; }))); (position: screenKeyScript { inherit size position; })));
}; };
mpvReview =
let
moveToDir = key: dir: pkgs.writeText "move-with-${key}.lua" ''
tmp_dir = "${dir}"
function move_current_track_${key}()
track = mp.get_property("path")
os.execute("mkdir -p '" .. tmp_dir .. "'")
os.execute("mv '" .. track .. "' '" .. tmp_dir .. "'")
print("moved '" .. track .. "' to " .. tmp_dir)
end
mp.add_key_binding("${key}", "move_current_track_${key}", move_current_track_${key})
'';
delete = moveToDir "D" "./.graveyard";
good = moveToDir "G" "./.good";
in
pkgs.writers.writeDashBin "mpv-review" ''
exec ${pkgs.mpv}/bin/mpv --no-config --script=${delete} --script=${good} "$@"
'';
in in
{ {
@ -61,6 +84,8 @@ in
unstable.yt-dlp unstable.yt-dlp
mplayer mplayer
mpv mpv
mpvReview
# to record your screen # to record your screen
# --------------------- # ---------------------