ffmpeg thêm âm thanh nhưng giữ nguyên độ dài video (không phải là ngắn nhất)


12

Tôi đang thêm âm thanh vào tệp video bằng ffmpeg như vậy

ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4

Tuy nhiên, điều này mở rộng tệp video đầu ra thành độ dài của tệp âm thanh nếu nó dài hơn video. Sử dụng -shortest sẽ cắt ngắn tệp video nếu tệp âm thanh ngắn hơn video. Vì vậy, có một lá cờ để nói với ffmpeg để cắt giữ độ dài của video đầu ra với độ dài của video đầu vào?


Vui lòng chọn một câu trả lời đúng. Người duy nhất đúng chính xác là người của @Zurechtweiser.
Roel Van de Paar

Câu trả lời:


13

Tôi tin rằng bạn có thể đạt được mục tiêu mong muốn của mình bằng cách sử dụng tùy chọn -filter_complex và tùy chọn bộ lọc apad để loại bỏ âm thanh của bạn với sự im lặng ở cuối nếu video dài hơn. Lệnh của bạn sẽ là:

ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4

Điều này giả sử âm thanh bạn muốn nằm trong luồng đầu tiên của audiofile.wav, cú pháp [A: B] nói sẽ lấy luồng B'th từ đầu vào A'th (cả hai đều bắt đầu bằng 0, vì vậy [1: 0] là luồng thứ 1 từ đầu vào thứ 2 hoặc audiofile.wav ở trên).

Chi tiết tại: https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68


Bạn nên đề cập rằng -filter_complextùy chọn bắt buộc mã hóa lại - ví dụ như có thể chạy ffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4nhưng khôngffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
Eugen Rieck

Đây là câu trả lời ngược lại của những gì được yêu cầu. OP yêu cầu kết thúc video khi âm thanh kết thúc, câu trả lời được đưa ra là thêm im lặng âm thanh nếu âm thanh ngắn hơn video. Câu trả lời này không chính xác.
Roel Van de Paar

Đó không phải là "điều ngược lại" với những gì OP yêu cầu. Các OP muốn video đầu ra là độ dài của video đầu vào, bất kể độ dài của đoạn âm thanh. Câu trả lời của tôi giải quyết tình huống video đầu vào dài hơn tệp âm thanh. OP đã có một giải pháp cho khi video đầu vào ngắn hơn tệp âm thanh, đó là sử dụng -shortest.
deadcode

12
  • Nếu độ dài video ngắn hơn độ dài âm thanh, -shortestlà những gì bạn muốn.
  • Nếu độ dài video dài hơn độ dài âm thanh, không có cờ nào sẽ là thứ bạn muốn.

Không có cờ để tự động hóa quyết định này.

BIÊN TẬP

Lấy cảm hứng từ câu trả lời của @ deadcode, tôi cần phải làm rõ rằng "không có cờ để tự động hóa" tất nhiên là không đúng, nếu bạn sẵn sàng mã hóa lại : Trong trường hợp này, hãy đi apadtheo đề xuất của @deadcode.

Tuy nhiên, nếu bạn muốn tránh mã hóa lại (tức là -c:v copy), câu trả lời là viết tắt.

Có một cách giải quyết bằng cách sử dụng bộ giải ffconcatmã, nhưng nó cần một chút công việc:

  • tạo một tệp chứa khoảng im lặng ở định dạng chính xác giống như audiofile của bạn ("shut.wav")
  • tạo một tập tin concat "audio.ffconcat" (có nhiều dòng im lặng như bạn cần để đảm bảo âm thanh của bạn đủ dài):

.

file 'audiofile.wav'
file 'silence.wav'
file 'silence.wav'
...
file 'silence.wav'
  • chạy ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4

Điều này sẽ tổng hợp apadbộ lọc mà không có đồ thị bộ lọc, do đó cho phép một mux mà không cần mã hóa lại.


@RoelVandePaar Như tôi đã nói: Nếu thời lượng video ngắn hơn thời lượng âm thanh, hãy sử dụng -shortest , hãy sử dụng cách giải quyết này nếu bạn muốn thêm im lặng mà không cần mã hóa lại.
Eugen Rieck

Đúng, bỏ qua mà xem xét. Loại bỏ đầu vào. Cảm thấy tự do để làm như vậy.
Roel Van de Paar

5

Nếu bạn biết độ dài của tệp video của mình, bạn có thể thực hiện điều đó bằng cách sử dụng

ffmpeg -i videofile.mp4 -i audiofile.wav -t 43 output.mp4

Trong đó 43 là độ dài của tệp video của bạn tính bằng giây.


câu hỏi của tác giả muốn lặp lại tệp âm thanh trong khi video chưa kết thúc. Điều này có làm việc cho điều đó?
Rafael Sanches

@RafaelSanches Không, anh ấy không.
Zurarouweiser

Tác giả không muốn lặp lại âm thanh. Câu trả lời này cũng là câu trả lời đúng duy nhất thực hiện những gì OP đã hỏi; kết thúc video khi video đầu vào kết thúc.
Roel Van de Paar
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.