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_framemà không cần selectbộ 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 autonó 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 1là 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 selectvà 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 -itù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_Ikhông tồn tại - nó nên như vậy I.
Trong scalebộ lọc, bạn có thể thay thế 73hoặ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:-1hoặ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 ffmpegcho 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