Thêm 1 giây im lặng cho âm thanh thông qua FFmpeg


14

Tôi có một tệp âm thanh AC3 5.1 mà tôi muốn chèn x giây âm thanh vào lúc đầu. Điều này không liên quan gì đến việc trộn video, do đó, bộ xử lý của nó là vô ích vì dường như nó chỉ hoạt động với một luồng âm thanh đi kèm với video. Tôi muốn đạt được điều này với ffmpeg. Có ý kiến ​​gì không?


ffmpeg sẽ nối thêm hoặc tham gia cùng một thứ tỷ lệ codec?
Psycogeek

Tôi cho rằng ... @Psycogeek
Makaveli84

Và nó có khả năng tạo ra một tệp âm thanh im lặng có cùng tốc độ và kênh codec không? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? Bản thân tôi sử dụng các phương thức GUI, nhưng thực hiện những gì yêu cầu của bạn khá dễ dàng và rất nhanh, miễn là các tham số đều giống nhau. Đây là nơi nó được hiển thị thêm nó vào Mov. stackoverflow.com/questions/12368151/ trên trong câu trả lời
Psycogeek

Sử dụng Ardor để thêm bất cứ điều gì bạn muốn. Nếu bạn muốn có hiệu ứng cũng hãy tải xuống các plugin Calf ..
bảng điều khiển

Câu trả lời:


23

Sử dụng bộ giải mã concat (thêm khoảng lặng vào đầu và / hoặc kết thúc)

Sử dụng bộ giải mã concat nếu bạn muốn tránh mã hóa lại phân khúc chính. Phương pháp này hoạt động để thêm sự im lặng vào đầu hoặc cuối (hoặc cả hai).

  1. Sử dụng bộ lọc nguồn âm thanh anullsrc để tạo âm thanh im lặng. Bạn sẽ cần phải phù hợp với định dạng, bố cục kênh và tốc độ mẫu của tệp âm thanh chính. Ví dụ để tạo kênh 5.1, tốc độ mẫu 48000 Hz, tệp âm thanh AC3 im lặng 1 giây (vì đây là định dạng trong câu hỏi):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. Bây giờ tạo một tệp văn bản có tên input.txtliệt kê các tệp sẽ được nối:

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

    Nếu bạn muốn sự im lặng ở cuối thay vào đó chỉ cần chuyển thứ tự của các tệp trong input.txt.

  3. Bây giờ bạn có thể nối các tệp bằng cách sử dụng trình giải mã concat :

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

Sử dụng bộ lọc concat (thêm khoảng lặng vào đầu và / hoặc kết thúc)

Sử dụng bộ lọc concat nếu bạn muốn thực hiện mọi thứ trong một lệnh hoặc nếu bạn muốn xuất ra một định dạng khác với đầu vào (vì phương thức này vẫn mã hóa lại bằng mọi cách). Phương pháp này hoạt động để thêm sự im lặng vào đầu hoặc cuối hoặc cả hai.

Ví dụ để thêm 1 giây im lặng vào đầu âm thanh nổi, đầu vào tốc độ mẫu 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
  • Lọc sẽ dẫn đến mã hóa lại trong khi trình giải mã concat sẽ không.

  • Trong anullsrc, nên khớp với bố cục kênh và tốc độ mẫu của đầu vào.

  • Thay vào đó, nếu bạn muốn thêm khoảng lặng vào cuối, chỉ cần chuyển thứ tự của các đầu vào được cung cấp cho bộ lọc concat : [1:a][0:a]concat=n=2:v=0:a=1.


Sử dụng bộ lọc adelay (thêm khoảng lặng để bắt đầu)

Sử dụng bộ lọc âm thanh adelay nếu bạn muốn thực hiện mọi thứ trong một lệnh hoặc nếu bạn muốn xuất ra một định dạng khác với đầu vào (vì phương thức này vẫn mã hóa lại bằng mọi cách). Điều này chỉ hoạt động để thêm sự im lặng vào đầu tập tin.

Ví dụ này sẽ thêm 1 giây im lặng vào đầu của âm thanh nổi:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • Lọc sẽ dẫn đến mã hóa lại trong khi trình giải mã concat sẽ không.
  • Giá trị tính bằng mili giây. Người dùng của các phiên bản gần đây (git master hiện tại hoặc bất kỳ thứ gì mới hơn FFmpeg 4.1) thay vào đó có thể sử dụng 1strong một giây.
  • Mỗi kênh cần độ trễ riêng. Ví dụ: đầu vào đơn sẽ sử dụng adelay=1000, trong khi đầu vào 5.1 sẽ sử dụng adelay=1000|1000|1000|1000|1000|1000.

Sử dụng bộ lọc apad (thêm khoảng lặng vào cuối)

Sử dụng bộ lọc âm thanh apad nếu bạn muốn thực hiện mọi thứ trong một lệnh hoặc nếu bạn muốn xuất ra một định dạng khác với đầu vào (vì phương thức này vẫn mã hóa lại bằng mọi cách). Điều này chỉ hoạt động để thêm sự im lặng vào cuối tập tin.

Ví dụ này sẽ thêm 1 giây im lặng vào cuối:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • Lọc sẽ dẫn đến mã hóa lại trong khi trình giải mã concat sẽ không.

  • Các pad_durtùy chọn đã được bổ sung sau khi phát hành FFmpeg 4.1, vì vậy bạn sẽ cần phải sử dụng một xây dựng gần đây từ các chi nhánh chủ git hoặc chờ cho FFmpeg 4.2.


5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.Cú pháp mới là-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny

Tôi có thể làm điều này cho nhiều tập tin cùng một lúc không?
Aaron Franke

@AaronFranke Có, nhưng ffmpeg không có tính năng như vậy. Bạn sẽ phải sử dụng shell của mình hoặc một ngôn ngữ script để lặp lệnh. Hệ điều hành của bạn không xác định vì vậy tôi không thể cung cấp cho bạn giải pháp chìa khóa trao tay, nhưng hãy xem Làm thế nào để bạn chuyển đổi toàn bộ thư mục bằng ffmpeg? đối với một số thông tin chung (bỏ qua câu trả lời được chấp nhận vì nó phức tạp và không hiệu quả một cách không cần thiết).
llogan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.