Search in sources :

Example 1 with AudioMix

use of org.fagu.fmv.ffmpeg.filter.impl.AudioMix in project fmv by f-agu.

the class AudioMixFilterExec method addInputIntoFilter.

/**
 * @see org.fagu.fmv.core.exec.filter.GenericFilterExec#addInputIntoFilter(org.fagu.fmv.ffmpeg.filter.FilterComplexBase,
 *      org.fagu.fmv.ffmpeg.filter.FilterInput, java.util.Set)
 */
@Override
protected void addInputIntoFilter(FilterComplexBase filterComplexBase, FilterInput filterInput, Set<Type> undeclaredTypes) {
    if (filterInput.contains(Type.AUDIO) && !filterInput.contains(Type.VIDEO)) {
        // only audio
        AudioMix audioMix = (AudioMix) filterComplexBase;
        audioMix.addInput(filterInput, audioStart);
        removeUndeclaredTypes(undeclaredTypes, filterInput);
    } else {
        super.addInputIntoFilter(filterComplexBase, filterInput, undeclaredTypes);
    }
}
Also used : AudioMix(org.fagu.fmv.ffmpeg.filter.impl.AudioMix)

Example 2 with AudioMix

use of org.fagu.fmv.ffmpeg.filter.impl.AudioMix 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)

Example 3 with AudioMix

use of org.fagu.fmv.ffmpeg.filter.impl.AudioMix in project fmv by f-agu.

the class FFHelper method mixAudio.

/**
 * @param inVideoFile
 * @param inAudioFile
 * @param outFile
 * @throws IOException
 */
public static void mixAudio(File inVideoFile, File inAudioFile, File outFile, Time audioStart) throws IOException {
    FFMPEGExecutorBuilder builder = FFMPEGExecutorBuilder.create();
    InputProcessor videoInputProcessor = builder.addMediaInputFile(inVideoFile);
    InputProcessor audioInputProcessor = builder.addMediaInputFile(inAudioFile);
    // audioInputProcessor.timeSeek(audioStart);
    AudioMix audioMix = AudioMix.build();
    audioMix.addInput(audioInputProcessor, audioStart);
    audioMix.addInput(videoInputProcessor);
    audioMix.duration(MixAudioDuration.SHORTEST);
    builder.filter(audioMix);
    builder.addMediaOutputFile(outFile).videoCodecCopy().overwrite();
    FFExecutor<Object> executor = builder.build();
    executor.execute();
}
Also used : FFMPEGExecutorBuilder(org.fagu.fmv.ffmpeg.executor.FFMPEGExecutorBuilder) AudioMix(org.fagu.fmv.ffmpeg.filter.impl.AudioMix) InputProcessor(org.fagu.fmv.ffmpeg.operation.InputProcessor)

Aggregations

AudioMix (org.fagu.fmv.ffmpeg.filter.impl.AudioMix)3 FFMPEGExecutorBuilder (org.fagu.fmv.ffmpeg.executor.FFMPEGExecutorBuilder)2 InputProcessor (org.fagu.fmv.ffmpeg.operation.InputProcessor)2 File (java.io.File)1 ArrayList (java.util.ArrayList)1 Executable (org.fagu.fmv.core.exec.Executable)1 Source (org.fagu.fmv.core.exec.Source)1 FilterInput (org.fagu.fmv.ffmpeg.filter.FilterInput)1 MovieMetadatas (org.fagu.fmv.ffmpeg.metadatas.MovieMetadatas)1 Map (org.fagu.fmv.ffmpeg.operation.Map)1 On (org.fagu.fmv.ffmpeg.operation.Map.On)1 OutputProcessor (org.fagu.fmv.ffmpeg.operation.OutputProcessor)1