Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/emosheeep/capcut-export
Export video clips from CapCut editor tracks, helps archive materials.
https://github.com/emosheeep/capcut-export
achieve capcut ffmpeg jianying video video-processing wrapper
Last synced: 3 months ago
JSON representation
Export video clips from CapCut editor tracks, helps archive materials.
- Host: GitHub
- URL: https://github.com/emosheeep/capcut-export
- Owner: emosheeep
- License: mit
- Created: 2024-02-27T12:35:29.000Z (12 months ago)
- Default Branch: master
- Last Pushed: 2024-04-22T14:01:02.000Z (10 months ago)
- Last Synced: 2024-10-31T17:26:33.642Z (3 months ago)
- Topics: achieve, capcut, ffmpeg, jianying, video, video-processing, wrapper
- Language: TypeScript
- Homepage:
- Size: 6.08 MB
- Stars: 23
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# CapCut/Jianying Video Clips Export
> **2024-04-15** Lately I find that `CapCut/Jianying Pro` starts to encrypt the draft file in the latest release version to prevent from being used illegally. This project is also affected and will enter the end of life unfortunately 🙁.
[![npm version](https://img.shields.io/npm/v/capcut-export)](https://npmjs.com/package/capcut-export)
![weekly downloads](https://img.shields.io/npm/dw/capcut-export)
![license](https://img.shields.io/npm/l/capcut-export)This project is based on [ffmpeg](https://ffmpeg.org/), which is a very well-known low-level tool for cross-platform video processing. **Please manually install it and add `ffmpeg` to your `PATH` first**.
> Tips: It's convenient to use `brew install ffmpeg` to get ffmpeg installed on MacOS.
Here's the running example:
## Features
- ⚡️ Based on ffmpeg, which is fast and reliable.
- 💡 Stream copy, without re-encoding and loss of quality.## Quick Start
```shell
pnpm i -g capcut-export # or npm/yarn
```Then you got `ccexp` command in you `PATH`
```
Usage: ccexp [options] [output]Export video clips from CapCut editor tracks, helps archive materials.
Arguments:
file CapCut/Jianying draft info json file.
output The output directory, default is cwd.Options:
-V, --version output the version number
-p,--concurrent The number of tasks processed in parallel, the default is number of CPU.
--offset Expand the video clips' time range to both sides for about specific seconds, default is 2s.
--verbose To be verbose. (default: false)
-h, --help display help for command
```## Example
```shell
ccexp /path/to/draft_info.json # output video clips into current directory.
ccexp /path/to/draft_info.json ./video # output into `./video` folder.
ccexp /path/to/draft_info.json --offset 5 # expand the time range of the segment by 5 seconds on each side.
ccexp /path/to/draft_info.json -p 1 --verbose # set the concurrency to 1 and show the verbose log, usually uses to debug.
```# Draft Info File
Search for a draft info json file in your CapCut/Jianying project folder.
## On MacOS
The file is called `draft_info.json` and is located in
```
/Users/user/Movies/CapCut/User Data/Projects/com.lveditor.draft
```## On Windows
The file is named `draft_content.json` and the default location is:
```
C:\Users\user\AppData\Local\CapCut\User Data\Projects\com.lveditor.draft\
```# How it works
First, the tool will extract **the start time**, **the duration** of the clips, and **the video path** from the draft info file.
Then it use `ffmpeg` to export specific clips, the command is like:
```shell
ffmpeg -ss 1 -t 3 -i /path/to/input.mp4 -c copy /path/to/output.mp4 -y
```In the above command:
- `-ss` means the start time of video.
- `-t` means the duration of the video clip.
- `-c copy` means copy media steam without re-encoding, so it's a lossless and fast process and won't lose video quality.
- `-y` means automatic confirmation when needed, used to override if a file of the same name exists.It means *export a 3s' video clip to output.mp4 from 1s of input.mp4*, and overwrite the output file if it already exists.
# Motivation
Sometimes when we finished video edit, there’ll be many clips in your editor track, and *they usually comes from a single video*. Anyway, we have a lot of video clips to export.
**Assume that you want to archive the materials**, how will you do? Just export one by one?
Actually most of editors don’t provide this functionality such as Jianying/CapCut, even if they do, **the quality of the video will suffer after they re-encoded it**.
So we need a lossless, fast, and simple way to manage to do it, this tool is made for this. **It based on ffmpeg using stream copy without re-encoding, which won't lose quality**.
# Question
## Why is the time range of exported video clips not accurate enough?
In FFmpeg, when performing video editing or extracting, precision issues may arise due to two primary reasons:
1. **Video Keyframes**: FFmpeg uses the `-ss` option to jump to a specific timestamp, and **by default, it seeks to the nearest keyframe**. *A keyframe is a frame that can be fully decoded without the need for other frames*. Normally, a video would have a keyframe every few seconds. **If the timestamp you chose does not directly fall on a keyframe, FFmpeg will choose to start from the nearest keyframe before the chosen timestamp, which can cause precision issues**.
2. **The video's codec**: Different video codecs and container formats support precise seeking to different extents. Some formats (such as MP4 and MKV) allow relatively accurate seeking, while others may not.