Tambahkan 1 detik diam ke audio melalui FFmpeg

14

Saya memiliki file audio AC3 5.1 yang ingin saya masukkan x detik audio diam di awal. Ini tidak ada hubungannya dengan muxing video, jadi pengaturannya tidak berguna karena tampaknya hanya bekerja dengan aliran audio yang menyertai video. Saya ingin mencapai ini dengan ffmpeg. Ada ide?

Makaveli84
sumber
ffmpeg akan menambahkan atau bergabung dengan codec yang sama menilai hal yang sama?
Psycogeek
Saya kira ... @Psycogeek
Makaveli84
Dan apakah ini mampu menghasilkan file audio bisu dari laju dan saluran codec yang sama persis? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Saya sendiri menggunakan metode GUI, tetapi melakukan apa yang Anda minta seharusnya cukup mudah dan sangat cepat, asalkan semua parameternya sama. Di sinilah ditampilkan menambahkannya ke Mov. stackoverflow.com/questions/12368151/… dalam jawaban
Psycogeek
Gunakan Ardour untuk menambahkan apa pun yang Anda inginkan. Jika Anda menginginkan efek, unduh juga plugin Calf ..
dashboard

Jawaban:

23

Menggunakan concat demuxer (tambahkan diam ke awal dan / atau akhir)

Gunakan pendamai concat jika Anda ingin menghindari pengkodean ulang segmen utama. Metode ini berfungsi untuk menambahkan keheningan ke awal atau akhir (atau keduanya).

  1. Gunakan filter sumber audio anullsrc untuk membuat audio diam. Anda harus mencocokkan format, tata letak saluran, dan laju sampel file audio utama. Contoh untuk membuat saluran 5.1, laju sampel 48000 Hz, file audio AC3 diam 1 detik (seperti ini format dalam pertanyaan):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Sekarang buat file teks bernama input.txtyang mencantumkan file yang akan digabungkan:

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

    Jika Anda ingin keheningan di akhir, alih-alih ganti saja urutan file input.txt.

  3. Sekarang Anda dapat menggabungkan file menggunakan demuxer concat :

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

Menggunakan filter concat (tambahkan keheningan ke awal dan / atau akhir)

Gunakan filter concat jika Anda ingin melakukan semuanya dalam satu perintah, atau jika Anda ingin output ke format yang berbeda dari input (karena metode ini tetap mengenkode ulang). Metode ini berfungsi untuk menambahkan keheningan ke awal atau akhir atau keduanya.

Contoh untuk menambahkan 1 detik keheningan ke awal stereo, input rate sampel 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
  • Pemfilteran akan menghasilkan pengkodean ulang sedangkan demuxer concat tidak.

  • Dalam anullsrc disarankan untuk mencocokkan tata letak saluran dan laju sampel input.

  • Jika Anda ingin menambahkan diam ke akhir bukan hanya beralih urutan input yang diberikan ke filter concat: [1:a][0:a]concat=n=2:v=0:a=1.


Menggunakan filter adelay (tambahkan diam ke awal)

Gunakan filter audio adelay jika Anda ingin melakukan semuanya dalam satu perintah, atau jika Anda ingin output ke format yang berbeda dari input (karena metode ini tetap mengenkode ulang). Ini hanya berfungsi untuk menambahkan keheningan ke awal file.

Contoh ini akan menambahkan 1 detik keheningan ke awal input stereo:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Pemfilteran akan menghasilkan pengkodean ulang sedangkan demuxer concat tidak.
  • Nilai dalam milidetik. Pengguna versi terbaru (git master saat ini atau apa pun yang lebih baru dari FFmpeg 4.1) dapat digunakan 1suntuk satu detik.
  • Setiap saluran membutuhkan penundaannya sendiri. Misalnya, input mono akan digunakan adelay=1000, sedangkan input 5.1 akan digunakan adelay=1000|1000|1000|1000|1000|1000.

Menggunakan filter apad (tambahkan keheningan sampai akhir)

Gunakan filter audio apad jika Anda ingin melakukan semuanya dalam satu perintah, atau jika Anda ingin output ke format yang berbeda dari input (karena metode ini tetap mengenkode ulang). Ini hanya berfungsi untuk menambahkan keheningan di akhir file.

Contoh ini akan menambahkan 1 detik keheningan sampai akhir:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Pemfilteran akan menghasilkan pengkodean ulang sedangkan demuxer concat tidak.

  • The pad_durpilihan yang ditambahkan setelah rilis FFmpeg 4.1, sehingga Anda akan perlu menggunakan membangun terbaru dari cabang master git atau menunggu FFmpeg 4.2.

llogan
sumber
5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.Sintaks baru adalah-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny
Bisakah saya melakukan ini untuk banyak file sekaligus?
Aaron Franke
@ HarunFranke Ya, tetapi ffmpeg tidak memiliki fitur seperti itu dengan sendirinya. Anda harus menggunakan shell atau bahasa scripting untuk mengulang perintah. OS Anda tidak dikenal sehingga saya tidak bisa memberi Anda solusi turnkey, tetapi lihat Bagaimana Anda mengonversi seluruh direktori dengan ffmpeg? untuk beberapa info umum (lewati jawaban yang diterima karena tidak perlu rumit dan tidak efisien).
llogan