Dodaj 1 sekundę ciszy do dźwięku przez FFmpeg

14

Mam plik audio AC3 5.1, do którego chciałbym wstawić x sekund cichego dźwięku na początku. Nie ma to nic wspólnego z multipleksowaniem wideo, więc jego przesunięcie jest bezużyteczne, ponieważ wydaje się, że działa tylko ze strumieniem audio towarzyszącym strumieniowi wideo. Chciałbym to osiągnąć za pomocą ffmpeg. Jakieś pomysły?

Makaveli84
źródło
ffmpeg doda lub przyłączy ten sam kodek o tej samej wartości?
Psycogeek
Przypuszczam ... @Psycogeek
Makaveli84
I czy jest w stanie wygenerować cichy plik audio o dokładnie takiej samej szybkości i kodeku? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Sam używam metod GUI, ale robienie tego, o co pytasz, powinno być dość łatwe i bardzo szybkie, o ile parametry są takie same. Tutaj jest pokazane dodawanie go do Mov. stackoverflow.com/questions/12368151/... w odpowiedziach
Psycogeek
Użyj Ardora, aby dodać cokolwiek chcesz. Jeśli chcesz także efekty, pobierz wtyczki Calf.
pulpit nawigacyjny

Odpowiedzi:

23

Korzystanie z demultipleksera konkat (dodaj ciszę do początku i / lub końca)

Użyj demuxera konkat, jeśli chcesz uniknąć ponownego kodowania głównego segmentu. Ta metoda działa w celu dodania ciszy na początku lub na końcu (lub obu).

  1. Użyj filtra źródła dźwięku anullsrc, aby utworzyć cichy dźwięk. Musisz dopasować format, układ kanału i częstotliwość próbkowania głównego pliku audio. Przykład wykonania 5.1-kanałowego, częstotliwości próbkowania 48000 Hz, 1-sekundowego cichego pliku audio AC3 (ponieważ taki był format pytania):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Teraz utwórz plik tekstowy o nazwie, input.txtktóry zawiera listę plików do połączenia:

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

    Jeśli chcesz na końcu ciszy, po prostu zmień kolejność plików input.txt.

  3. Teraz możesz połączyć pliki za pomocą demuxera concat :

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

Korzystanie z filtra konkat (dodaj ciszę na początku i / lub końcu)

Użyj filtru konkat, jeśli chcesz zrobić wszystko za pomocą jednego polecenia lub jeśli chcesz wyprowadzać dane w innym formacie niż dane wejściowe (ponieważ ta metoda i tak jest ponownie kodowana). Ta metoda działa w celu dodania ciszy na początku, na końcu lub w obu.

Przykład dodania 1 sekundy ciszy na początku wejścia stereo o częstotliwości próbkowania 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
  • Filtrowanie spowoduje ponowne kodowanie, a demuxer konkat nie.

  • W anullsrc zaleca się dopasowanie układu kanału i częstotliwości próbkowania wejścia.

  • Jeśli chcesz dodać ciszę do końca, zamiast po prostu zmienić kolejność wejść podanych do filtra concat: [1:a][0:a]concat=n=2:v=0:a=1.


Korzystanie z filtra Adelay (dodaj ciszę na początku)

Użyj filtru audio Adelay, jeśli chcesz zrobić wszystko za pomocą jednego polecenia lub jeśli chcesz wyprowadzić sygnał w innym formacie niż wejście (ponieważ ta metoda i tak jest ponownie kodowana). Działa to tylko w celu dodania ciszy na początku pliku.

Ten przykład doda 1 sekundę ciszy na początku wejścia stereo:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Filtrowanie spowoduje ponowne kodowanie, a demuxer konkat nie.
  • Wartość jest w milisekundach. Użytkownicy najnowszych wersji (bieżący git master lub cokolwiek nowszego niż FFmpeg 4.1) mogą zamiast tego używać 1sprzez jedną sekundę.
  • Każdy kanał potrzebuje własnego opóźnienia. Na przykład skorzystałoby z wejścia mono adelay=1000, podczas gdy z wejścia 5.1 adelay=1000|1000|1000|1000|1000|1000.

Korzystanie z filtra apad (dodaj ciszę na końcu)

Użyj filtra audio apad, jeśli chcesz zrobić wszystko za pomocą jednego polecenia lub jeśli chcesz wyprowadzić sygnał w innym formacie niż wejście (ponieważ ta metoda i tak jest ponownie kodowana). Działa to tylko w celu dodania ciszy na końcu pliku.

Ten przykład doda 1 sekundę ciszy do końca:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Filtrowanie spowoduje ponowne kodowanie, a demuxer konkat nie.

  • pad_durOpcja dodano po wydaniu FFmpeg 4.1, więc trzeba będzie użyć najnowszej kompilacji z git głównego oddziału lub czekać na FFmpeg 4.2.

Llogan
źródło
5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.Nowa składnia to-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny,
Czy mogę to zrobić dla wielu plików jednocześnie?
Aaron Franke
@AaronFranke Tak, ale ffmpeg nie ma takiej funkcji jako takiej. Będziesz musiał użyć powłoki lub języka skryptowego, aby zapętlić polecenie. Twój system operacyjny jest nieznany, więc nie mogę dać ci rozwiązania pod klucz, ale zobacz Jak przekonwertować cały katalog za pomocą ffmpeg? dla niektórych ogólnych informacji (pomiń przyjętą odpowiedź, ponieważ jest ona niepotrzebnie złożona i nieefektywna).
llogan
adelaymają również przydatną allopcję opóźniania (pad od początku) wszystkich kanałów o pewną kwotę, np.adelay=delays=1000:all=1
Jurijs Kovzels