This commit is contained in:
Sam Lavigne 2023-08-18 17:23:56 -04:00
parent 74eadfce99
commit 94279a0265
21 changed files with 47817 additions and 2 deletions

26
.gitignore vendored Normal file
View File

@ -0,0 +1,26 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
venv/
*.mp4
node_modules
dist
dist-ssr
*.local
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

3
.vscode/extensions.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"recommendations": ["svelte.svelte-vscode"]
}

1
README.md Normal file
View File

@ -0,0 +1 @@
# Interactive FFMPEG Command Generator

484
filternames.txt Normal file
View File

@ -0,0 +1,484 @@
... abench A->A Benchmark part of a filtergraph.
..C acompressor A->A Audio compressor.
... acontrast A->A Simple audio dynamic range compression/expansion filter.
... acopy A->A Copy the input audio unchanged to the output.
... acue A->A Delay filtering to match a cue.
... acrossfade AA->A Cross fade two input audio streams.
.S. acrossover A->N Split audio into per-bands streams.
T.C acrusher A->A Reduce audio bit resolution.
TS. adeclick A->A Remove impulsive noise from input audio.
TS. adeclip A->A Remove clipping from input audio.
TS. adecorrelate A->A Apply decorrelation to input audio.
T.C adelay A->A Delay one or more audio channels.
TSC adenorm A->A Remedy denormals by adding extremely low-level noise.
T.. aderivative A->A Compute derivative of input audio.
TSC adrc A->A Audio Spectral Dynamic Range Controller.
TSC adynamicequalizer A->A Apply Dynamic Equalization of input audio.
T.C adynamicsmooth A->A Apply Dynamic Smoothing of input audio.
... aecho A->A Add echoing to the audio.
TSC aemphasis A->A Audio emphasis.
T.. aeval A->A Filter audio signal according to a specified expression.
T.C aexciter A->A Enhance high frequency part of audio.
T.C afade A->A Fade in/out input audio.
TSC afftdn A->A Denoise audio samples using FFT.
TS. afftfilt A->A Apply arbitrary expressions to samples in frequency domain.
.SC afir N->N Apply Finite Impulse Response filter with supplied coefficients in additional stream(s).
... aformat A->A Convert the input audio to one of the specified formats.
TSC afreqshift A->A Apply frequency shifting to input audio.
TSC afwtdn A->A Denoise audio stream using Wavelets.
T.C agate A->A Audio gate.
.S. aiir A->N Apply Infinite Impulse Response filter with supplied coefficients.
T.. aintegral A->A Compute integral of input audio.
... ainterleave N->A Temporally interleave audio inputs.
T.. alatency A->A Report audio filtering latency.
T.C alimiter A->A Audio lookahead limiter.
TSC allpass A->A Apply a two-pole all-pass filter.
... aloop A->A Loop audio samples.
... amerge N->A Merge two or more audio streams into a single multi-channel stream.
T.. ametadata A->A Manipulate audio frame metadata.
..C amix N->A Audio mixing.
... amultiply AA->A Multiply two audio streams.
TSC anequalizer A->N Apply high-order audio parametric multi band equalizer.
TSC anlmdn A->A Reduce broadband noise from stream using Non-Local Means.
TSC anlmf AA->A Apply Normalized Least-Mean-Fourth algorithm to first audio stream.
TSC anlms AA->A Apply Normalized Least-Mean-Squares algorithm to first audio stream.
... anull A->A Pass the source unchanged to the output.
T.. apad A->A Pad audio with silence.
T.C aperms A->A Set permissions for the output audio frame.
... aphaser A->A Add a phasing effect to the audio.
TSC aphaseshift A->A Apply phase shifting to input audio.
TSC apsyclip A->A Audio Psychoacoustic Clipper.
... apulsator A->A Audio pulsator.
..C arealtime A->A Slow down filtering to match realtime.
... aresample A->A Resample audio data.
... areverse A->A Reverse an audio clip.
TSC arnndn A->A Reduce noise from speech using Recurrent Neural Networks.
... asdr AA->A Measure Audio Signal-to-Distortion Ratio.
... asegment A->N Segment audio stream.
... aselect A->N Select audio frames to pass in output.
... asendcmd A->A Send commands to filters.
... asetnsamples A->A Set the number of samples for each output audio frames.
... asetpts A->A Set PTS for the output audio frame.
... asetrate A->A Change the sample rate without altering the data.
... asettb A->A Set timebase for the audio output link.
... ashowinfo A->A Show textual information for each audio frame.
T.. asidedata A->A Manipulate audio frame side data.
TSC asoftclip A->A Audio Soft Clipper.
.S. aspectralstats A->A Show frequency domain statistics about audio frames.
... asplit A->N Pass on the audio input to N audio outputs.
.S. astats A->A Show time domain statistics about audio frames.
..C astreamselect N->N Select audio streams
TSC asubboost A->A Boost subwoofer frequencies.
TSC asubcut A->A Cut subwoofer frequencies.
TSC asupercut A->A Cut super frequencies.
TSC asuperpass A->A Apply high order Butterworth band-pass filter.
TSC asuperstop A->A Apply high order Butterworth band-stop filter.
..C atempo A->A Adjust audio tempo.
TSC atilt A->A Apply spectral tilt to audio.
... atrim A->A Pick one continuous section from the input, drop the rest.
... axcorrelate AA->A Cross-correlate two audio streams.
... azmq A->A Receive commands through ZMQ and broker them to filters.
TSC bandpass A->A Apply a two-pole Butterworth band-pass filter.
TSC bandreject A->A Apply a two-pole Butterworth band-reject filter.
TSC bass A->A Boost or cut lower frequencies.
TSC biquad A->A Apply a biquad IIR filter with the given coefficients.
... channelmap A->A Remap audio channels.
... channelsplit A->N Split audio into per-channel streams.
... chorus A->A Add a chorus effect to the audio.
... compand A->A Compress or expand audio dynamic range.
T.C compensationdelay A->A Audio Compensation Delay Line.
T.C crossfeed A->A Apply headphone crossfeed filter.
TSC crystalizer A->A Simple audio noise sharpening filter.
T.. dcshift A->A Apply a DC shift to the audio.
T.. deesser A->A Apply de-essing to the audio.
T.C dialoguenhance A->A Audio Dialogue Enhancement.
... drmeter A->A Measure audio dynamic range.
TSC dynaudnorm A->A Dynamic Audio Normalizer.
... earwax A->A Widen the stereo image.
... ebur128 A->N EBU R128 scanner.
TSC equalizer A->A Apply two-pole peaking equalization (EQ) filter.
T.C extrastereo A->A Increase difference between stereo audio channels.
..C firequalizer A->A Finite Impulse Response Equalizer.
... flanger A->A Apply a flanging effect to the audio.
... haas A->A Apply Haas Stereo Enhancer.
... hdcd A->A Apply High Definition Compatible Digital (HDCD) decoding.
.S. headphone N->A Apply headphone binaural spatialization with HRTFs in additional streams.
TSC highpass A->A Apply a high-pass filter with 3dB point frequency.
TSC highshelf A->A Apply a high shelf filter.
... join N->A Join multiple audio streams into multi-channel output.
... loudnorm A->A EBU R128 loudness normalization
TSC lowpass A->A Apply a low-pass filter with 3dB point frequency.
TSC lowshelf A->A Apply a low shelf filter.
... mcompand A->A Multiband Compress or expand audio dynamic range.
... pan A->A Remix channels with coefficients (panning).
... replaygain A->A ReplayGain scanner.
..C rubberband A->A Apply time-stretching and pitch-shifting.
..C sidechaincompress AA->A Sidechain compressor.
T.C sidechaingate AA->A Audio sidechain gate.
... silencedetect A->A Detect silence.
... silenceremove A->A Remove silence.
T.C speechnorm A->A Speech Normalizer.
T.C stereotools A->A Apply various stereo tools.
T.C stereowiden A->A Apply stereo widening effect.
... superequalizer A->A Apply 18 band equalization filter.
.SC surround A->A Apply audio surround upmix filter.
TSC tiltshelf A->A Apply a tilt shelf filter.
TSC treble A->A Boost or cut upper frequencies.
T.. tremolo A->A Apply tremolo effect.
T.. vibrato A->A Apply vibrato effect.
T.C virtualbass A->A Audio Virtual Bass.
T.C volume A->A Change input volume.
... volumedetect A->A Detect audio volume.
... aevalsrc |->A Generate an audio signal generated by an expression.
... afdelaysrc |->A Generate a Fractional delay FIR coefficients.
... afirsrc |->A Generate a FIR coefficients audio stream.
... anoisesrc |->A Generate a noise audio signal.
... anullsrc |->A Null audio source, return empty audio frames.
... hilbert |->A Generate a Hilbert transform FIR coefficients.
... sinc |->A Generate a sinc kaiser-windowed low-pass, high-pass, band-pass, or band-reject FIR coefficients.
... sine |->A Generate sine wave audio signal.
... anullsink A->| Do absolutely nothing with the input audio.
... addroi V->V Add region of interest to frame.
... alphaextract V->V Extract an alpha channel as a grayscale image component.
T.. alphamerge VV->V Copy the luma value of the second input into the alpha channel of the first input.
TSC amplify V->V Amplify changes between successive video frames.
... ass V->V Render ASS subtitles onto input video using the libass library.
TSC atadenoise V->V Apply an Adaptive Temporal Averaging Denoiser.
T.C avgblur V->V Apply Average Blur filter.
TSC backgroundkey V->V Turns a static background into transparency.
T.C bbox V->V Compute bounding box for each frame.
... bench V->V Benchmark part of a filtergraph.
TSC bilateral V->V Apply Bilateral filter.
T.. bitplanenoise V->V Measure bit plane noise.
.S. blackdetect V->V Detect video intervals that are (almost) black.
... blackframe V->V Detect frames that are (almost) black.
TSC blend VV->V Blend two video frames into each other.
... blockdetect V->V Blockdetect filter.
... blurdetect V->V Blurdetect filter.
TS. bm3d N->V Block-Matching 3D denoiser.
T.. boxblur V->V Blur the input.
TS. bwdif V->V Deinterlace the input image.
TSC cas V->V Contrast Adaptive Sharpen.
TSC chromahold V->V Turns a certain color range into gray.
TSC chromakey V->V Turns a certain color into transparency. Operates on YUV colors.
TSC chromanr V->V Reduce chrominance noise.
TSC chromashift V->V Shift chroma.
... ciescope V->V Video CIE scope.
T.. codecview V->V Visualize information about some codecs.
TSC colorbalance V->V Adjust the color balance.
TSC colorchannelmixer V->V Adjust colors by mixing color channels.
TSC colorcontrast V->V Adjust color contrast between RGB components.
TSC colorcorrect V->V Adjust color white balance selectively for blacks and whites.
TSC colorize V->V Overlay a solid color on the video stream.
TSC colorkey V->V Turns a certain color into transparency. Operates on RGB colors.
TSC colorhold V->V Turns a certain color range into gray. Operates on RGB colors.
TSC colorlevels V->V Adjust the color levels.
TSC colormap VVV->V Apply custom Color Maps to video stream.
TS. colormatrix V->V Convert color matrix.
TS. colorspace V->V Convert between colorspaces.
TSC colortemperature V->V Adjust color temperature of video.
TSC convolution V->V Apply convolution filter.
TS. convolve VV->V Convolve first video stream with second video stream.
... copy V->V Copy the input video unchanged to the output.
... coreimage V->V Video filtering using CoreImage API.
T.. corr VV->V Calculate the correlation between two video streams.
... cover_rect V->V Find and cover a user specified object.
..C crop V->V Crop the input video.
T.C cropdetect V->V Auto-detect crop size.
... cue V->V Delay filtering to match a cue.
TSC curves V->V Adjust components curves.
.SC datascope V->V Video data analysis.
T.C dblur V->V Apply Directional Blur filter.
TS. dctdnoiz V->V Denoise frames using 2D DCT.
TSC deband V->V Debands video.
T.C deblock V->V Deblock video.
... decimate N->V Decimate frames (post field matching filter).
TS. deconvolve VV->V Deconvolve first video stream with second video stream.
TS. dedot V->V Reduce cross-luminance and cross-color.
TSC deflate V->V Apply deflate effect.
... deflicker V->V Remove temporal frame luminance variations.
... dejudder V->V Remove judder produced by pullup.
T.. delogo V->V Remove logo from input video.
T.. derain V->V Apply derain filter to the input.
... deshake V->V Stabilize shaky video.
TSC despill V->V Despill video.
... detelecine V->V Apply an inverse telecine pattern.
TSC dilation V->V Apply dilation effect.
T.. displace VVV->V Displace pixels.
... dnn_classify V->V Apply DNN classify filter to the input.
... dnn_detect V->V Apply DNN detect filter to the input.
... dnn_processing V->V Apply DNN processing filter to the input.
.S. doubleweave V->V Weave input video fields into double number of frames.
T.C drawbox V->V Draw a colored box on the input video.
... drawgraph V->V Draw a graph using input video metadata.
T.C drawgrid V->V Draw a colored grid on the input video.
T.C drawtext V->V Draw text on top of video frames using libfreetype library.
T.. edgedetect V->V Detect and draw edge.
... elbg V->V Apply posterize effect, using the ELBG algorithm.
T.. entropy V->V Measure video frames entropy.
.S. epx V->V Scale the input using EPX algorithm.
T.C eq V->V Adjust brightness, contrast, gamma, and saturation.
TSC erosion V->V Apply erosion effect.
TSC estdif V->V Apply Edge Slope Tracing deinterlace.
TSC exposure V->V Adjust exposure of the video stream.
... extractplanes V->N Extract planes as grayscale frames.
TS. fade V->V Fade in/out input video.
..C feedback VV->VV Apply feedback video filter.
TSC fftdnoiz V->V Denoise frames using 3D FFT.
TS. fftfilt V->V Apply arbitrary expressions to pixels in frequency domain.
... field V->V Extract a field from the input video.
... fieldhint V->V Field matching using hints.
... fieldmatch N->V Field matching for inverse telecine.
T.. fieldorder V->V Set the field order.
T.C fillborders V->V Fill borders of the input video.
... find_rect V->V Find a user specified object.
T.. floodfill V->V Fill area with same color with another color.
... format V->V Convert the input video to one of the specified pixel formats.
... fps V->V Force constant framerate.
... framepack VV->V Generate a frame packed stereoscopic video.
.S. framerate V->V Upsamples or downsamples progressive source between specified frame rates.
T.. framestep V->V Select one frame every N frames.
... freezedetect V->V Detects frozen video input.
... freezeframes VV->V Freeze video frames.
T.C frei0r V->V Apply a frei0r effect.
T.. fspp V->V Apply Fast Simple Post-processing filter.
TSC gblur V->V Apply Gaussian Blur filter.
TS. geq V->V Apply generic equation to each pixel.
T.. gradfun V->V Debands video quickly using gradients.
... graphmonitor V->V Show various filtergraph stats.
TS. grayworld V->V Adjust white balance using LAB gray world algorithm
TS. greyedge V->V Estimates scene illumination by grey edge assumption.
TSC guided N->V Apply Guided filter.
TSC haldclut VV->V Adjust colors using a Hald CLUT.
TS. hflip V->V Horizontally flip the input video.
T.. histeq V->V Apply global color histogram equalization.
... histogram V->V Compute and draw a histogram.
TSC hqdn3d V->V Apply a High Quality 3D Denoiser.
.S. hqx V->V Scale the input by 2, 3 or 4 using the hq*x magnification algorithm.
.S. hstack N->V Stack video inputs horizontally.
TSC hsvhold V->V Turns a certain HSV range into gray.
TSC hsvkey V->V Turns a certain HSV range into transparency. Operates on YUV colors.
T.C hue V->V Adjust the hue and saturation of the input video.
TSC huesaturation V->V Apply hue-saturation-intensity adjustments.
... hwdownload V->V Download a hardware frame to a normal frame
... hwmap V->V Map hardware frames
... hwupload V->V Upload a normal frame to a hardware frame
T.. hysteresis VV->V Grow first stream into second stream by connecting components.
TS. identity VV->V Calculate the Identity between two video streams.
... idet V->V Interlace detect Filter.
T.C il V->V Deinterleave or interleave fields.
TSC inflate V->V Apply inflate effect.
... interlace V->V Convert progressive video into interlaced.
... interleave N->V Temporally interleave video inputs.
... kerndeint V->V Apply kernel deinterlacing to the input.
TSC kirsch V->V Apply kirsch operator.
TSC lagfun V->V Slowly update darker pixels.
T.. latency V->V Report video filtering latency.
TSC lenscorrection V->V Rectify the image by correcting for lens distortion.
... libvmaf VV->V Calculate the VMAF between two video streams.
TSC limitdiff N->V Apply filtering with limiting difference.
TSC limiter V->V Limit pixels components to the specified range.
... loop V->V Loop video frames.
TSC lumakey V->V Turns a certain luma into transparency.
TSC lut V->V Compute and apply a lookup table to the RGB/YUV input video.
TSC lut1d V->V Adjust colors using a 1D LUT.
TSC lut2 VV->V Compute and apply a lookup table from two video inputs.
TSC lut3d V->V Adjust colors using a 3D LUT.
TSC lutrgb V->V Compute and apply a lookup table to the RGB input video.
TSC lutyuv V->V Compute and apply a lookup table to the YUV input video.
TSC maskedclamp VVV->V Clamp first stream with second stream and third stream.
TSC maskedmax VVV->V Apply filtering with maximum difference of two streams.
TSC maskedmerge VVV->V Merge first stream with second stream using third stream as mask.
TSC maskedmin VVV->V Apply filtering with minimum difference of two streams.
TSC maskedthreshold VV->V Pick pixels comparing absolute difference of two streams with threshold.
TSC maskfun V->V Create Mask.
TSC median V->V Apply Median filter.
... mergeplanes N->V Merge planes.
... mestimate V->V Generate motion vectors.
T.. metadata V->V Manipulate video frame metadata.
T.. midequalizer VV->V Apply Midway Equalization.
... minterpolate V->V Frame rate conversion using Motion Interpolation.
TSC mix N->V Mix video inputs.
TSC monochrome V->V Convert video to gray using custom color filter.
T.C morpho VV->V Apply Morphological filter.
... mpdecimate V->V Remove near-duplicate frames.
TS. msad VV->V Calculate the MSAD between two video streams.
TSC multiply VV->V Multiply first video stream with second video stream.
TSC negate V->V Negate input video.
TS. nlmeans V->V Non-local means denoiser.
TSC nnedi V->V Apply neural network edge directed interpolation intra-only deinterlacer.
... noformat V->V Force libavfilter not to use any of the specified pixel formats for the input to the next filter.
TS. noise V->V Add noise.
T.C normalize V->V Normalize RGB video.
... null V->V Pass the source unchanged to the output.
... ocr V->V Optical Character Recognition.
T.C oscilloscope V->V 2D Video Oscilloscope.
TSC overlay VV->V Overlay a video source on top of the input.
T.. owdenoise V->V Denoise using wavelets.
... pad V->V Pad the input video.
... palettegen V->V Find the optimal palette for a given stream.
... paletteuse VV->V Use a palette to downsample an input video stream.
T.C perms V->V Set permissions for the output video frame.
TS. perspective V->V Correct the perspective of video.
T.C phase V->V Phase shift fields.
... photosensitivity V->V Filter out photosensitive epilepsy seizure-inducing flashes.
... pixdesctest V->V Test pixel format definitions.
TSC pixelize V->V Pixelize video.
T.C pixscope V->V Pixel data analysis.
T.C pp V->V Filter video using libpostproc.
T.. pp7 V->V Apply Postprocessing 7 filter.
TS. premultiply N->V PreMultiply first stream with first plane of second stream.
TSC prewitt V->V Apply prewitt operator.
TSC pseudocolor V->V Make pseudocolored video frames.
TS. psnr VV->V Calculate the PSNR between two video streams.
... pullup V->V Pullup from field sequence to frames.
T.. qp V->V Change video quantization parameters.
... random V->V Return random frames.
TSC readeia608 V->V Read EIA-608 Closed Caption codes from input video and write them to frame metadata.
... readvitc V->V Read vertical interval timecode and write it to frame metadata.
..C realtime V->V Slow down filtering to match realtime.
.S. remap VVV->V Remap pixels.
TS. removegrain V->V Remove grain.
T.. removelogo V->V Remove a TV logo based on a mask image.
... repeatfields V->V Hard repeat fields based on MPEG repeat field flag.
... reverse V->V Reverse a clip.
TSC rgbashift V->V Shift RGBA.
TSC roberts V->V Apply roberts cross operator.
TSC rotate V->V Rotate the input image.
T.. sab V->V Apply shape adaptive blur.
..C scale V->V Scale the input video size and/or convert the image format.
..C scale2ref VV->VV Scale the input video size and/or convert the image format to the given reference.
... scdet V->V Detect video scene change
TSC scharr V->V Apply scharr operator.
TSC scroll V->V Scroll input video.
... segment V->N Segment video stream.
... select V->N Select video frames to pass in output.
TS. selectivecolor V->V Apply CMYK adjustments to specific color ranges.
... sendcmd V->V Send commands to filters.
... separatefields V->V Split input video frames into fields.
... setdar V->V Set the frame display aspect ratio.
... setfield V->V Force field for the output video frame.
... setparams V->V Force field, or color property for the output video frame.
... setpts V->V Set PTS for the output video frame.
... setrange V->V Force color range for the output video frame.
... setsar V->V Set the pixel sample aspect ratio.
... settb V->V Set timebase for the video output link.
TSC shear V->V Shear transform the input image.
... showinfo V->V Show textual information for each video frame.
... showpalette V->V Display frame palette.
T.. shuffleframes V->V Shuffle video frames.
TS. shufflepixels V->V Shuffle video pixels.
T.. shuffleplanes V->V Shuffle video planes.
T.. sidedata V->V Manipulate video frame side data.
.S. signalstats V->V Generate statistics from video analysis.
... signature N->V Calculate the MPEG-7 video signature
... siti V->V Calculate spatial information (SI) and temporal information (TI).
T.. smartblur V->V Blur the input video without impacting the outlines.
TSC sobel V->V Apply sobel operator.
... split V->N Pass on the input to N video outputs.
T.C spp V->V Apply a simple post processing filter.
... sr V->V Apply DNN-based image super resolution to the input.
TS. ssim VV->V Calculate the SSIM between two video streams.
... ssim360 VV->V Calculate the SSIM between two 360 video streams.
.S. stereo3d V->V Convert video stereoscopic 3D view.
..C streamselect N->N Select video streams
... subtitles V->V Render text subtitles onto input video using the libass library.
.S. super2xsai V->V Scale the input by 2x using the Super2xSaI pixel art algorithm.
T.C swaprect V->V Swap 2 rectangular objects in video.
T.. swapuv V->V Swap U and V components.
TSC tblend V->V Blend successive frames.
... telecine V->V Apply a telecine pattern.
... thistogram V->V Compute and draw a temporal histogram.
TSC threshold VVVV->V Threshold first video stream using other video streams.
TS. thumbnail V->V Select the most representative frame in a given sequence of consecutive frames.
... tile V->V Tile several successive frames together.
... tinterlace V->V Perform temporal field interlacing.
TSC tlut2 V->V Compute and apply a lookup table from two successive frames.
TSC tmedian V->V Pick median pixels from successive frames.
T.. tmidequalizer V->V Apply Temporal Midway Equalization.
TSC tmix V->V Mix successive video frames.
.S. tonemap V->V Conversion to/from different dynamic ranges.
... tpad V->V Temporarily pad video frames.
.S. transpose V->V Transpose input video.
... trim V->V Pick one continuous section from the input, drop the rest.
TS. unpremultiply N->V UnPreMultiply first stream with first plane of second stream.
TS. unsharp V->V Sharpen or blur the input video.
... untile V->V Untile a frame into a sequence of frames.
.SC v360 V->V Convert 360 projection of video.
T.. vaguedenoiser V->V Apply a Wavelet based Denoiser.
TSC varblur VV->V Apply Variable Blur filter.
..C vectorscope V->V Video vectorscope.
T.. vflip V->V Flip the input video vertically.
... vfrdet V->V Variable frame rate detect filter.
TSC vibrance V->V Boost or alter saturation.
... vidstabdetect V->V Extract relative transformations, pass 1 of 2 for stabilization (see vidstabtransform for pass 2).
... vidstabtransform V->V Transform the frames, pass 2 of 2 for stabilization (see vidstabdetect for pass 1).
TS. vif VV->V Calculate the VIF between two video streams.
T.. vignette V->V Make or reverse a vignette effect.
... vmafmotion V->V Calculate the VMAF Motion score.
.S. vstack N->V Stack video inputs vertically.
TSC w3fdif V->V Apply Martin Weston three field deinterlace.
.SC waveform V->V Video waveform monitor.
.S. weave V->V Weave input video fields into frames.
.S. xbr V->V Scale the input using xBR algorithm.
TS. xcorrelate VV->V Cross-correlate first video stream with second video stream.
.S. xfade VV->V Cross fade one video with another video.
TSC xmedian N->V Pick median pixels from several video inputs.
.S. xstack N->V Stack video inputs into custom layout.
TS. yadif V->V Deinterlace the input image.
T.. yadif_videotoolbox V->V YADIF for VideoToolbox frames using Metal compute
TSC yaepblur V->V Yet another edge preserving blur filter.
... zmq V->V Receive commands through ZMQ and broker them to filters.
... zoompan V->V Apply Zoom & Pan effect.
.SC zscale V->V Apply resizing, colorspace and bit depth conversion.
... allrgb |->V Generate all RGB colors.
... allyuv |->V Generate all yuv colors.
... cellauto |->V Create pattern generated by an elementary cellular automaton.
..C color |->V Provide an uniformly colored input.
... colorchart |->V Generate color checker chart.
... colorspectrum |->V Generate colors spectrum.
... coreimagesrc |->V Video source using image generators of CoreImage API.
... frei0r_src |->V Generate a frei0r source.
.S. gradients |->V Draw a gradients.
... haldclutsrc |->V Provide an identity Hald CLUT.
... life |->V Create life.
... mandelbrot |->V Render a Mandelbrot fractal.
... mptestsrc |->V Generate various test pattern.
... nullsrc |->V Null video source, return unprocessed video frames.
... pal75bars |->V Generate PAL 75% color bars.
... pal100bars |->V Generate PAL 100% color bars.
... rgbtestsrc |->V Generate RGB test pattern.
.S. sierpinski |->V Render a Sierpinski fractal.
... smptebars |->V Generate SMPTE color bars.
... smptehdbars |->V Generate SMPTE HD color bars.
... testsrc |->V Generate test pattern.
... testsrc2 |->V Generate another test pattern.
... yuvtestsrc |->V Generate YUV test pattern.
... nullsink V->| Do absolutely nothing with the input video.
..C a3dscope A->V Convert input audio to 3d scope video output.
... abitscope A->V Convert input audio to audio bit scope video output.
... adrawgraph A->V Draw a graph using input audio metadata.
... agraphmonitor A->V Show various filtergraph stats.
... ahistogram A->V Convert input audio to histogram video output.
... aphasemeter A->N Convert input audio to phase meter video output.
.SC avectorscope A->V Convert input audio to vectorscope video output.
..C concat N->N Concatenate audio and video streams.
... showcqt A->V Convert input audio to a CQT (Constant/Clamped Q Transform) spectrum video output.
.S. showcwt A->V Convert input audio to a CWT (Continuous Wavelet Transform) spectrum video output.
... showfreqs A->V Convert input audio to a frequencies video output.
.S. showspatial A->V Convert input audio to a spatial video output.
.S. showspectrum A->V Convert input audio to a spectrum video output.
.S. showspectrumpic A->V Convert input audio to a spectrum video output single picture.
... showvolume A->V Convert input audio volume to video output.
... showwaves A->V Convert input audio to a video output.
... showwavespic A->V Convert input audio to a video output single picture.
... spectrumsynth VV->A Convert input spectrum videos to audio output.
... avsynctest |->AV Generate an Audio Video Sync Test.
..C amovie |->N Read audio from a movie source.
..C movie |->N Read from a movie source.
... afifo A->A Buffer input frames and send them when they are requested.
... fifo V->V Buffer input images and send them when they are requested.
... abuffer |->A Buffer audio frames, and make them accessible to the filterchain.
... buffer |->V Buffer video frames, and make them accessible to the filterchain.
... abuffersink A->| Buffer audio frames, and make them available to the end of the filter graph.
... buffersink V->| Buffer video frames, and make them available to the end of the filter graph.

