Search in sources :

Example 1 with Executable

use of org.fagu.fmv.core.exec.Executable in project fmv by f-agu.

the class BasePrompt method get.

/**
 * @see org.fagu.fmv.cli.Prompt#get(org.fagu.fmv.cli.Environnement)
 */
@Override
public String get(Environnement environnement) {
    Executable currentExecutable = environnement.getCurrentExecutable();
    StringBuilder prompt = new StringBuilder(50);
    if (currentExecutable != null) {
        prompt.append(currentExecutable.getCode()).append('[').append(currentExecutable.getId()).append(']');
    }
    prompt.append("# ");
    return prompt.toString();
}
Also used : Executable(org.fagu.fmv.core.exec.Executable)

Example 2 with Executable

use of org.fagu.fmv.core.exec.Executable in project fmv by f-agu.

the class Console method startConsole.

/**
 * @param consoleReader
 * @throws IOException
 */
private void startConsole(ConsoleReader consoleReader) throws IOException {
    List<Executable> executables = project.getExecutables();
    if (!executables.isEmpty()) {
        return;
    }
    consoleReader.println("Create a default structure");
    GenericExecutable rootExec = new GenericExecutable(project);
    FadeAudioVideoFilterExec fadeOut = new FadeAudioVideoFilterExec(project, FadeType.OUT, Time.valueOf(200), Duration.valueOf(3));
    rootExec.add(fadeOut);
    FadeAudioVideoFilterExec fadeIn = new FadeAudioVideoFilterExec(project, FadeType.IN, Time.valueOf(0), Duration.valueOf(2));
    fadeOut.add(fadeIn);
    GenericFilterExec audioMerge = new GenericFilterExec(project, "amerge");
    fadeIn.add(audioMerge);
    ConcatExecutable concat = new ConcatExecutable(project);
    audioMerge.add(concat);
    project.modified();
}
Also used : GenericFilterExec(org.fagu.fmv.core.exec.filter.GenericFilterExec) ConcatExecutable(org.fagu.fmv.core.exec.executable.ConcatExecutable) FadeAudioVideoFilterExec(org.fagu.fmv.core.exec.filter.FadeAudioVideoFilterExec) ConcatExecutable(org.fagu.fmv.core.exec.executable.ConcatExecutable) Executable(org.fagu.fmv.core.exec.Executable) GenericExecutable(org.fagu.fmv.core.exec.executable.GenericExecutable) GenericExecutable(org.fagu.fmv.core.exec.executable.GenericExecutable)

Example 3 with Executable

use of org.fagu.fmv.core.exec.Executable in project fmv by f-agu.

the class Project method saveExecutables.

/**
 * @param root
 */
private void saveExecutables(Element root) {
    for (Executable executable : getExecutables()) {
        Element execElement = root.addElement("exec");
        executable.save(execElement);
    }
}
Also used : Element(org.dom4j.Element) Executable(org.fagu.fmv.core.exec.Executable)

Example 4 with Executable

use of org.fagu.fmv.core.exec.Executable in project fmv by f-agu.

the class CutExecutable method execute.

/**
 * @see org.fagu.fmv.core.exec.Executable#execute(java.io.File, Cache)
 */
@Override
public void execute(File toFile, Cache cache) throws IOException {
    Source source = getSource();
    Executable executable = getExecutable();
    if (executable == null && source == null) {
        return;
    }
    OutputInfos outputInfos = getProject().getOutputInfos();
    FFMPEGExecutorBuilder builder = FFUtils.builder(getProject());
    InputProcessor inputProcessor = null;
    if (executable != null) {
        File childExec = getProject().getFileCache().getFile(executable, cache);
        // executable.execute(childExec, cache);
        inputProcessor = builder.addMediaInputFile(childExec);
    } else if (source != null) {
        inputProcessor = (InputProcessor) source.createAndAdd(builder);
    } else {
        throw new IllegalArgumentException("Source or executable not defined !");
    }
    inputProcessor.timeSeek(startTime);
    // SetPTS videoSetPTS = new SetPTSVideo();
    // videoSetPTS.setStartAtFirstFrame();
    // FilterComplex videoSetPTSComplex = FilterComplex.createWith(videoSetPTS);
    // videoSetPTSComplex.addInput(inputProcessor, Type.VIDEO);
    // builder.add(videoSetPTSComplex);
    // 
    // SetPTS audioSetPTS = new SetPTSAudio();
    // audioSetPTS.setStartAtFirstFrame();
    // FilterComplex audioSetPTSComplex = FilterComplex.createWith(audioSetPTS);
    // audioSetPTSComplex.addInput(inputProcessor, Type.AUDIO);
    // builder.add(audioSetPTSComplex);
    BasicStreamMuxer muxer = BasicStreamMuxer.to(toFile, outputInfos.getFormat()).avoidNegativeTs(AvoidNegativeTs.MAKE_NON_NEGATIVE);
    OutputProcessor outputProcessor = builder.mux(muxer);
    outputProcessor.duration(duration);
    outputProcessor(outputProcessor, cache);
    FFExecutor<Object> executor = builder.build();
    executor.execute();
    if (cache == Cache.MAKE) {
        MovieMetadatas movieMetadatas = MovieMetadatas.with(toFile).extract();
        MovieMetadatasUtils.getDuration(movieMetadatas).ifPresent(this::setDuration);
    }
}
Also used : BasicStreamMuxer(org.fagu.fmv.ffmpeg.format.BasicStreamMuxer) FFMPEGExecutorBuilder(org.fagu.fmv.ffmpeg.executor.FFMPEGExecutorBuilder) MovieMetadatas(org.fagu.fmv.ffmpeg.metadatas.MovieMetadatas) OutputInfos(org.fagu.fmv.core.project.OutputInfos) OutputProcessor(org.fagu.fmv.ffmpeg.operation.OutputProcessor) InputProcessor(org.fagu.fmv.ffmpeg.operation.InputProcessor) Executable(org.fagu.fmv.core.exec.Executable) File(java.io.File) Source(org.fagu.fmv.core.exec.Source)

