Tôi đang cố gắng trích xuất các khung hình chính từ một video clip. Tôi đã thử lệnh sau, nhưng nó trích xuất tất cả các khung.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Tôi đang cố gắng trích xuất các khung hình chính từ một video clip. Tôi đã thử lệnh sau, nhưng nó trích xuất tất cả các khung.
ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -i 2.flv -vsync 2 -s 73x41 -r 30 -f image2 thumbnails-%%02d.jpeg
Câu trả lời:
Bạn có thể làm điều này đơn giản hơn bằng cách sử dụng -skip_frame
mà không cần select
bộ lọc video:
ffmpeg -skip_frame nokey -i 2.flv -vsync 0 -r 30 -f image2 thumbnails-%02d.jpeg
-threads 1
, so với mặc định, -threads auto
nó làm cho cropdetect
đồ thị bộ lọc ( ffmpeg -threads 1 -skip_frame nokey -i input.mkv -filter:v select='not(mod(n\,20))',cropdetect -an -f null /dev/null
) nhanh gấp 2 lần trên hệ thống của tôi (60 giây xuống còn 30 giây)!
-threads 1
là vì nếu không thì chuỗi các khung hình chính đầu ra có thể được phát hành không theo thứ tự. Nếu bạn có một số loại sau hoc cách đối phó với vấn đề này, bạn có thể giữ lại đa luồng. Ngoài ra, dường như vẫn có thể nhận được các khung hình không theo thứ tự, ngay cả khi sử dụng -threads 1
, nhưng trong trường hợp này, tất cả các sự cố như vậy dường như được đi kèm / gắn cờ bởi lỗi bộ giải mã h264 illegal short term buffer state detected
.
Ví dụ sử dụng bộ lọc select
và scale
:
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I),scale=73x41" \
-vsync vfr -qscale:v 2 thumbnails-%02d.jpeg
IT tiên boa:
Các bộ lọc không nên đi trước -i
tùy chọn, vì chúng là một tùy chọn đầu ra. Tôi không biết chính xác bạn đã nhận lệnh từ đâu, nhưng PICT_TYPE_I
không tồn tại - nó nên như vậy I
.
Trong scale
bộ lọc, bạn có thể thay thế 73
hoặc 41
để bộ lọc tự động tính toán chiều rộng hoặc chiều cao để duy trì tỷ lệ khung hình: chẳng hạn như scale=73:-1
hoặc scale=-1:41
. Điều này ngăn cản việc kéo dài hoặc squishing có thể dẫn đến việc chia tỷ lệ "bắt buộc".
Chất lượng đầu ra có thể được kiểm soát bằng -qscale:v
(hoặc bí danh -q:v
). Phạm vi hiệu quả là thang đo tuyến tính từ 2 đến 31 và giá trị thấp hơn là chất lượng cao hơn.
Rằng bạn ffmpeg
cho phép một bộ lọc trước khi đầu vào cho tôi biết nó có thể bị lỗi thời. Tải xuống bản dựng tĩnh gần đây cho hệ điều hành của bạn hoặc tự xây dựng bản thân theo hướng dẫn biên dịch nếu cách trên không hoạt động.
ffmpeg -i 2.flv -vf "select=eq(pict_type\,I)" -vsync vfr frame-%02d.png
nếu lỗi này
Tùy chọn vf (đặt bộ lọc video) không thể được áp dụng cho url đầu vào 1508.mp4 - bạn đang cố gắng áp dụng tùy chọn đầu vào cho tệp đầu ra hoặc ngược lại. Di chuyển tùy chọn này trước khi tập tin thuộc về nó. Lỗi phân tích tùy chọn cho tệp đầu vào 1508.mp4. Lỗi mở tệp đầu vào: Đối số không hợp lệ
bạn có thể làm được việc này:
ffmpeg -i 263.mp4 -vf select=eq(pict_type\,PICT_TYPE_I) -vsync 2 -s 480x320 -r 24 -f image2 thumbnails-%05d.jpeg
== --------------------------------------------
Thông số trước -i