• Operand
  • # (b)ring mi - belles.

gram:build

> ./config/nushell/camera.nu

Lenses
(coming soon!)


# -record
def _rec [] { asciinema play (ls ~/rec/ | sort-by modified | last).name; }
def camera [] { cam 2; }
def "cam 1" [] { nix-shell -p ffmpeg gphoto2 --command 'gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video0' }
def "cam 2" [] { nix-shell -p ffmpeg gphoto2 --command 'gphoto2 --stdout --capture-movie | ffmpeg -i - -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video0 -vcodec rawvideo -pix_fmt yuv420p -f v4l2 /dev/video1' }
def "cam rec" [] { nsh ffmpeg $"ffmpeg -f v4l2 -framerate 30 -i /dev/video0 ($env.HOME)/rec/camera.(nix-shell -p dateutils --command 'date -Is').mkv" }
def "cam screen" [] { nsh mpv "mpv av://v4l2:/dev/video1 --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) =~ 'marked') } | 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).marked.($node | get extension)"
  } }

# many messed up pipelines...
# 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).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).marked.($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).marked.($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).marked.($node | get extension)"
# ffmpeg -i $name -vf $"movie=../label.png [label]; [in][label]  scale=($size | get 0)$*0.15:-1 [out]" $"($node | get stem).marked.($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)"