FFmpeg aracılığıyla sese 1 saniyelik sessizlik ekleyin


14

Başlangıçta x saniye sessiz ses eklemek istediğim bir AC3 5.1 ses dosyası var. Bunun video muxing ile hiçbir ilgisi yoktur, bu yüzden sadece bir videoya eşlik eden bir ses akışı ile çalıştığı için itsoffset işe yaramaz. Bunu ffmpeg ile başarmak istiyorum. Herhangi bir fikir?


ffmpeg aynı oranda kodek aynı oranda şeyler eklemek veya katılmak?
Psycogeek

Sanırım ... @Psycogeek
Makaveli84

Aynı codec oranı ve kanalı için sessiz bir ses dosyası üretebiliyor mu? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Kendim GUI yöntemlerini kullanıyorum, ancak parametrelerin hepsi aynı olduğu sürece, sorma işleminizi yapmak oldukça kolay ve çok hızlı olmalı. İşte burada Mov'a eklenerek gösterilmiştir. stackoverflow.com/questions/12368151/… Cevaplarda
Psycogeek

İstediğiniz her şeyi eklemek için Ardour kullanın. Efektlerin yanı sıra Buzağı eklentilerini de indirin ..
gösterge panosu

Yanıtlar:


23

Concat demuxer'ı kullanma (başlangıç ​​ve / veya sona sessizlik ekleyin)

Ana segmenti yeniden kodlamaktan kaçınmak istiyorsanız concat demuxer'ı kullanın. Bu yöntemler, başlangıca veya sona (veya her ikisine) sessizlik eklemek için çalışır.

  1. Sessiz ses oluşturmak için anullsrc ses kaynağı filtresini kullanın . Ana ses dosyasının biçimini, kanal düzenini ve örnekleme hızını eşleştirmeniz gerekir. 5.1 kanal, 48000 Hz örnekleme hızı, 1 saniye sessiz AC3 ses dosyası yapmak için örnek (sorudaki biçim buydu):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Şimdi, input.txtbirleştirilecek dosyaları listeleyen adlı bir metin dosyası oluşturun :

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

    Sessizliğin sonunda olmasını istiyorsanız dosyaların sırasını değiştirin input.txt.

  3. Artık concat demuxer'ı kullanarak dosyaları birleştirebilirsiniz :

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

Concat filtresini kullanma (başına ve / veya sonuna sessizlik ekleyin)

Her şeyi tek bir komutta yapmak istiyorsanız veya girişten farklı bir biçime çıktı vermek istiyorsanız (bu yöntem yine de yeniden kodladığından) concat filtresini kullanın. Bu yöntemler başlangıca, sonuna veya her ikisine de sessizlik eklemek için çalışır.

Bir stereo, 44100 Hz örnekleme hızı girişinin başına 1 saniyelik sessizlik ekleme örneği:

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
  • Filtre, concat demuxer yeniden kodlamaya neden olmaz.

  • Anullsrc'de kanal yerleşimi ve girişin örnekleme hızıyla eşleşmesi önerilir.

  • Sonuna kadar sessizliği eklemek isterseniz bunun yerine sadece concat filtresine verilen girdilerin sırasını değiştirmek: [1:a][0:a]concat=n=2:v=0:a=1.


Adelay filtresini kullanma (başlangıca sessizlik ekleyin)

Her şeyi tek bir komutta yapmak istiyorsanız veya girişten farklı bir formatta çıktı almak istiyorsanız (bu yöntem yine de yeniden kodladığından) adelay ses filtresini kullanın . Bu yalnızca dosyanın başına sessizlik eklemek için çalışır.

Bu örnek, bir stereo girişin başına 1 saniye sessizlik katacaktır:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Filtre, concat demuxer yeniden kodlamaya neden olmaz.
  • Değer milisaniye cinsindendir. Son sürümlerin kullanıcıları (geçerli git ustası veya FFmpeg 4.1'den daha yeni bir şey) bunun yerine 1sbir saniye kullanabilir .
  • Her kanalın kendi gecikmesine ihtiyacı vardır. Örneğin, bir mono giriş kullanılırken adelay=1000, 5.1 bir giriş kullanılır adelay=1000|1000|1000|1000|1000|1000.

Apad filtresini kullanma (sonuna sessizlik ekleyin)

Her şeyi tek bir komutta yapmak istiyorsanız veya girişten farklı bir formatta çıktı almak istiyorsanız (bu yöntem yine de yeniden kodladığı için) apad ses filtresini kullanın . Bu yalnızca dosyanın sonuna sessizlik eklemek için çalışır.

Bu örnek sonuna 1 saniye sessizlik katacaktır:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Filtre, concat demuxer yeniden kodlamaya neden olmaz.

  • pad_durEğer git ana daldan son yapı kullanma veya FFmpeg'den 4.2 beklemek gerekir böylece seçeneği FFmpeg'den 4.1 yayımlanmasından sonra eklendi.


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

Bunu aynı anda birden fazla dosya için yapabilir miyim?
Aaron Franke

@AaronFranke Evet, ancak ffmpeg'in böyle bir özelliği yoktur. Komutu döngüye almak için kabuğunuzu veya bir komut dosyası dilini kullanmanız gerekir. İşletim sisteminiz bilinmiyor, bu yüzden size anahtar teslimi bir çözüm veremem, ancak bkz. Bir dizinin tamamını ffmpeg ile nasıl dönüştürebilirsiniz? bazı genel bilgiler için (gereksiz yere karmaşık ve verimsiz olduğu için kabul edilen cevabı atlayın).
llogan

adelayayrıca alltüm kanalları belirli bir miktarda geciktirmek için (ped başından itibaren) faydalı bir seçeneğe sahiptiradelay=delays=1000:all=1
Jurijs Kovzels
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.