13
index.html Normal file
View File

@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + Svelte</title>
</head>
<body>
<div id="app"></div>
<script type="module" src="/src/main.js"></script>
</body>
</html>

32
jsconfig.json Normal file
View File

@ -0,0 +1,32 @@
{
"compilerOptions": {
"moduleResolution": "bundler",
"target": "ESNext",
"module": "ESNext",
/**
* svelte-preprocess cannot figure out whether you have
* a value or a type, so tell TypeScript to enforce using
* `import type` instead of `import` for Types.
*/
"verbatimModuleSyntax": true,
"isolatedModules": true,
"resolveJsonModule": true,
/**
* To have warnings / errors of the Svelte compiler at the
* correct position, enable source maps by default.
*/
"sourceMap": true,
"esModuleInterop": true,
"skipLibCheck": true,
/**
* Typecheck JS in `.svelte` and `.js` files by default.
* Disable this if you'd like to use dynamic types.
*/
"checkJs": true
},
/**
* Use global.d.ts instead of compilerOptions.types
* to avoid limiting type declarations.
*/
"include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"]
}

867
package-lock.json generated Normal file
View File

@ -0,0 +1,867 @@
{
"name": "ffmpeg-builder",
"version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ffmpeg-builder",
"version": "0.0.0",
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.4.2",
"svelte": "^4.0.5",
"vite": "^4.4.5"
}
},
"node_modules/@ampproject/remapping": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@esbuild/android-arm": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
"integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
"integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/android-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
"integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
"integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/darwin-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
"integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
"integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/freebsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
"integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
"integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
"cpu": [
"arm"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
"integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ia32": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
"integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-loong64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
"integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
"cpu": [
"loong64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-mips64el": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
"integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
"cpu": [
"mips64el"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-ppc64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
"integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
"cpu": [
"ppc64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-riscv64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
"integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
"cpu": [
"riscv64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-s390x": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
"integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
"cpu": [
"s390x"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/linux-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
"integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/netbsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
"integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"netbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/openbsd-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
"integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"openbsd"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/sunos-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
"integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"sunos"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
"integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
"cpu": [
"arm64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-ia32": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
"integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
"cpu": [
"ia32"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@esbuild/win32-x64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
"integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
"cpu": [
"x64"
],
"dev": true,
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=12"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.3",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.4.15",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.19",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
"integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@sveltejs/vite-plugin-svelte": {
"version": "2.4.5",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.5.tgz",
"integrity": "sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==",
"dev": true,
"dependencies": {
"@sveltejs/vite-plugin-svelte-inspector": "^1.0.3",
"debug": "^4.3.4",
"deepmerge": "^4.3.1",
"kleur": "^4.1.5",
"magic-string": "^0.30.2",
"svelte-hmr": "^0.15.3",
"vitefu": "^0.2.4"
},
"engines": {
"node": "^14.18.0 || >= 16"
},
"peerDependencies": {
"svelte": "^3.54.0 || ^4.0.0",
"vite": "^4.0.0"
}
},
"node_modules/@sveltejs/vite-plugin-svelte-inspector": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.3.tgz",
"integrity": "sha512-Khdl5jmmPN6SUsVuqSXatKpQTMIifoQPDanaxC84m9JxIibWvSABJyHpyys0Z+1yYrxY5TTEQm+6elh0XCMaOA==",
"dev": true,
"dependencies": {
"debug": "^4.3.4"
},
"engines": {
"node": "^14.18.0 || >= 16"
},
"peerDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.2.0",
"svelte": "^3.54.0 || ^4.0.0",
"vite": "^4.0.0"
}
},
"node_modules/@types/estree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
"integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
"dev": true
},
"node_modules/acorn": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
"integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/aria-query": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz",
"integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==",
"dev": true,
"dependencies": {
"dequal": "^2.0.3"
}
},
"node_modules/axobject-query": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz",
"integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==",
"dev": true,
"dependencies": {
"dequal": "^2.0.3"
}
},
"node_modules/code-red": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz",
"integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15",
"@types/estree": "^1.0.1",
"acorn": "^8.10.0",
"estree-walker": "^3.0.3",
"periscopic": "^3.1.0"
}
},
"node_modules/css-tree": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"dependencies": {
"mdn-data": "2.0.30",
"source-map-js": "^1.0.1"
},
"engines": {
"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
"dev": true,
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/deepmerge": {
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/dequal": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
"integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/esbuild": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
"integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
},
"engines": {
"node": ">=12"
},
"optionalDependencies": {
"@esbuild/android-arm": "0.18.20",
"@esbuild/android-arm64": "0.18.20",
"@esbuild/android-x64": "0.18.20",
"@esbuild/darwin-arm64": "0.18.20",
"@esbuild/darwin-x64": "0.18.20",
"@esbuild/freebsd-arm64": "0.18.20",
"@esbuild/freebsd-x64": "0.18.20",
"@esbuild/linux-arm": "0.18.20",
"@esbuild/linux-arm64": "0.18.20",
"@esbuild/linux-ia32": "0.18.20",
"@esbuild/linux-loong64": "0.18.20",
"@esbuild/linux-mips64el": "0.18.20",
"@esbuild/linux-ppc64": "0.18.20",
"@esbuild/linux-riscv64": "0.18.20",
"@esbuild/linux-s390x": "0.18.20",
"@esbuild/linux-x64": "0.18.20",
"@esbuild/netbsd-x64": "0.18.20",
"@esbuild/openbsd-x64": "0.18.20",
"@esbuild/sunos-x64": "0.18.20",
"@esbuild/win32-arm64": "0.18.20",
"@esbuild/win32-ia32": "0.18.20",
"@esbuild/win32-x64": "0.18.20"
}
},
"node_modules/estree-walker": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
"integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.0"
}
},
"node_modules/fsevents": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
"integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
"dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
}
},
"node_modules/is-reference": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz",
"integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==",
"dev": true,
"dependencies": {
"@types/estree": "*"
}
},
"node_modules/kleur": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/locate-character": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
"integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
"dev": true
},
"node_modules/magic-string": {
"version": "0.30.2",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz",
"integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==",
"dev": true,
"dependencies": {
"@jridgewell/sourcemap-codec": "^1.4.15"
},
"engines": {
"node": ">=12"
}
},
"node_modules/mdn-data": {
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
"dev": true
},
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"node_modules/nanoid": {
"version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
"engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
"node_modules/periscopic": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
"integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==",
"dev": true,
"dependencies": {
"@types/estree": "^1.0.0",
"estree-walker": "^3.0.0",
"is-reference": "^3.0.0"
}
},
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"node_modules/postcss": {
"version": "8.4.28",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz",
"integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
},
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
"nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
"engines": {
"node": "^10 || ^12 || >=14"
}
},
"node_modules/rollup": {
"version": "3.28.0",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.0.tgz",
"integrity": "sha512-d7zhvo1OUY2SXSM6pfNjgD5+d0Nz87CUp4mt8l/GgVP3oBsPwzNvSzyu1me6BSG9JIgWNTVcafIXBIyM8yQ3yw==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
"node": ">=14.18.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
}
},
"node_modules/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/svelte": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz",
"integrity": "sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.1",
"@jridgewell/sourcemap-codec": "^1.4.15",
"@jridgewell/trace-mapping": "^0.3.18",
"acorn": "^8.9.0",
"aria-query": "^5.3.0",
"axobject-query": "^3.2.1",
"code-red": "^1.0.3",
"css-tree": "^2.3.1",
"estree-walker": "^3.0.3",
"is-reference": "^3.0.1",
"locate-character": "^3.0.0",
"magic-string": "^0.30.0",
"periscopic": "^3.1.0"
},
"engines": {
"node": ">=16"
}
},
"node_modules/svelte-hmr": {
"version": "0.15.3",
"resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz",
"integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==",
"dev": true,
"engines": {
"node": "^12.20 || ^14.13.1 || >= 16"
},
"peerDependencies": {
"svelte": "^3.19.0 || ^4.0.0"
}
},
"node_modules/vite": {
"version": "4.4.9",
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz",
"integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==",
"dev": true,
"dependencies": {
"esbuild": "^0.18.10",
"postcss": "^8.4.27",
"rollup": "^3.27.1"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
"node": "^14.18.0 || >=16.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
"fsevents": "~2.3.2"
},
"peerDependencies": {
"@types/node": ">= 14",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
"stylus": "*",
"sugarss": "*",
"terser": "^5.4.0"
},
"peerDependenciesMeta": {
"@types/node": {
"optional": true
},
"less": {
"optional": true
},
"lightningcss": {
"optional": true
},
"sass": {
"optional": true
},
"stylus": {
"optional": true
},
"sugarss": {
"optional": true
},
"terser": {
"optional": true
}
}
},
"node_modules/vitefu": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz",
"integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==",
"dev": true,
"peerDependencies": {
"vite": "^3.0.0 || ^4.0.0"
},
"peerDependenciesMeta": {
"vite": {
"optional": true
}
}
}
}
}

