編集は、node.jsとffmpegを使用した宣言NLE(非線形ビデオ編集)のツールとフレームワークです。編集すると、スムーズな移行や音楽がオーバーレイされた、クリップ、画像、オーディオ、タイトルのセットからビデオを簡単かつプログラム的に作成できます。
編集すると、クリップや画像のセットからビデオをすばやく組み立てるためのシンプルなCLIがあります。または、より柔軟なJavaScript APIを使用できます。
FFMPEG-CONCATに触発された編集は、はるかに高速であり、ストリーミング編集を使用するため、多くのストレージを必要としません。編集することは、非常に拡張可能であり、新しい動的コンテンツを追加するためのプラグ可能なインターフェイスを備えたリッチを備えていることを目指しています。

このgif / youtubeは、このコマンドで作成されました:「editly commonfeatures.json5」。こちらの例を参照してください。
durationとセグメントの長さのcutFrom / cutToの長さを一致させるVideo must be 1337x1000 30fps )例を参照してください
ffmpeg (およびffprobe )がインストールされ、 PATHに利用可能ですnpm i -g editly
editly --help使用するためのヘルプ
オーディオトラックを使用して、ビデオ、画像、テキストからシンプルなランダム化ビデオ編集を作成します。
editly
title: ' My video '
clip1.mov
clip2.mov
title: ' My slideshow '
img1.jpg
img2.jpg
title: ' THE END '
--fast
--audio-file-path /path/to/music.mp3または、JSONまたはJSON5編集スペックからMP4(またはGIF)を作成します(JSON5は、よりユーザーフレンドリーなJSON形式です) :
editly my-spec.json5 --fast --keep-source-audio --out output.gifJSON編集仕様の作成方法については、以下または例を参照してください。
--fastなしでは、最初の入力ビデオから幅、高さ、フレームレートを使用するデフォルトです。他のすべてのクリップは、これらの寸法に変換されます。もちろん、これらのパラメーターのいずれかまたはすべてをオーバーライドできます。
--audio-file-pathダウンロードします。必ず彼らのライセンスを尊重してください! import editly from 'editly' ;
// See editSpec documentation
await editly ( editSpec ) 編集仕様は、次の構造で編集操作全体を説明するJavaScript / JSONオブジェクトです。
{
outPath ,
width ,
height ,
fps ,
allowRemoteRequests : false ,
defaults : {
duration : 4 ,
transition : {
duration : 0.5 ,
name : 'random' ,
audioOutCurve : 'tri' ,
audioInCurve : 'tri' ,
} ,
layer : {
fontPath ,
// ...more layer defaults
} ,
layerType : {
'fill-color' : {
color : '#ff6666' ,
}
// ...more per-layer-type defaults
} ,
} ,
clips : [
{
transition ,
duration ,
layers : [
{
type ,
// ...more layer-specific options
}
// ...more layers
] ,
}
// ...more clips
] ,
audioFilePath ,
loopAudio : false ,
keepSourceAudio : false ,
clipsAudioVolume : 1 ,
outputVolume : 1 ,
audioTracks : [
{
path ,
mixVolume : 1 ,
cutFrom : 0 ,
cutTo ,
start : 0 ,
} ,
// ...more audio tracks
] ,
audioNorm : {
enable : false ,
gaussSize : 5 ,
maxGain : 30 ,
}
// Testing options:
enableFfmpegLog : false ,
verbose : false ,
fast : false ,
}| パラメーター | CLI相当 | 説明 | デフォルト | |
|---|---|---|---|---|
outPath | --out | 出力パス(MP4、MKV)も.gifです | ||
width | --width | すべてのメディアが変換される幅 | 640 | |
height | --height | すべてのメディアが変換される高さ | 最初のビデオのwidthとアスペクト比に基づく自動 | |
fps | --fps | すべてのビデオが変換されるFPS | 最初のビデオfpsまたは25 | |
customOutputArgs | FFMPEGのカスタム出力コーデック/フォーマット引数を指定します(例を参照) | 自動(H264) | ||
allowRemoteRequests | --allow-remote-requests | リモートURLをパスとして許可します | false | |
fast | --fast 、 -f | 高速モード(低解像度とFPS、クイックプレビューを取得するのに役立ちます⏩) | false | |
defaults.layer.fontPath | --font-path | デフォルトのフォントを.ttfに設定します | システムフォント | |
defaults.layer.* | すべてのレイヤーが継承するレイヤーパラメーターを設定します | |||
defaults.duration | --clip-duration | 独自の期間がないクリップのデフォルトのクリップ期間を設定する | 4 | 秒 |
defaults.transition | デフォルトのトランジションを説明するオブジェクト{ name, duration } 。移行を無効にするためにnullに設定します | |||
defaults.transition.duration | --transition-duration | デフォルトの移行期間 | 0.5 | 秒 |
defaults.transition.name | --transition-name | デフォルトのトランジションタイプ。トランジションタイプを参照してください | random | |
defaults.transition.audioOutCurve | オーディオクロスフェードのデフォルトフェードアウトカーブ | tri | ||
defaults.transition.audioInCurve | オーディオクロスフェードのカーブのデフォルトフェード | tri | ||
clips[] | 順番に再生されるクリップオブジェクトのリスト。各クリップには1つ以上のレイヤーがあります。 | |||
clips[].duration | クリップ期間。 defaults.durationを参照してください。設定されていない場合、クリップ期間は最初のビデオレイヤーの時間です。 | defaults.duration | ||
clips[].transition | このクリップの最後に遷移を指定します。 defaults.transitionを参照してください | defaults.transition | ||
clips[].layers[] | 自然な順序でオーバーレイされる現在のクリップ内のレイヤーのリスト(上部の最終レイヤー) | |||
clips[].layers[].type | レイヤータイプ、以下を参照してください | |||
clips[].layers[].start | このレイヤーが起動するのは、クリップに何時になりますか | 秒 | ||
clips[].layers[].stop | このレイヤーが停止するのは、クリップに何時になりますか | 秒 | ||
audioTracks[] | 任意のオーディオトラックのリスト。オーディオトラックを参照してください。 | [] | ||
audioFilePath | --audio-file-path | ビデオ全体のオーディオトラックを設定します。オーディオトラックも参照してください | ||
loopAudio | --loop-audio | ビデオよりも短い場合、オーディオトラックをループしますか? | false | |
keepSourceAudio | --keep-source-audio | ソースオーディオをclipsから保管しますか? | false | |
clipsAudioVolume | audioTracksに関連するclipsからのオーディオの量。オーディオトラックを参照してください。 | 1 | ||
outputVolume | --output-volume | 出力ボリューム(最終段階)を調整します。例を参照してください | 1 | たとえば、 0.5または10dB |
audioNorm.enable | オーディオ正規化を有効にしますか?オーディオ正規化を参照してください。 | false | ||
audioNorm.gaussSize | オーディオ正規化ガウスサイズ。オーディオ正規化を参照してください。 | 5 | ||
audioNorm.maxGain | オーディオ正規化最大ゲイン。オーディオ正規化を参照してください。 | 30 |
transition.name directional-left GLトランジションdirectional-rightいずれか、または次のいずれかのrandomかdummy directional-up directional-downができます。
例とcommonfeatures.json5を参照してください
ビデオレイヤーの場合、親clip.durationが指定されている場合、 clip.durationに一致するようにビデオが遅く/スピードアップされます。 cutFrom / cutToが設定されている場合、結果のセグメント( cutTo cutFrom )が遅く /スピードアップされ、 clip.durationをフィットします。レイヤーにオーディオがある場合、保持されます(存在する場合は他のオーディオレイヤーと混合されます)。
| パラメーター | 説明 | デフォルト | |
|---|---|---|---|
path | ビデオファイルへのパス | ||
resizeMode | サイズ変更モードを参照してください | ||
cutFrom | カットする時間値 | 0 | 秒 |
cutTo | カットする時間値 | ビデオの終わり | 秒 |
width | 画面幅に対する幅 | 1 | 0 1 |
height | 画面の高さに対する高さ | 1 | 0 1 |
left | 画面幅に対するXポジション | 0 | 0 1 |
top | 画面の高さに対するy位置 | 0 | 0 1 |
originX | Xアンカー | left | leftまたはright |
originY | Yアンカー | top | topまたはbottom |
mixVolume | このビデオのオーディオトラックを他の人と混ぜるときの相対ボリューム | 1 |
オーディオレイヤーは混合されます。 cutFrom / cutToが設定されている場合、結果のセグメント( cutTo cutFrom )が遅く /スピードアップされ、 clip.durationをフィットします。スローダウン/スピードアップ操作は、 0.5xから100xの値に制限されています。
| パラメーター | 説明 | デフォルト | |
|---|---|---|---|
path | オーディオファイルへのパス | ||
cutFrom | カットする時間値 | 0 | 秒 |
cutTo | カットする時間値 | clip.duration | 秒 |
mixVolume | このオーディオトラックを他のオーディオトラックと混合するときの相対ボリューム | 1 |
これは、グローバル開始時間を計算することなく、 clips開始時間に対するオーディオの開始を容易にするaudioTracksの特別なケースです。
detached-audio 、クリップの開始に関連するstart時間を除いて、Audiotracksとまったく同じ特性を持っています。
分離されたオーディオトラックの例
フルスクリーン画像
| パラメーター | 説明 | デフォルト | |
|---|---|---|---|
path | 画像ファイルへのパス | ||
resizeMode | サイズ変更モードを参照してください |
Ken Burnsパラメーターも参照してください。
画面上にカスタム位置とサイズを備えた画像オーバーレイ。注:アニメーションGIFを使用する場合は、代わりにvideoを使用します。
| パラメーター | 説明 | デフォルト | |
|---|---|---|---|
path | 画像ファイルへのパス | ||
position | 位置パラメーターを参照してください | ||
width | 幅(0から1)ここで、1は画面幅です | ||
height | 高さ(0から1)ここで、1は画面の高さです |
Ken Burnsパラメーターも参照してください。
fontPath defaults.layer.fontPathを参照してくださいtext - 表示するタイトルテキスト、それを短く保ちますtextColor -default #ffffffposition - 位置パラメーターを参照してくださいKen Burnsパラメーターも参照してください
fontPath defaults.layer.fontPathを参照してくださいtext - 表示する字幕テキストtextColor -default #ffffff 背景のタイトル
text - タイプtitleを参照してくださいtextColor -Type titleを参照してくださいbackground - { type, ... } - 型radial-gradient 、 linear-gradient 、またはfill-color参照してくださいfontPathタイプtitleを参照してくださいfontPath defaults.layer.fontPathを参照してくださいtexttextColor -default #ffffffbackgroundColorデフォルト#d02a42position - 位置パラメーターを参照してくださいfontPath defaults.layer.fontPathを参照してくださいtextfontSizecharSpacingcolorposition - 位置パラメーターを参照してくださいcolor - 背景を埋める色、デフォルト:ランダム化colors - 2色の配列、デフォルト:ランダム化colors - 2色の配列、デフォルト:ランダム化???
customcanvas.jsを参照してください
funcカスタムJavaScript関数customfabric.jsを参照してください
funcカスタムJavaScript関数GLSLシェーダーをロードします。 Gl.Json5およびRainbow-Colors.Fragを参照してください
fragmentPathvertexPath (オプション)audioTracksプロパティには、最終ビデオで任意の時代に開始できるオーディオトラックを指定するオブジェクトのリストをオプションに含めることができます。これらのトラックは混合されます( mixVolume各トラックが他のトラックと比較される相対数を指定します)。 clipsからのオーディオはaudioTracksとは別に混合されるため、 clipsAudioVolumeは、 audioTracksの各オーディオトラックのボリュームに比べて、 clipsからの複合オーディオのボリュームを指定します。
| パラメーター | 説明 | デフォルト | |
|---|---|---|---|
audioTracks[].path | このトラックのファイルパス | ||
audioTracks[].mixVolume | このトラックの相対ボリューム | 1 | |
audioTracks[].cutFrom | ソースファイルを削減するための時間値 | 0 | 秒 |
audioTracks[].cutTo | ソースファイルをカットする時間値 | 秒 | |
audioTracks[].start | このオーディオトラックを開始するためにビデオの数秒 | 0 | 秒 |
audioTracksとレイヤータイプの「オーディオ」の違いは、 audioTracks複数のclipsで再生され続け、必要なときにいつでも開始および停止できることです。
audioTracks例を参照してください
レイヤータイプ「Detched-Audio」も参照してください。
最終出力オーディオのオーディオ正規化を有効にすることができます。これは、オーディオダッキングを実現したい場合に役立ちます(たとえば、ボイスオーバーが話すときに他のすべてのトラックのボリュームが自動的に低い)。
audioNormパラメーターはここに記録されています。
オーディオダッキングの例
resizeMode画面に画像をフィットする方法。の1つになることができます:
contain - すべてのビデオはフレーム内に含まれ、レターボックス化されますcontain-blur -contaring containですが、レターボックスとしてぼやけたコピーがありますcover - 画面全体をカバーするためにビデオをトリミングします(アスペクト比が保存されています)stretch - ビデオは、画面全体をカバーするためにストレッチされます(アスペクト比は無視されます)。デフォルトにはcontain-blur 。
見る:
特定のレイヤーは位置パラメーターをサポートします
position次のいずれかです。
top 、 bottom center 、 top-left 、 top-right 、 center-left 、 center-right 、 bottom-left 、 bottom-right{ x, y, originX = 'left', originY = 'top' } 、 { x: 0, y: 0 }は画面の左上隅であり、 { x: 1, y: 1 }右下隅であり、 xビデオ幅、 yビデオの高さと比較しています。 originXとoriginYオプションであり、オブジェクトの位置の起源(アンカー位置)を指定します。position.json5を参照してください
| パラメーター | 説明 | デフォルト | |
|---|---|---|---|
zoomDirection | Ken Burns効果のズーム方向: in 、 out 、 left 、 rightまたはnullを無効にする | ||
zoomAmount | Ken Burns効果のズーム量 | 0.1 |
これは、システムに依存関係のすべてのバージョンをすべて取得することを心配することなく、コンテナ化されたCLIとして編集を使用するのに役立つはずです。
$ git clone https://github.com/mifi/editly.git
$ cd editly/examples
$ git clone https://github.com/mifi/editly-assets.git assets
$ cd ..
$ docker-compose up
$ docker-compose run editly bash -c " cd examples && editly audio1.json5 --out /outputs/audio1.mp4 "
$ docker cp editly:/outputs/audio1.mp4 . Error: The specified module could not be found. 、試してみてください: npm un -g editly && npm i -g --build-from-source editly (#15を参照)/bin/sh: pkg-config: command not foundた場合は、最新node.js LTSバージョンを使用してみてくださいこのプロジェクトは私だけによって維持されています。プロジェクトは常に無料でオープンソースのままですが、それがあなたにとって役立つなら、私をサポートすることを検討してください。 :)それは私にそれを改善するためのさらなる動機を与えます。
PayPal
このパッケージは、すべての貢献者とスポンサーのサポートと支援なしでは存在しません!
特別な感謝:
ここで作成したビデオまたはプロジェクトを編集したい場合は、PRを提出してください。
❤️で作られていますか?
mifi.noによるその他のアプリ
より素晴らしいコンテンツについては、Github、YouTube、IG、Twitterで私をフォローしてください!