Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
gram:build
> ./config/nushell/camera.nu
Lenses
(coming soon!)
def "cam channel" [channel: int] { $"av://v4l2:/dev/video($channel)" }
def "cam mirror" [channel: int] { $"/dev/video($channel)" | path expand }
# cam align (cam mirror 0) ...(cam shape blob)
def "cam shape blob" [] { [-vcodec rawvideo -pix_fmt yuv420p] }
# cam screen $cameras.chassis
let cameras = { chassis: (cam channel 2), }
# cam screen (cam chassis)
def cam [name: cell-path] { $cameras | get $name }
def --wrapped "cam align" [mirror: path, ...call] {(
nix-shell -p ffmpeg gphoto2
--command ([ 'gphoto2 --stdout --capture-movie'
$"ffmpeg -i - (...$call) -f v4l2 ($mirror)"
] | str join ' | ')
)}
def "cam rec" [channel: path] { nsh ffmpeg $"ffmpeg -f v4l2 -framerate 30 -i ($channel) ($env.HOME)/rec/camera.(nix-shell -p dateutils --command 'date -Is').mkv" }
def "cam screen" [channel: path] { nsh mpv $"mpv ($channel) --profile=low-latency --untimed" }
# much obliged: https://superuser.com/questions/934984/how-can-i-scale-an-overlay-within-an-ffmpeg-filtercomplex
def "cam label" [--label (-m) ] {
ls | where name =~ "(JPG|MP4|jpg|mp4|JPEG|jpeg|mkv)$" |
filter {|n| not (($n | get name) =~ 'labeled') } | get name | path parse | each {|node|
let name = $"($node | get stem).($node | get extension)";
let size = ffprobe -v quiet -show_entries stream=width,height -of default=noprint_wrappers=1 $name | lines | split column '=' | get column2
let operands = [
"[1][0] scale2ref=w=oh*mdar:h=ih/6 [label][source]",
"[2][source] scale2ref=w=oh*mdar:h=ih/18 [address][source]",
"[source][label] overlay=overlay_w/3:main_h-overlay_h-(overlay_w/3) [brand]",
"[brand][address] overlay=main_w-overlay_w-(overlay_h):main_h-(overlay_h*2)",
] | str join "; \n"
ffmpeg -i $name -i $label -i ../address.png -b:v 1M -filter_complex $operands $"($node | get stem).labeled.($node | get extension)"
} }
# many messed up pipelines...
# ffmpeg -i $name -i ../label.png -b:v 1M -filter_complex "[1][0] scale2ref=w=oh*mdar:h=ih/6 [label][source], [source][label] overlay=overlay_w/2:main_h-(overlay_h*1.5)" $"($node | get stem).labeled.($node | get extension)"
# ffmpeg -i $name -i ../label.png -b:v 1M -filter_complex "[1][0] scale2ref=w=oh*mdar:h=ih/6 [label][source], [source][label] overlay=overlay_w/2:main_h-(overlay_h*1.5)" $"($node | get stem).marked.($node | get extension)"
# ffmpeg -i $name -i ../label.png -b:v 1M -filter_complex "[1:v]scale=320:320 [label], [0:v][label]overlay=(main_w-overlay_w)/2:(main_h-overlay_h)/2" $"($node | get stem).labeled.($node | get extension)"
# ffmpeg -i $name -vf $"movie=../label.png [label]; [in][label] scale=($size | get 0)$*0.15:-1 [out]" $"($node | get stem).labeled.($node | get extension)"
# ffmpeg -i $name -vf "movie=../label.png [label]; [1:v]scale=320:240 [label],[0:v][label] [in][label] overlay=10:main_h-overlay_h-10 [in][label] [out]" $"($node | get stem).labeled.($node | get extension)"
# ffmpeg -i $name -vf "movie=../label.png [label]; [in][label] 10:main_h-overlay_h-10 [in][label] [out]" $"($node | get stem).labeled.($node | get extension)"