Example 5 with Executable

use of org.fagu.fmv.core.exec.Executable in project fmv by f-agu.

the class AudioMixExecutable method execute.

/**
 * @see org.fagu.fmv.core.exec.Executable#execute()
 */
@Override
public void execute(File toFile, Cache cache) throws IOException {
    if (!hasChildren()) {
        return;
    }
    AudioMix audioMix = AudioMix.build();
    FFMPEGExecutorBuilder builder = FFUtils.builder(getProject());
    List<InputProcessor> inputProcessors = new ArrayList<>();
    // executable
    for (Executable executable : executables) {
        File file = getProject().getFileCache().getFile(executable, cache);
        InputProcessor inputProcessor = builder.addMediaInputFile(file);
        // audioMix.addInput(inputProcessor);
        inputProcessors.add(inputProcessor);
    }
    // source
    for (Source source : sources) {
        FilterInput filterInput = source.createAndAdd(builder);
        if (filterInput instanceof InputProcessor) {
            inputProcessors.add((InputProcessor) filterInput);
        // MovieMetadatas movieMetadatas = ((InputProcessor)filterInput).getMovieMetadatas();
        // if(movieMetadatas.contains(Type.AUDIO)) {
        // audioMix.addInput(filterInput, audioStart);
        // } else {
        // throw new RuntimeException("Source is not an audio stream: " + source);
        // }
        } else {
            throw new RuntimeException("Source is not a InputProcessor: " + source);
        }
    }
    List<InputProcessor> videoInputProcessors = new ArrayList<>();
    for (InputProcessor inputProcessor : inputProcessors) {
        MovieMetadatas movieMetadatas = inputProcessor.getMovieMetadatas();
        if (movieMetadatas.contains(Type.AUDIO) && !movieMetadatas.contains(Type.VIDEO)) {
            audioMix.addInput(inputProcessor, audioStart);
        } else {
            videoInputProcessors.add(inputProcessor);
            audioMix.addInput(inputProcessor);
        }
    }
    audioMix.duration(mixAudioDuration);
    OutputProcessor outputProcessor = outputProcessor(builder, toFile, cache);
    ObjectInvoker.invoke(outputProcessor, attributeMap);
    builder.filter(audioMix);
    Map map = outputProcessor.map();
    map.allStreams().input(audioMix);
    On videoStreams = map.types(Type.VIDEO);
    videoInputProcessors.stream().forEach(videoStreams::input);
    FFExecutor<Object> executor = builder.build();
    executor.execute();
}
Also used : FFMPEGExecutorBuilder(org.fagu.fmv.ffmpeg.executor.FFMPEGExecutorBuilder) AudioMix(org.fagu.fmv.ffmpeg.filter.impl.AudioMix) ArrayList(java.util.ArrayList) InputProcessor(org.fagu.fmv.ffmpeg.operation.InputProcessor) Source(org.fagu.fmv.core.exec.Source) MovieMetadatas(org.fagu.fmv.ffmpeg.metadatas.MovieMetadatas) FilterInput(org.fagu.fmv.ffmpeg.filter.FilterInput) OutputProcessor(org.fagu.fmv.ffmpeg.operation.OutputProcessor) Executable(org.fagu.fmv.core.exec.Executable) File(java.io.File) Map(org.fagu.fmv.ffmpeg.operation.Map) On(org.fagu.fmv.ffmpeg.operation.Map.On)

Aggregations

Executable (org.fagu.fmv.core.exec.Executable)11 File (java.io.File)6 Source (org.fagu.fmv.core.exec.Source)4 ArrayList (java.util.ArrayList)3 FFMPEGExecutorBuilder (org.fagu.fmv.ffmpeg.executor.FFMPEGExecutorBuilder)3 FilterInput (org.fagu.fmv.ffmpeg.filter.FilterInput)3 InputProcessor (org.fagu.fmv.ffmpeg.operation.InputProcessor)3 OpenFile (org.fagu.fmv.cli.utils.OpenFile)2 BaseIdentifiable (org.fagu.fmv.core.exec.BaseIdentifiable)2 ConcatExecutable (org.fagu.fmv.core.exec.executable.ConcatExecutable)2 GenericExecutable (org.fagu.fmv.core.exec.executable.GenericExecutable)2 MovieMetadatas (org.fagu.fmv.ffmpeg.metadatas.MovieMetadatas)2 OutputProcessor (org.fagu.fmv.ffmpeg.operation.OutputProcessor)2 List (java.util.List)1 Collectors (java.util.stream.Collectors)1 Element (org.dom4j.Element)1 Alias (org.fagu.fmv.cli.annotation.Alias)1 Command (org.fagu.fmv.cli.annotation.Command)1 Printer (org.fagu.fmv.cli.utils.Printer)1 FilterExec (org.fagu.fmv.core.exec.FilterExec)1