mirror of
https://github.com/gensokyo-zone/infrastructure.git
synced 2026-02-10 04:49:19 -08:00
166 lines
4.5 KiB
Nix
166 lines
4.5 KiB
Nix
{ pkgs ? import <nixpkgs> { }, lib }: with lib; with pkgs.gst_all_1; let
|
|
queue_frame = {
|
|
element."queue" = {
|
|
leaky = "downstream";
|
|
flush-on-eos = true;
|
|
max-size-buffers = 3;
|
|
};
|
|
};
|
|
queue_data = {
|
|
element.queue = {
|
|
leaky = "downstream";
|
|
};
|
|
};
|
|
videoconvert_cpu = {
|
|
element.videoconvert = {
|
|
n-threads = 4;
|
|
dither = 0;
|
|
chroma-resampler = 0;
|
|
chroma-mode = 3;
|
|
};
|
|
};
|
|
videoconvert_gpu = [
|
|
# TODO: vulkancolorconvert?
|
|
"glupload"
|
|
"glcolorconvert"
|
|
"gldownload"
|
|
];
|
|
cameracapture = {
|
|
element."v4l2src" = {
|
|
device = "/dev/videomew";
|
|
saturation = 100;
|
|
brightness = 100;
|
|
extra-controls = "c,exposure_auto=3";
|
|
};
|
|
};
|
|
v4l2src = [
|
|
cameracapture
|
|
{
|
|
caps."image/jpeg" = {
|
|
width = 1280;
|
|
height = 720;
|
|
framerate = "30/1"; # "10/1"
|
|
};
|
|
}
|
|
];
|
|
filesrc = [
|
|
{
|
|
element.filesrc = {
|
|
location = "rawvid.mkv";
|
|
};
|
|
}
|
|
"matroskademux"
|
|
];
|
|
denoise = {
|
|
element.frei0r-filter-hqdn3d = {
|
|
spatial = 0.175; #0.325;
|
|
temporal = 0.06; #0.11;
|
|
};
|
|
};
|
|
encodeopts = {
|
|
speed-preset = "ultrafast";
|
|
tune = "zerolatency";
|
|
pass = "qual";
|
|
#psy-tune = "film";
|
|
#noise-reduction=0;
|
|
quantizer = 27;
|
|
bitrate = 8192;
|
|
rc-lookahead = 6;
|
|
};
|
|
encode_intra = [
|
|
{
|
|
element.x264enc = {
|
|
intra-refresh = true;
|
|
key-int-max = 0;
|
|
} // encodeopts;
|
|
}
|
|
{
|
|
caps."video/x-h264" = {
|
|
profile = "high-4:2:2-intra";
|
|
};
|
|
}
|
|
"h264parse"
|
|
];
|
|
encode_high = [
|
|
{
|
|
element.x264enc = {
|
|
key-int-max = 150;
|
|
} // encodeopts;
|
|
}
|
|
{
|
|
caps."video/x-h264" = {
|
|
profile = "high";
|
|
};
|
|
}
|
|
"h264parse"
|
|
];
|
|
rtmpsink = [
|
|
queue_data
|
|
"flvmux"
|
|
{
|
|
element.rtmp2sink = {
|
|
location = "rtmp://192.168.1.223:1935/stream/kattv";
|
|
};
|
|
}
|
|
];
|
|
filesink = [
|
|
"matroskamux"
|
|
{
|
|
element.filesink = {
|
|
location = "out.mkv";
|
|
};
|
|
}
|
|
];
|
|
videosink = "autovideosink";
|
|
pipeline = v4l2src ++ [
|
|
#filesrc
|
|
{ element.matroskamux.streamable = true; }
|
|
{
|
|
element.tcpclientsink = {
|
|
host = "192.168.1.223";
|
|
port = "4953";
|
|
sync = false;
|
|
};
|
|
}
|
|
];
|
|
#gst-launch-1.0 $camera ! $videoconvert ! $queue ! $denoise ! $encode ! $outfile
|
|
env = {
|
|
FREI0R_PATH = "${pkgs.frei0r}/lib/frei0r-1";
|
|
GST_PLUGIN_SYSTEM_PATH_1_0 = with pkgs.gst_all_1; lib.makeSearchPath "lib/gstreamer-1.0" [
|
|
gstreamer
|
|
gst-plugins-base
|
|
gst-plugins-good
|
|
gst-plugins-bad
|
|
gst-plugins-ugly
|
|
];
|
|
};
|
|
shell = pkgs.mkShell (env // {
|
|
nativeBuildInputs = [ gstreamer kattv ];
|
|
});
|
|
in
|
|
{
|
|
inherit shell pipeline env;
|
|
}
|
|
#!/usr/bin/env bash
|
|
/*
|
|
|
|
|
|
|
|
|
|
#encode='x264enc intra-refresh=true key-int-max=0 speed-preset=superfast tune=zerolatency pass=qual psy-tune=film noise-reduction=250 quantizer=23 rc-lookahead=15 ! video/x-h264,profile=high-4:2:2-intra ! h264parse'
|
|
#encode="x264enc intra-refresh=true key-int-max=0 $encodeopts ! video/x-h264,profile=high-4:2:2-intra ! h264parse ! $bufqueue"
|
|
encode="x264enc key-int-max=50 $encodeopts ! video/x-h264,profile=high-4:2:2 ! h264parse ! $bufqueue"
|
|
|
|
# original pipeline:
|
|
# gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=YUY2,width=1280,height=800,framerate=10/1" ! videoconvert ! x264enc intra-refresh=true key-int-max=0 speed-preset=superfast tune=zerolatency pass=qual psy-tune=film noise-reduction=250 quantizer=23 rc-lookahead=15 ! video/x-h264,profile=high-4:2:2-intra ! h264parse ! flvmux ! rtmpsink location="rtmp://kittywit.ch/kattv/meowlymeowl live=1"
|
|
|
|
|
|
#gst-launch-1.0 filesrc location=rawvid.mkv ! mkvdemux ! "video/x-raw,format=YUY2,width=1280,height=800,framerate=10/1" ! videoconvert ! x264enc intra-refresh=true key-int-max=0 speed-preset=superfast tune=zerolatency pass=qual psy-tune=film noise-reduction=250 quantizer=23 rc-lookahead=15 ! video/x-h264,profile=high-4:2:2-intra ! h264parse ! flvmux ! filesink location=out.flv
|
|
|
|
#gst-launch-1.0 filesrc location=rawvid.mkv ! matroskademux ! "video/x-raw,format=YUY2,width=1280,height=800,framerate=10/1" ! videoconvert ! "video/x-raw,format=RGBA" ! frei0r-filter-hqdn3d spatial=0.35 temporal=0.115 ! videoconvert ! autovideosink
|
|
|
|
outfile='flvmux ! filesink location=out.flv'
|
|
#gst-launch-1.0 $camera ! $videoconvert ! $denoise ! autovideosink
|
|
gst-launch-1.0 $camera ! $videoconvert ! $queue ! $denoise ! $encode ! $outfile
|
|
#gst-launch-1.0 $camera ! $videoconvert ! $encode ! $outfile
|
|
*/
|