16
package.json Normal file
View File

@ -0,0 +1,16 @@
{
"name": "ffmpeg-builder",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"devDependencies": {
"@sveltejs/vite-plugin-svelte": "^2.4.2",
"svelte": "^4.0.5",
"vite": "^4.4.5"
}
}

View File

@ -2,6 +2,7 @@ import json
import re import re
from subprocess import run from subprocess import run
def get_names(): def get_names():
filters = [] filters = []
@ -70,13 +71,26 @@ def get_params(f):
if item.get("max", 0) in ["INT_MAX", "FLT_MAX", "DBL_MAX", "I64_MAX"]: if item.get("max", 0) in ["INT_MAX", "FLT_MAX", "DBL_MAX", "I64_MAX"]:
item["max"] = 2147483647 item["max"] = 2147483647
if item.get("min", 0) in ["INT_MIN", "FLT_MIN", "DBL_MIN", "-DBL_MAX", "I64_MIN", "-FLT_MAX"]: if item.get("min", 0) in [
"INT_MIN",
"FLT_MIN",
"DBL_MIN",
"-DBL_MAX",
"I64_MIN",
"-FLT_MAX",
]:
item["min"] = -2147483648 item["min"] = -2147483648
if item.get("default", 0) in ["INT_MAX", "FLT_MAX", "DBL_MAX", "I64_MAX"]: if item.get("default", 0) in ["INT_MAX", "FLT_MAX", "DBL_MAX", "I64_MAX"]:
item["default"] = 2147483647 item["default"] = 2147483647
if item.get("default", 0) in ["INT_MIN", "FLT_MIN", "DBL_MIN", "-DBL_MAX", "I64_MAX"]: if item.get("default", 0) in [
"INT_MIN",
"FLT_MIN",
"DBL_MIN",
"-DBL_MAX",
"I64_MAX",
]:
item["default"] = -2147483648 item["default"] = -2147483648
if item["default"] == "nan": if item["default"] == "nan":
@ -97,6 +111,9 @@ def get_params(f):
except Exception as e: except Exception as e:
pass pass
if type(item["default"]) == str:
item["default"] = item["default"].replace("'", "").replace('"', "")
else: else:
item = {"value": parts[0], "desc": " ".join(parts[3:])} item = {"value": parts[0], "desc": " ".join(parts[3:])}
if "options" not in params[-1]: if "options" not in params[-1]:

