Skip to content

feat: 100 commands milestone! Add oscilloscope, extract-stream, black… #16

feat: 100 commands milestone! Add oscilloscope, extract-stream, black…

feat: 100 commands milestone! Add oscilloscope, extract-stream, black… #16

Workflow file for this run

name: CI
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Verify all commands register
run: node bin/ffmpeg-quick.js --help
- name: Install FFmpeg
run: sudo apt-get update && sudo apt-get install -y ffmpeg
- name: Test --dry-run for each command
run: |
node bin/ffmpeg-quick.js compress test.mp4 --dry-run
node bin/ffmpeg-quick.js gif test.mp4 --dry-run
node bin/ffmpeg-quick.js hls test.mp4 --dry-run
node bin/ffmpeg-quick.js audio test.mp4 --dry-run
node bin/ffmpeg-quick.js thumbnail test.mp4 --dry-run
node bin/ffmpeg-quick.js strip-audio test.mp4 --dry-run
node bin/ffmpeg-quick.js info test.mp4 --dry-run
node bin/ffmpeg-quick.js subtitle test.mp4 subs.srt --dry-run
node bin/ffmpeg-quick.js speed test.mp4 2 --dry-run
node bin/ffmpeg-quick.js trim test.mp4 -s 0 -d 5 --dry-run
node bin/ffmpeg-quick.js resize test.mp4 -w 1280 --dry-run
node bin/ffmpeg-quick.js crop test.mp4 640x480 --dry-run
node bin/ffmpeg-quick.js rotate test.mp4 90 --dry-run
node bin/ffmpeg-quick.js fade test.mp4 --in 1 --out 1 --duration 10 --dry-run
node bin/ffmpeg-quick.js reverse test.mp4 --dry-run
node bin/ffmpeg-quick.js volume test.mp4 2.0 --dry-run
node bin/ffmpeg-quick.js fps test.mp4 30 --dry-run
node bin/ffmpeg-quick.js snapshot test.mp4 --interval 1 --dry-run
node bin/ffmpeg-quick.js split test.mp4 10 --dry-run
node bin/ffmpeg-quick.js overlay test.mp4 test.mp4 --dry-run
node bin/ffmpeg-quick.js convert test.mp4 mov --dry-run
node bin/ffmpeg-quick.js loop test.mp4 3 --dry-run
node bin/ffmpeg-quick.js blur test.mp4 --dry-run
node bin/ffmpeg-quick.js mirror test.mp4 --dry-run
node bin/ffmpeg-quick.js picture test.jpg test.mp3 --dry-run
node bin/ffmpeg-quick.js color test.mp4 --brightness 0.1 --dry-run
node bin/ffmpeg-quick.js mute test.mp4 -s 0 -e 5 --dry-run
node bin/ffmpeg-quick.js pip-grid test.mp4 test.mp4 --dry-run
node bin/ffmpeg-quick.js boomerang test.mp4 --dry-run
node bin/ffmpeg-quick.js deinterlace test.mp4 --dry-run
node bin/ffmpeg-quick.js text test.mp4 Hello --dry-run
node bin/ffmpeg-quick.js mix-audio test.mp4 test.mp3 --dry-run
node bin/ffmpeg-quick.js normalize test.mp4 --dry-run
node bin/ffmpeg-quick.js pad test.mp4 1920x1080 --dry-run
node bin/ffmpeg-quick.js freeze test.mp4 1 3 --dry-run
node bin/ffmpeg-quick.js vignette test.mp4 --dry-run
node bin/ffmpeg-quick.js sharpen test.mp4 --dry-run
node bin/ffmpeg-quick.js grayscale test.mp4 --dry-run
node bin/ffmpeg-quick.js sepia test.mp4 --dry-run
node bin/ffmpeg-quick.js scenes test.mp4 --dry-run
node bin/ffmpeg-quick.js dash test.mp4 --dry-run
node bin/ffmpeg-quick.js frames-to-video 'frame-%04d.png' --dry-run
node bin/ffmpeg-quick.js chromakey test.mp4 bg.jpg --dry-run
node bin/ffmpeg-quick.js aspect test.mp4 16:9 --dry-run
node bin/ffmpeg-quick.js bitrate test.mp4 1M --dry-run
node bin/ffmpeg-quick.js stereo test.mp4 --mode mono --dry-run
node bin/ffmpeg-quick.js waveform test.mp4 --dry-run
node bin/ffmpeg-quick.js spectrum test.mp4 --dry-run
node bin/ffmpeg-quick.js crossfade test.mp4 test.mp4 1 --dry-run
node bin/ffmpeg-quick.js tile test.mp4 --dry-run
node bin/ffmpeg-quick.js metadata test.mp4 --title Test --dry-run
node bin/ffmpeg-quick.js drawbox test.mp4 100:50:200:150 --dry-run
node bin/ffmpeg-quick.js equalize test.mp4 --dry-run
node bin/ffmpeg-quick.js stack test.mp4 test.mp4 --dry-run
node bin/ffmpeg-quick.js detect-silence test.mp4 --dry-run
node bin/ffmpeg-quick.js extract-subtitle test.mp4 --dry-run
node bin/ffmpeg-quick.js audio-delay test.mp4 500 --dry-run
node bin/ffmpeg-quick.js deflicker test.mp4 --dry-run
node bin/ffmpeg-quick.js noise test.mp4 --dry-run
node bin/ffmpeg-quick.js vintage test.mp4 --dry-run
node bin/ffmpeg-quick.js zoom test.mp4 --dry-run
node bin/ffmpeg-quick.js interpolate test.mp4 60 --dry-run
node bin/ffmpeg-quick.js replace-audio test.mp4 test.mp3 --dry-run
node bin/ffmpeg-quick.js slideshow test.jpg test.jpg --dry-run
node bin/ffmpeg-quick.js chroma test.mp4 --hue 45 --dry-run
node bin/ffmpeg-quick.js edge test.mp4 --dry-run
node bin/ffmpeg-quick.js negative test.mp4 --dry-run
node bin/ffmpeg-quick.js posterize test.mp4 --dry-run
node bin/ffmpeg-quick.js sidecar test.mp4 subs.srt --dry-run
node bin/ffmpeg-quick.js preview test.mp4 --dry-run
node bin/ffmpeg-quick.js tonemap test.mp4 --dry-run
node bin/ffmpeg-quick.js alpha test.mp4 --dry-run
node bin/ffmpeg-quick.js audio-visualize test.mp4 --dry-run
node bin/ffmpeg-quick.js audio-fade test.mp4 --in 2 --dry-run
node bin/ffmpeg-quick.js glitch test.mp4 --dry-run
node bin/ffmpeg-quick.js pixelate test.mp4 --dry-run
node bin/ffmpeg-quick.js timecode test.mp4 --dry-run
node bin/ffmpeg-quick.js compare test.mp4 test.mp4 --dry-run
node bin/ffmpeg-quick.js concat-audio test.mp3 test.mp3 --dry-run
node bin/ffmpeg-quick.js audio-pitch test.mp4 2 --dry-run
node bin/ffmpeg-quick.js audio-eq test.mp4 --bass 5 --dry-run
node bin/ffmpeg-quick.js pan-audio test.mp4 -0.5 --dry-run
node bin/ffmpeg-quick.js trim-silence test.mp4 --dry-run
node bin/ffmpeg-quick.js gif-to-video test.gif --dry-run
node bin/ffmpeg-quick.js progress test.mp4 10 --dry-run
node bin/ffmpeg-quick.js backdrop test.mp4 --dry-run
node bin/ffmpeg-quick.js count-frames test.mp4 --dry-run
node bin/ffmpeg-quick.js motion-blur test.mp4 --dry-run
node bin/ffmpeg-quick.js border test.mp4 --dry-run
node bin/ffmpeg-quick.js multi-audio test.mp4 test.mp3 --dry-run
node bin/ffmpeg-quick.js duration test.mp4 --dry-run
node bin/ffmpeg-quick.js sample-rate test.mp4 44100 --dry-run
node bin/ffmpeg-quick.js bit-depth test.mp4 16 --dry-run
node bin/ffmpeg-quick.js oscilloscope test.mp4 --dry-run
node bin/ffmpeg-quick.js extract-stream test.mp4 v:0 --dry-run
node bin/ffmpeg-quick.js blackdetect test.mp4 --dry-run
- name: Test real encode (compress a generated video)
run: |
ffmpeg -f lavfi -i testsrc=duration=2:size=320x240:rate=15 -c:v libx264 -pix_fmt yuv420p test-input.mp4
ffmpeg -f lavfi -i testsrc=duration=1:size=160x120:rate=5 test-input-gif.gif
node bin/ffmpeg-quick.js compress test-input.mp4 -y
node bin/ffmpeg-quick.js trim test-input.mp4 -s 0 -d 1 -y
node bin/ffmpeg-quick.js resize test-input.mp4 -w 160 -y
node bin/ffmpeg-quick.js crop test-input.mp4 160x120 -y
node bin/ffmpeg-quick.js gif test-input.mp4 -y
node bin/ffmpeg-quick.js info test-input.mp4
node bin/ffmpeg-quick.js rotate test-input.mp4 90 -y
node bin/ffmpeg-quick.js reverse test-input.mp4 -y
node bin/ffmpeg-quick.js fps test-input.mp4 10 -y
node bin/ffmpeg-quick.js volume test-input.mp4 1.5 -y
node bin/ffmpeg-quick.js fade test-input.mp4 --in 0.5 --out 0.5 --duration 2 -y
node bin/ffmpeg-quick.js convert test-input.mp4 mkv -y
node bin/ffmpeg-quick.js loop test-input.mp4 2 -y
node bin/ffmpeg-quick.js snapshot test-input.mp4 --interval 1 -y
node bin/ffmpeg-quick.js split test-input.mp4 1 -y
node bin/ffmpeg-quick.js blur test-input.mp4 -y
node bin/ffmpeg-quick.js mirror test-input.mp4 -y
node bin/ffmpeg-quick.js color test-input.mp4 --brightness 0.1 --saturation 1.5 -y
node bin/ffmpeg-quick.js boomerang test-input.mp4 -y
node bin/ffmpeg-quick.js deinterlace test-input.mp4 -y
node bin/ffmpeg-quick.js mute test-input.mp4 -s 0 -e 1 -y
node bin/ffmpeg-quick.js text test-input.mp4 "Hello World" -y
node bin/ffmpeg-quick.js normalize test-input.mp4 -y
node bin/ffmpeg-quick.js pad test-input.mp4 640x480 -y
node bin/ffmpeg-quick.js vignette test-input.mp4 -y
node bin/ffmpeg-quick.js sharpen test-input.mp4 -y
node bin/ffmpeg-quick.js grayscale test-input.mp4 -y
node bin/ffmpeg-quick.js sepia test-input.mp4 -y
node bin/ffmpeg-quick.js aspect test-input.mp4 1:1 -y
node bin/ffmpeg-quick.js bitrate test-input.mp4 500k -y
node bin/ffmpeg-quick.js stereo test-input.mp4 --mode mono -y
node bin/ffmpeg-quick.js tile test-input.mp4 --cols 2 --rows 2 -y
node bin/ffmpeg-quick.js metadata test-input.mp4 --title "Test Video" -y
node bin/ffmpeg-quick.js drawbox test-input.mp4 10:10:100:80 -y
node bin/ffmpeg-quick.js crossfade test-input.mp4 test-input.mp4 0.5 -y
node bin/ffmpeg-quick.js equalize test-input.mp4 -y
node bin/ffmpeg-quick.js stack test-input.mp4 test-input.mp4 -y
node bin/ffmpeg-quick.js deflicker test-input.mp4 -y
node bin/ffmpeg-quick.js noise test-input.mp4 -y
node bin/ffmpeg-quick.js vintage test-input.mp4 -y
node bin/ffmpeg-quick.js chroma test-input.mp4 --hue 90 -y
node bin/ffmpeg-quick.js edge test-input.mp4 -y
node bin/ffmpeg-quick.js negative test-input.mp4 -y
node bin/ffmpeg-quick.js posterize test-input.mp4 -y
node bin/ffmpeg-quick.js glitch test-input.mp4 -y
node bin/ffmpeg-quick.js pixelate test-input.mp4 -y
node bin/ffmpeg-quick.js timecode test-input.mp4 -y
node bin/ffmpeg-quick.js compare test-input.mp4 test-input.mp4 -y
node bin/ffmpeg-quick.js progress test-input.mp4 2 -y
node bin/ffmpeg-quick.js backdrop test-input.mp4 --size 640x480 -y
node bin/ffmpeg-quick.js gif-to-video test-input-gif.gif -y
node bin/ffmpeg-quick.js count-frames test-input.mp4
node bin/ffmpeg-quick.js motion-blur test-input.mp4 -y
node bin/ffmpeg-quick.js border test-input.mp4 -y
node bin/ffmpeg-quick.js duration test-input.mp4