Fügen Sie dem Audio über FFmpeg 1 Sekunde Stille hinzu

14

Ich habe eine AC3 5.1-Audiodatei, in die ich zu Beginn x Sekunden stilles Audio einfügen möchte. Dies hat nichts mit Video-Muxing zu tun, daher ist sein Offset nutzlos, da er anscheinend nur mit einem Audio-Stream funktioniert, der einem Video-Stream beiliegt. Ich möchte dies mit ffmpeg erreichen. Irgendwelche Ideen?

Makaveli84
quelle
ffmpeg wird den gleichen Codec mit der gleichen Rate anhängen oder verbinden?
Psycogeek
Ich nehme an ... @Psycogeek
Makaveli84
Und ist es in der Lage, eine stille Audiodatei mit genau derselben Codec-Rate und demselben Kanal zu erzeugen? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Ich selbst verwende GUI-Methoden, aber das, was Sie fragen, sollte ziemlich einfach und sehr schnell sein, solange die Parameter alle gleich sind. Hier wird gezeigt, wie es einem Mov hinzugefügt wird. stackoverflow.com/questions/12368151/… in den Antworten
Psycogeek
Verwenden Sie Ardour, um alles hinzuzufügen, was Sie wollen. Wenn Sie auch Effekte wünschen, laden Sie die Calf-Plugins herunter.
Dashboard

Antworten:

23

Verwenden des Concat-Demuxers (fügen Sie Anfang und / oder Ende Stille hinzu)

Verwenden Sie den Concat-Demuxer, wenn Sie eine Neucodierung des Hauptsegments vermeiden möchten. Diese Methode fügt dem Anfang oder Ende (oder beiden) Stille hinzu.

  1. Verwenden Sie den Filter für die anullsrc- Audioquelle, um das stille Audio zu erstellen. Sie müssen das Format, das Kanallayout und die Abtastrate der Hauptaudiodatei anpassen. Beispiel für die Erstellung einer 5,1-Kanal-, 48000-Hz-Abtastrate, 1 Sekunde stille AC3-Audiodatei (da dies das Format in der Frage war):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Erstellen Sie nun eine Textdatei mit dem Namen input.txt, in der die zu verkettenden Dateien aufgelistet sind:

    file 'silent.ac3'
    file 'main.ac3'
    

    Wenn Sie die Stille am Ende wünschen, ändern Sie stattdessen einfach die Reihenfolge der Dateien in input.txt.

  3. Jetzt können Sie die Dateien mit dem concat-Demuxer verketten :

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

Verwenden des Concat-Filters (am Anfang und / oder Ende Stille hinzufügen)

Verwenden Sie den Concat-Filter, wenn Sie alles in einem Befehl ausführen möchten oder wenn Sie in einem anderen Format als der Eingabe ausgeben möchten (da diese Methode ohnehin neu codiert). Diese Methode fügt dem Anfang oder Ende oder beiden Stille hinzu.

Beispiel für das Hinzufügen von 1 Sekunde Stille zum Beginn eines Stereo-Eingangs mit einer Abtastrate von 44100 Hz:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • Das Filtern führt zu einer Neucodierung, der Concat-Demuxer jedoch nicht.

  • In anullsrc wird empfohlen, das Kanallayout und die Abtastrate des Eingangs anzupassen.

  • Wenn Sie dem Ende stattdessen Stille hinzufügen möchten, ändern Sie einfach die Reihenfolge der Eingaben für den Concat-Filter : [1:a][0:a]concat=n=2:v=0:a=1.


Verwenden des Adelay-Filters (fügen Sie dem Anfang Stille hinzu)

Verwenden Sie den Adelay- Audiofilter, wenn Sie alles in einem Befehl ausführen oder in einem anderen Format als der Eingabe ausgeben möchten (da diese Methode ohnehin neu codiert). Dies funktioniert nur, um den Anfang einer Datei zum Schweigen zu bringen.

In diesem Beispiel wird am Anfang eines Stereo-Eingangs 1 Sekunde Stille hinzugefügt:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Das Filtern führt zu einer Neucodierung, der Concat-Demuxer jedoch nicht.
  • Der Wert wird in Millisekunden angegeben. Benutzer neuerer Versionen (aktueller Git-Master oder neuere Versionen als FFmpeg 4.1) können stattdessen 1seine Sekunde lang verwenden.
  • Jeder Kanal benötigt eine eigene Verzögerung. Beispielsweise würde ein Mono-Eingang verwendet adelay=1000, während ein 5.1-Eingang verwendet würde adelay=1000|1000|1000|1000|1000|1000.

Verwenden des Apad-Filters (fügen Sie am Ende Stille hinzu)

Verwenden Sie den apad- Audiofilter, wenn Sie alles in einem Befehl ausführen möchten oder wenn Sie in einem anderen Format als der Eingabe ausgeben möchten (da diese Methode ohnehin neu codiert). Dies funktioniert nur, um das Ende einer Datei zum Schweigen zu bringen.

In diesem Beispiel wird am Ende 1 Sekunde Stille hinzugefügt:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Das Filtern führt zu einer Neucodierung, der Concat-Demuxer jedoch nicht.

  • Die pad_durOption wurde nach der Veröffentlichung von FFmpeg 4.1 hinzugefügt, sodass Sie einen aktuellen Build aus dem Git-Master-Zweig verwenden oder auf FFmpeg 4.2 warten müssen.

llogan
quelle
5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.Neue Syntax ist-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny
Kann ich dies für mehrere Dateien gleichzeitig tun?
Aaron Franke
@AaronFranke Ja, aber ffmpeg hat eine solche Funktion nicht. Sie müssten Ihre Shell oder eine Skriptsprache verwenden, um den Befehl zu wiederholen. Ihr Betriebssystem ist unbekannt, daher kann ich Ihnen keine schlüsselfertige Lösung geben, aber siehe Wie konvertieren Sie ein ganzes Verzeichnis mit ffmpeg? für einige allgemeine Informationen (überspringen Sie die akzeptierte Antwort, da sie unnötig komplex und ineffizient ist).
Llogan