Jonathan Cobb 27a47a4a32 | před 4 roky | |
---|---|---|
bin | před 4 roky | |
docs | před 4 roky | |
src | před 4 roky | |
utils | před 4 roky | |
.gitignore | před 4 roky | |
.gitmodules | před 4 roky | |
LICENSE.txt | před 4 roky | |
README.md | před 4 roky | |
pom.xml | před 4 roky |
Javicle (JVC for short) is a JSON DSL for audio/video transformations.
Under the hood, it’s all shell commands: ffmpeg
, mediainfo
and so on.
JVC provides higher-level semantics for working with these lower level tools.
I infrequently find myself doing video editing, so I’ve never bothered to learn iMovie or any graphical video editor.
My editing needs are usually pretty simple, so I bust out ffmpeg and get the job done.
But it seems like every time, there is at least one wrinkle in the requirements that requires some deep research into ffmpeg filter arcana.
Hours later, before I know it, the day has gone by.
I created JVC to make it really easy to do the most common things people usually do to videos: splitting, concatenating, letterboxing, overlaying one video onto another, and so on.
Suppose you have one video that is five minutes long, and you want to split it into five videos, each one minute long.
With ffmpeg and bash, you might do something like this:
INCR=60
for ((i=0;i<300;i=(i+INCR))); do
ffmpeg -i /tmp/my/source.mp4 -ss ${i} -t $((i+INCR)) /tmp/my/slice_${i}_$((i+INCR)).mp4
done
With JVC, you’d write this spec file and save it to a file
(for example my-spec.jvc
):
{
"assets": [ {"name": "src", "path": "/tmp/my/source.mp4"} ],
"operations": [{
"operation": "split",
"creates": "src_split_files",
"source": "src",
"interval": "60"
}]
}
and then run it like this:
jvc my-spec.jvc
Yes, the JVC is longer, but I think many would agree it is easier to read and maintain.
As the number of media assets and operations grows, hand-crafted shell scripts with magical ffmpeg incantations become ever more inscrutable.
JVC is designed for readability and maintainability. JVC will continue to evolve towards greater coverage of the full capabilities of ffmpeg.
If you like GUIs, JVC is probably not for you.
JVC is not a replacement for Final Cut Pro or even iMovie.
JVC is for people who like CLIs and automation.
JVC is for people with relatively simple video composition needs (for now), since the range of operations supported is limited.
JVC is for people who have used ffmpeg filters before and had flashbacks of editing Sendmail configs and debugging PostScript.
Obligatory Disclaimer: JVC is still relatively new software and lots of stuff might break. At least it should never overwrite your source files. All output goes to new files.
The first time you run jvc
, it will automatically build the JVC jar file
from sources, using maven and javac. This takes a little time but only needs
to be done once.
Learn more about running jvc
and other useful tools.
Learn about Assets and Operations, the core concepts of JVC.
Today, JVC supports several basic operations.
For each operation listed below, the header links to an example from the JVC test suite.
Add a silent audio track to a video asset.
Concatenate audio/video assets together into one asset.
Transform still images into video via a fade-pan (aka Ken Burns) effect.
Transform a video from one size to another size, maintaining the aspect ratio of the video and adding letterboxes on the sides or top/bottom. Handy for embedding mobile videos into other screen formats.
Merge an audio asset into the audio track of a video asset.
Overlay one asset onto another.
Remove a track from a video asset.
Scale a video asset from one size to another. Scaling can be proportional or anamorphic.
Split an audio/video asset into multiple assets of equal time lengths.
Trim audio/video; crop a section of an asset, becomes a new asset.
Here is a long, complex example that uses every operation.
A cross between a javelin and an icicle? JSON and a miracle? Something with positive connotations? I really don’t like naming things.