Переглянути джерело

merge-audio operation now supports source videos without audio

master
Jonathan Cobb 3 роки тому
джерело
коміт
3dcc01aff5
4 змінених файлів з 29 додано та 10 видалено
  1. +1
    -1
      bin/jmergeaudio
  2. +6
    -0
      docs/jvc_js.md
  3. +11
    -5
      src/main/java/jvc/model/js/JAssetJs.java
  4. +11
    -4
      src/main/java/jvc/operation/exec/MergeAudioExec.java

+ 1
- 1
bin/jmergeaudio Переглянути файл

@@ -35,7 +35,7 @@ echo "
\"dest\": \"${OUT_FILE}\"
},
\"source\": \"video_file\",
\"audio\": \"audio_file\"$(if [[ -n "${T_START}" ]] ; then echo ",
\"insert\": \"audio_file\"$(if [[ -n "${T_START}" ]] ; then echo ",
\"at\": \"${T_START}\""; fi)
}
]


+ 6
- 0
docs/jvc_js.md Переглянути файл

@@ -79,6 +79,12 @@ An array of the audio tracks in a video.
#### `videoTracks`
An array of the video tracks in a video.

#### `hasAudio`
A boolean, true if the asset has any audio tracks, false otherwise

#### `hasVideo`
A boolean, true if the asset has any video tracks, false otherwise

#### `assets`
If an asset is a list asset, this is an array of the sub-assets. Each sub-asset
has the same properties described above.


+ 11
- 5
src/main/java/jvc/model/js/JAssetJs.java Переглянути файл

@@ -8,21 +8,24 @@ import org.cobbzilla.util.collection.ArrayUtil;
import java.math.BigDecimal;

import static jvc.model.js.JTrackJs.EMPTY_TRACKS;
import static org.cobbzilla.util.daemon.ZillaRuntime.empty;

public class JAssetJs {

public static final JAssetJs[] EMPTY_ASSETS = new JAssetJs[0];

public Double duration;
public Integer width;
public Integer height;
public Double aspectRatio;
public Integer samplingRate;
public final Double duration;
public final Integer width;
public final Integer height;
public final Double aspectRatio;
public final Integer samplingRate;
public JTrackJs[] allTracks = EMPTY_TRACKS;
public JTrackJs[] tracks = EMPTY_TRACKS;
public JTrackJs[] videoTracks = EMPTY_TRACKS;
public JTrackJs[] audioTracks = EMPTY_TRACKS;
public JAssetJs[] assets = EMPTY_ASSETS;
public final boolean hasAudio;
public final boolean hasVideo;

public JAssetJs(JAsset asset) {
final BigDecimal d = asset.duration();
@@ -65,5 +68,8 @@ public class JAssetJs {
this.assets[i] = new JAssetJs(list[i]);
}
}

hasAudio = !empty(audioTracks);
hasVideo = !empty(videoTracks);
}
}

+ 11
- 4
src/main/java/jvc/operation/exec/MergeAudioExec.java Переглянути файл

@@ -27,10 +27,15 @@ public class MergeAudioExec extends SingleOrMultiSourceExecBase<MergeAudioOperat
= "cd {{{tempDir}}} && {{{ffmpeg}}} -f concat -i {{{playlist.path}}} -codec copy -y {{{padded}}}";

public static final String MERGE_AUDIO_TEMPLATE
= "{{{ffmpeg}}} -i {{{source.path}}} -i {{audio.path}} -filter_complex \""
+ "[0:a][1:a] amix=inputs=2 [merged]"
+ "\" "
+ "-map 0:v -map \"[merged]\" -c:v copy "
= "{{{ffmpeg}}} -i {{{source.path}}} -i {{audio.path}} "
+ "{{#if source.hasAudio}}"
+ "-filter_complex \""
+ "[0:a][1:a] amix=inputs=2 [merged]"
+ "\" "
+ "-map 0:v -map \"[merged]\" -c:v copy "
+ "{{else}}"
+ "-map 0:v -map 1:a -c:v copy -c:a copy "
+ "{{/if}}"
+ "-y {{{output.path}}}";

@Override protected String getProcessTemplate() { return MERGE_AUDIO_TEMPLATE; }
@@ -46,6 +51,8 @@ public class MergeAudioExec extends SingleOrMultiSourceExecBase<MergeAudioOperat
final JAsset silence = createSilence(op, opCtx.toolbox, opCtx.assetManager, insertAt, audio);
final JAsset padded = padWithSilence(op, opCtx.toolbox, opCtx.assetManager, audio, silence);
ctx.put("audio", padded);
} else {
ctx.put("audio", audio);
}
}



Завантаження…
Відмінити
Зберегти