Aggiungi 1 secondo di silenzio all'audio tramite FFmpeg


14

Ho un file audio AC3 5.1 in cui vorrei inserire x secondi di audio silenzioso all'inizio. Questo non ha nulla a che fare con il video muxing, quindi il suo offset è inutile poiché sembra funzionare solo con un flusso audio che accompagna un video. Vorrei raggiungere questo obiettivo con ffmpeg. Qualche idea?


ffmpeg aggiungerà o unirà lo stesso codec alla stessa velocità?
Psycogeek,

Suppongo ... @Psycogeek
Makaveli84

Ed è in grado di generare un file audio silenzioso con lo stesso identico tasso di codec e canale? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Io stesso utilizzo i metodi della GUI, ma fare ciò che chiedi dovrebbe essere abbastanza semplice e molto veloce, purché i parametri siano tutti uguali. Qui è dove viene mostrato aggiungendolo a un Mov. stackoverflow.com/questions/12368151/… nelle risposte
Psycogeek

Usa Ardor per aggiungere tutto quello che vuoi. Se vuoi effetti anche scarica i plug-in Calf ..
dashboard

Risposte:


23

Utilizzo del demuxer concat (aggiungi silenzio all'inizio e / o alla fine)

Utilizzare il demuxer concat se si desidera evitare di ricodificare il segmento principale. Questo metodo funziona per aggiungere silenzio all'inizio o alla fine (o entrambi).

  1. Utilizzare il filtro della sorgente audio anullsrc per creare l'audio silenzioso. Dovrai abbinare il formato, il layout del canale e la frequenza di campionamento del file audio principale. Esempio per creare un canale 5.1, frequenza di campionamento di 48000 Hz, file audio AC3 silenzioso di 1 secondo (poiché questo era il formato nella domanda):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Ora crea un file di testo chiamato input.txtche elenca i file da concatenare:

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

    Se vuoi il silenzio alla fine, cambia semplicemente l'ordine dei file input.txt.

  3. Ora puoi concatenare i file usando il demuxer concat :

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

Utilizzo del filtro concat (aggiungi silenzio all'inizio e / o alla fine)

Utilizzare il filtro concat se si desidera eseguire tutte le operazioni in un solo comando o se si desidera eseguire l'output in un formato diverso rispetto all'input (poiché questo metodo ricodifica comunque). Questo metodo funziona per aggiungere silenzio all'inizio o alla fine o entrambi.

Esempio per aggiungere 1 secondo di silenzio all'inizio di un ingresso di frequenza di campionamento stereo da 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
  • Il filtro comporterà la ricodifica, mentre il demuxer concat no.

  • In anullsrc si consiglia di abbinare il layout del canale e la frequenza di campionamento dell'ingresso.

  • Se si desidera aggiungere il silenzio fino alla fine invece basta passare l'ordine degli ingressi dato al filtro concat: [1:a][0:a]concat=n=2:v=0:a=1.


Utilizzo del filtro adelay (aggiungi silenzio all'inizio)

Utilizzare il filtro audio adelay se si desidera eseguire qualsiasi operazione in un solo comando o se si desidera eseguire l'output in un formato diverso rispetto all'input (poiché questo metodo ricodifica comunque). Funziona solo per aggiungere silenzio all'inizio di un file.

Questo esempio aggiungerà 1 secondo di silenzio all'inizio di un ingresso stereo:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Il filtro comporterà la ricodifica, mentre il demuxer concat no.
  • Il valore è in millisecondi. Gli utenti delle versioni recenti (attuale git master o qualcosa di più recente di FFmpeg 4.1) possono invece utilizzare 1sper un secondo.
  • Ogni canale ha bisogno del proprio ritardo. Ad esempio, un input mono verrebbe utilizzato adelay=1000, mentre un input 5.1 verrebbe utilizzato adelay=1000|1000|1000|1000|1000|1000.

Usando il filtro apad (aggiungi silenzio alla fine)

Usa il filtro audio apad se vuoi fare tutto in un solo comando, o se vuoi eseguire l'output in un formato diverso dall'input (poiché questo metodo ricodifica comunque). Funziona solo per aggiungere silenzio alla fine di un file.

Questo esempio aggiungerà 1 secondo di silenzio alla fine:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Il filtro comporterà la ricodifica, mentre il demuxer concat no.

  • L' pad_duropzione è stata aggiunta dopo il rilascio di FFmpeg 4.1, quindi sarà necessario utilizzare una build recente dal ramo master git o attendere FFmpeg 4.2.


5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.La nuova sintassi è-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny

Posso farlo per più file contemporaneamente?
Aaron Franke,

@AaronFranke Sì, ma ffmpeg non ha una tale funzione da solo. Dovresti usare la tua shell o un linguaggio di scripting per eseguire il comando in loop. Il tuo sistema operativo è sconosciuto, quindi non posso darti una soluzione chiavi in ​​mano, ma vedi Come si converte un'intera directory con ffmpeg? per alcune informazioni generali (salta la risposta accettata in quanto inutilmente complessa e inefficiente).
Llogan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.