Cách giữ khung cuối cùng khi sử dụng ffmpeg


9

Tôi đang cắt / chuyển đổi một số video với ffmpeg. Điều tôi thực sự muốn là có thể có đầu ra giữ khung cuối cùng trong vài giây (với chế độ im lặng cho âm thanh). Là một điều như vậy có thể? Hoặc tôi sẽ phải bằng cách nào đó có được khung hình cuối cùng và tạo một video mới từ đó?

Câu trả lời:


11

Một phương pháp là sử dụng overlaybộ lọc video . Giả sử video của bạn là 640x480, thời lượng 30 giây, tốc độ khung hình 25:

ffmpeg -f lavfi -i nullsrc=s=640x480:d=35:r=25 -i video.mp4 -i audio.wav -filter_complex \
"[0:v][1:v]overlay[video]" -map "[video]" -map 2:a -codec:a copy -shortest output.mkv
  • Tôi đặt thời lượng của nullsrcbộ lọc nguồn dài hơn 5 giây input.mkv.

  • Hành vi mặc định của lớp phủ là lặp lại khung cuối cùng của nguồn được phủ. Xem eof_actiontùy chọn cho các hành vi khác.

  • Âm thanh trong ví dụ này đang được sao chép luồng (được trộn lại) thay vì được mã hóa lại.

  • Nhược điểm là các ví dụ này yêu cầu mã hóa lại do bộ lọc đang được sử dụng, nhưng nó có thể đơn giản hơn các phương thức khác vì nó chỉ là một lệnh.


Nghe có vẻ hay - nhưng tôi có thể làm được không nếu tôi cũng thay thế luồng âm thanh bằng tệp wav? Ngoài ra, tôi có cần biết kích thước của video nguồn không?
xorsyst

1
@xorsyst Có, bạn có thể thay thế âm thanh. Tôi đã cập nhật ví dụ. Có, phương pháp này yêu cầu bạn biết kích thước khung hình, thời lượng và tốc độ khung hình của video nguồn, nhưng tất cả các biến này có thể được viết kịch bản. Xem Mẹo FFprobe .
llogan

0

Tôi tin rằng câu trả lời cho câu hỏi của bạn là "có". Tôi không quen thuộc lắm với FFMPEG, nhưng cách dễ nhất tôi có thể thấy để thực hiện mục tiêu của mình là trước tiên trích xuất khung hình cuối cùng thành hình ảnh, tạo video trong vài giây và sau đó chạy mã hóa nối video chính và video của bạn video mới được tạo trong một lần.

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.