feat: add 6 new commands — motion-blur, border, multi-audio, duration… #15
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| - 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 |