FFmpeg có thể chụp ảnh từ video có thể được sử dụng làm hình thu nhỏ để thể hiện video. Các cách làm phổ biến nhất được ghi lại trong FFmpeg Wiki .
Nhưng, tôi không muốn chọn các khung ngẫu nhiên trong một số khoảng thời gian. Tôi đã tìm thấy một số tùy chọn sử dụng các bộ lọc trên FFmpeg để ghi lại các thay đổi cảnh:
Bộ lọc thumbnail
cố gắng tìm các khung đại diện nhất trong video:
ffmpeg -i input.mp4 -vf "thumbnail,scale=640:360" -frames:v 1 thumb.png
và lệnh sau chỉ chọn các khung có hơn 40% thay đổi so với trước đó (và có lẽ là thay đổi cảnh) và tạo ra một chuỗi 5 PNG.
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.4),scale=640:360" -frames:v 5 thumb%03d.png
Thông tin tín dụng cho các lệnh trên cho Fabio Sonnati . Cái thứ hai có vẻ tốt hơn khi tôi có thể lấy n hình ảnh và chọn thứ tốt nhất. Tôi đã thử nó và nó tạo ra cùng một hình ảnh 5 lần.
Một số điều tra thêm dẫn tôi đến:
ffmpeg -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.png
-vsync vfr
đảm bảo rằng bạn có được hình ảnh khác nhau. Điều này vẫn luôn chọn khung đầu tiên của video, trong hầu hết các trường hợp, khung đầu tiên là tín dụng / logo và không có ý nghĩa, vì vậy tôi đã thêm -ss
3 để loại bỏ 3 giây đầu tiên của video.
Lệnh cuối cùng của tôi trông như thế này:
ffmpeg -ss 3 -i input.mp4 -vf "select=gt(scene\,0.5)" -frames:v 5 -vsync vfr out%02d.jpg
Đây là điều tốt nhất tôi có thể làm. Tôi đã nhận thấy rằng vì tôi chỉ chọn 5 video, tất cả chúng hầu hết là từ đầu video và có thể bỏ lỡ những cảnh quan trọng xảy ra sau đó trong video
Tôi muốn chọn bộ não của bạn cho bất kỳ lựa chọn tốt hơn khác.
mjpeg
bộ mã hóa cho tôi và tôi cũng đã kiểm tra jpegoptim
và exiv2
cả hai đều hoạt động tốt với tôi với tất cả các kết quả JPG từ các lệnh ví dụ của bạn.
libopenjpeg
.. không chắc chắn nếu điều đó làm cho một sự khác biệt.