Hinzufügen vieler Sounds zu einer Videodatei bei bestimmten Frames

Ich habe ein Video von einem von mir erstellten TAS, das leider keinen Ton enthält. Ich würde dem Video gerne Sound hinzufügen, bevor ich es veröffentliche, aber ich möchte natürlich nicht Hunderte oder Tausende von Sounds manuell durchgehen und platzieren müssen.

Ein Beispiel für ein fertiges Produkt, bei dem alle vorhandenen Geräusche manuell hinzugefügt wurden, ist hier zu sehen:

Ich kann den Quellcode des Spiels ändern, sodass eine Liste mit genauen Frames, auf denen Sounds abgespielt werden, einfach zu erstellen ist. Ich verwende derzeit Adobe Premiere Pro CC 2015, wechsle aber gerne zu einer anderen Software, wenn sie die gewünschte Funktionalität bietet.

FFmpeg scheint in der Lage zu sein, das zu tun, was ich will, aber ich weiß nicht genug über seine Verwendung und konnte keine Beispiele dafür finden, wie ich es für das verwenden kann, was ich tun möchte. Ich würde auch lieber kein Plugin für Premiere oder ähnliches erstellen (und konnte keine Informationen zum Skripting finden), obwohl ich das einer manuellen Vorgehensweise vorziehen würde.

Danke im Voraus!

Wie viele verschiedene Geräusche? Und können Sie für jeden einzelnen Sound einen separaten Frame-Index erstellen?
Ich würde sagen, wahrscheinlich 8-12 Sounds, die ich hinzufügen möchte. Ein separater Frame-Index ist durchaus möglich.

Antworten (1)

Okay, mehr googeln hat ergeben, dass ffmpeg definitiv die Lösung für mein Problem ist!

ffmpeg -i inputvideo.mp4 -i inputsound.wav -filter_complex "[1:0]adelay=leftchanneldelay|rightchanneldelay[delayed];[0:1][delayed]amix[mixout]" -map 0:v -map [mixout] -c:v copy -c:a aac outputvideo.mp4

Diese Zeile ermöglicht es mir, leicht zu bestimmen, wo im Video (bis auf die Millisekunde, was mehr als genau genug ist, wenn jeder Frame 20 Millisekunden entspricht) ich den Ton platzieren möchte; Wickeln Sie es in eine Schleife in eine Batch-Datei (oder welche Methode Sie auch bevorzugen) und los geht's!

Bearbeiten: Eine in Java geschriebene Lösung mit mehr Funktionen, die nur die Audiodatei erstellt (damit Sie sie manuell hinzufügen können):

package javaapplication4;

import java.io.IOException;

public class JavaApplication4 {
static String delay;

public static void main(String[] args) throws IOException, InterruptedException {
    String a = "0";
    String c = "1";
    String temp = "";
    String basePath = "C:\\Users\\Desktop\\Stuff\\FFMpeg\\";
    String fileIn = "blockbreak";
    int[] delays = {2740,5760,51381,61040,84520,109600,113660,156640,311260,312820,314100,443800,735120,740540};
    Runtime.getRuntime().exec(basePath + "ffmpeg.exe -y -i " + basePath + fileIn +".flac -filter_complex \"[0:0]adelay=" + delays[0] + "[mixout]\" -map [mixout] -c:a flac " + basePath + "output0.flac").waitFor();
    for (int i = 1; i <= delays.length - 1; i++) {
        delay = "" + delays[i];
        System.out.println("" + (i) + "/" + (delays.length - 1));
        Runtime.getRuntime().exec(basePath + "ffmpeg.exe -y -i " + basePath + "output" + a + ".flac -i " + basePath + fileIn +".flac -filter_complex \"[1:0]adelay=" + delay + "[delayed];[delayed][0:0]amix=inputs=2:duration=longest[mixin];[mixin]volume=6.0201dB[mixout]\" -map [mixout] -c:a flac " + basePath + "output" + c + ".flac").waitFor();
        temp = a;
        a = c;
        c = temp;
    }

}

}

Ich erhöhe die Lautstärke des Tons jedes Mal um 6,021 dB, da ffmpeg die Lautstärke beim Codieren zu verringern scheint. das ist keine perfekte Zahl, aber es ist nah genug, dass der Lautstärkeunterschied zwischen dem ersten und dem letzten Ton in einer Datei, die ein paar tausend Töne lang ist, am Ende etwa 1 db beträgt.

Es ist schneller, zuerst die Audiospur zu erstellen und sie dann mit dem Video zu mischen. Mit Ihrem Befehl verbringen Sie viel mehr Zeit damit, das Video neu zu packen.