31
run_all_filters.py Normal file
View File

@ -0,0 +1,31 @@
import json
from subprocess import run
import os
INP = "./video/example.mp4"
with open("./src/filters.json", "r") as infile:
filters = json.load(infile)
for f in filters:
outfile = f'./video/{f["name"]}.mp4'
if os.path.exists(outfile):
continue
params = None
if f.get("params"):
params = []
for p in f.get("params"):
if p.get("default"):
out = f'{p["name"]}={p["default"]}'
params.append(out)
params = ":".join(params)
filter_command = f["name"]
if params:
filter_command += "=" + params
command = ["ffmpeg", "-i", INP, "-y", "-filter_complex", filter_command, outfile]
run(command)

97
src/App.svelte Normal file
View File

@ -0,0 +1,97 @@
<script>
import FILTERS from "./filters.json";
import { inputs, output, filters } from "./stores.js";
import Input from "./Input.svelte";
import Output from "./Output.svelte";
import Filter from "./Filter.svelte";
function newInput() {
$inputs = [...$inputs, ""];
}
function newFilter() {
$filters = [...$filters, {}];
}
let command = "";
inputs.subscribe(updateCommand);
output.subscribe(updateCommand);
filters.subscribe(updateCommand);
function updateCommand() {
const cInputs = $inputs.map((i) => `-i ${i}`).join(" ");
const cOutput = $output;
const cFilters = $filters
.map((f) => {
let fCommand = f.name;
if (f.params && f.params.length > 0) {
let params = f.params
.map((p) => {
if (p.value === "" || p.value === null) return null;
return `${p.name}=${p.value}`;
})
.filter((p) => p !== null)
.join(":");
fCommand += "=" + params;
}
return fCommand;
})
.join(",");
let out = `ffmpeg ${cInputs}`;
if (cFilters) out += `-vf "${cFilters}"`;
out += ` ${cOutput}`;
command = out;
return out;
}
</script>
<main>
<section class="command">{command}</section>
<section class="inputs">
<h3>Inputs</h3>
{#each $inputs as inp, index}
<Input bind:filename={inp} {index} />
{/each}
<button on:click={newInput}>New Input</button>
{#each $inputs as inp}
<p>{inp}</p>
{/each}
</section>
<section class="filters">
<!-- {JSON.stringify($filters)} -->
<h3>Filters</h3>
<button on:click={newFilter}>Add Filter</button>
<div class="filters-holder">
{#each $filters as f, index}
<div class="filter">
<Filter bind:filter={f} {index} />
</div>
{/each}
</div>
</section>
<section class="output">
<h3>Output</h3>
<Output bind:filename={$output} />
<p>{$output}</p>
</section>
</main>
<style>
.filters-holder {
display: grid;
grid-template-columns: repeat(3, 1fr);
}
.filter {
margin: 10px;
}
</style>

128
src/Filter.svelte Normal file
View File

@ -0,0 +1,128 @@
<script>
import FILTERS from "./filters.json";
import { filters } from "./stores.js";
export let filter = {
name: "",
params: [],
description: "",
};
let filterIndex;
export let index;
console.log(index);
function remove() {
console.log(index);
$filters.splice(index, 1);
$filters = $filters;
}
function changeFilter() {
filter = {
name: current.name,
description: current.description,
params: current.params.map((p) => {
p.value = null;
if (p.default != null) p.value = p.default;
return p;
}),
};
console.log(filter);
}
$: current = FILTERS[filterIndex];
</script>
<div class="filter-holder">
<div class="head">
<select bind:value={filterIndex} on:change={changeFilter}>
<option />
{#each FILTERS as f, i}
<option value={i}>{f.name}</option>
{/each}
</select>
<button on:click={remove}>X</button>
</div>
{#if filter.name}
<div class="description">{current.description}</div>
{#if filter.params.length > 0}
<div class="options">
{#each filter.params as p}
<!-- <p>{p.min} {p.max} {p.default}</p> -->
<div class="param-holder">
<div class="param">
<span class="p-name">{p.name}</span>
<span class="p-value">
{#if p.options && p.options.length > 0}
<select bind:value={p.value}>
{#each p.options as o}
<option value={o.value}>{o.value}
{#if o.desc}({o.desc}){/if}
</option>
{/each}
</select>
{:else}
{#if p.type == "float" || p.type == "double" || p.type == "long" || p.type=="int"}
<input type="range" min={p.min} max={p.max} bind:value={p.value} />
<input bind:value={p.value} />
{:else}
<input bind:value={p.value} />
{/if}
{/if}
</span>
</div>
<div class="p-description">{p.desc}</div>
</div>
{/each}
</div>
{/if}
{/if}
</div>
<style>
.filter-holder {
background-color: #fff;
padding: 10px;
}
.filter-holder,
input,
select {
font-size: 14px;
font-family: "Times New Roman", Times, serif;
}
.description {
margin: 10px 0px;
}
.head {
display: flex;
justify-content: space-between;
}
.options {
/* margin-top: 10px; */
/* padding-top: 10px; */
}
.param {
margin-bottom: 5px;
display: flex;
justify-content: space-between;
}
.param-holder {
border-top: 1px solid #999;
padding: 10px 0px;
}
.param-holder:last-child {
padding-bottom: 0;
}
.p-description {
opacity: 0.8;
font-size: 0.9em;
}
p {
margin: 0;
}
</style>

15
src/Input.svelte Normal file
View File

@ -0,0 +1,15 @@
<script>
import { inputs } from './stores.js';
export let filename="";
export let index;
function remove() {
$inputs.splice(index, 1);
$inputs = $inputs;
}
</script>
<div>
<input bind:value={filename} />
<button on:click={remove}>Remove</button>
</div>

5
src/Output.svelte Normal file
View File

@ -0,0 +1,5 @@
<script>
export let filename="";
</script>
<input bind:value={filename} />

26
src/app.css Normal file
View File

@ -0,0 +1,26 @@
:root {
}
a {
}
a:hover {
}
body {
background-color: #eee;
}
h1 {
}
#app {
}
button {
}
button:hover {
}
button:focus,
button:focus-visible {
}

46025
src/filters.json Normal file

File diff suppressed because it is too large Load Diff

8
src/main.js Normal file
View File

@ -0,0 +1,8 @@
import './app.css'
import App from './App.svelte'
const app = new App({
target: document.getElementById('app'),
})
export default app

5
src/stores.js Normal file
View File

@ -0,0 +1,5 @@
import { writable } from 'svelte/store';
export const inputs = writable(["input.mp4"]);
export const output = writable("output.mp4");
export const filters = writable([]);

2
src/vite-env.d.ts vendored Normal file
View File

@ -0,0 +1,2 @@
/// <reference types="svelte" />
/// <reference types="vite/client" />

7
svelte.config.js Normal file
View File

@ -0,0 +1,7 @@
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
export default {
// Consult https://svelte.dev/docs#compile-time-svelte-preprocess
// for more information about preprocessors
preprocess: vitePreprocess(),
}

7
vite.config.js Normal file
View File

@ -0,0 +1,7 @@
import { defineConfig } from 'vite'
import { svelte } from '@sveltejs/vite-plugin-svelte'
// https://vitejs.dev/config/
export default defineConfig({
plugins: [svelte()],
})