Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/beenotung/silencecut-ffmpeg
Detect and remove silent sections from video using ffmpeg.
https://github.com/beenotung/silencecut-ffmpeg
audio-processing cli ffmpeg ffmpeg-filter media-editing silence-detect silence-remove typescript video-processing
Last synced: 4 months ago
JSON representation
Detect and remove silent sections from video using ffmpeg.
- Host: GitHub
- URL: https://github.com/beenotung/silencecut-ffmpeg
- Owner: beenotung
- License: bsd-2-clause
- Created: 2024-09-10T00:20:23.000Z (5 months ago)
- Default Branch: master
- Last Pushed: 2024-09-10T07:23:04.000Z (5 months ago)
- Last Synced: 2024-10-14T08:21:38.575Z (4 months ago)
- Topics: audio-processing, cli, ffmpeg, ffmpeg-filter, media-editing, silence-detect, silence-remove, typescript, video-processing
- Language: TypeScript
- Homepage: https://www.npmjs.com/package/silentremove-ffmpeg
- Size: 16.6 KB
- Stars: 7
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# silencecut-ffmpeg
Auto cut out silent sections from video using ffmpeg filter silencedetect and silenceremove.
[![npm Package Version](https://img.shields.io/npm/v/silencecut-ffmpeg)](https://www.npmjs.com/package/silencecut-ffmpeg)
## Features
- Typescript support
- Isomorphic package: works in Node.js and browsers## Installation (Optional)
This package can be invoked with npx without explicit installation.
### Option 1: Using `npx` without installation
You can run the tool directly from the npm registry without having to install it globally or locally:
```bash
npx -y silencecut-ffmpeg [options]
```The `-y` flag skip confirmation to download the package if it is not already cached.
This is convenient for one-off usage as it doesn’t require you to install or manage the tool. However, npx will check for updates each time it is invoked, which can add some overhead.
### Option 2: Install as a version-controlled dependency
To avoid the overhead of npx checking for updates on every run, you can install `silencecut-ffmpeg` as a project dependency. This also ensures that the version you install is locked and won’t apply breaking changes unless you explicitly update it.
Installing the package as a dependency also allows you to use the API programmatically from your Node.js or TypeScript code, enabling more advanced usage like integrating the tool into larger workflows.
Steps:
1. **Install the package** as a project dependency (this will add it to your `package.json`):
```bash
npm install silencecut-ffmpeg
```2. **Invoke the installed version** using `npx`:
```bash
npx silencecut-ffmpeg [options]
```You can also install `silencecut-ffmpeg` with [pnpm](https://pnpm.io/), [yarn](https://yarnpkg.com/), or [slnpm](https://github.com/beenotung/slnpm)
## Usage Example
You can use `silencecut-ffmpeg` from cli or from nodejs.
### Cli Usage
```bash
silencecut-ffmpeg [options]
```#### Cli Options
- `-i, --input `: Input file path (required)
- `-d, --duration-threshold `: Duration threshold in seconds (default: 1)
- `-n, --noise-level-threshold `: Noise level threshold in dB (default: -50)
- `-v, --version`: Show the version number
- `-h, --help`: Show this help message#### Cli Usage Examples
1. **Using default duration (1 second) and noise level (-50 dB) thresholds**:
```bash
silencecut-ffmpeg -i in.mp4 out.mp4
```2. **Custom thresholds: 1.5 seconds of silence and -40 dB noise level**:
```bash
silencecut-ffmpeg --input in.mp4 --duration-threshold 1.5 --noise-level-threshold -40 out.mp4
```3. **Fast-paced cutting: detect silence shorter than 0.2 seconds and noise below -40 dB**:
```bash
silencecut-ffmpeg out.mp4 -i in.mp4 -n -40 -d 0.2
```### API Usage
```typescript
import { silentDetectAndRemove } from 'silencecut-ffmpeg'silentDetectAndRemove({
inFile: 'in.mp4',
outFile: 'out.mp4',
durationThreshold: 1.5, // seconds
noiseLevelThreshold: -40, // dB
})
.then(() => {
console.log('Silent sections removed.')
})
.catch(err => {
console.error(err)
})
```## Typescript Signature
```typescript
import { ProgressArgs } from 'ffmpeg-progress'export type Section = {
/** @description in seconds */
start: number
/** @description in seconds */
end: number
}/** @description chain silentDetect() and silentRemove() */
export function silentDetectAndRemove(options: {
inFile: string
outFile: string
/** @description -50 dB */
noiseLevelThreshold?: number
/** @description default 1 second */
durationThreshold?: number
onSilentDetectDuration?: ProgressArgs['onDuration']
onSilentDetectProgress?: ProgressArgs['onProgress']
onSilentRemoveDuration?: ProgressArgs['onDuration']
onSilentRemoveProgress?: ProgressArgs['onProgress']
}): Promise<{
nonSilentSections: Section[]
silentSections: Section[]
}>export function silentDetect(
options: {
file: string
/** @description -50 dB */
noiseLevelThreshold?: number
/** @description default 1000 ms */
durationThreshold?: number
onSilentSection?: (section: Section) => void
onNonSilentSection?: (section: Section) => void
} & ProgressArgs,
): Promise<{
silentSections: Section[]
nonSilentSections: Section[]
}>export function silentRemove(
options: {
inFile: string
outFile: string
/** @description nonSilentSections returned by silentDetect() or determined by custom logics */
sections: Section[]
} & ProgressArgs,
): Promise
```## License
This project is licensed with [BSD-2-Clause](./LICENSE)
This is free, libre, and open-source software. It comes down to four essential freedoms [[ref]](https://seirdy.one/2021/01/27/whatsapp-and-the-domestication-of-users.html#fnref:2):
- The freedom to run the program as you wish, for any purpose
- The freedom to study how the program works, and change it so it does your computing as you wish
- The freedom to redistribute copies so you can help others
- The freedom to distribute copies of your modified versions to others