Làm cách nào để FFMPEG tham gia các tệp hình ảnh không tuần tự? (bỏ qua 3 giây)


27

Tôi có một loạt các hình ảnh, theo mô hình này.

0001.png
0004.png
0007.png
0010.png
0013.png
0016.png
0019.png
...

Chúng theo đúng thứ tự, nhưng FFMPEG bỏ qua mọi thứ sau tệp đầu tiên, vì nó không thể tìm thấy a 0002.png. Làm thế nào tôi có thể có được nó để tham gia các tập tin này?

Tôi đã thử

ffmpeg -i %04d.png out.avi

2
Làm thế nào về việc tạm thời đổi tên chúng, tạo AVI và sau đó đổi tên chúng thành sơ đồ (3x-2) .png? Tiện ích đổi tên hàng loạt @ Bulkrenameutility.co.uk/Main_Intro.php là một công cụ đổi tên miễn phí, umm, số lượng lớn.
Gyan

Câu trả lời:


18

với ffmpeg 0.11.1, nó dễ như:

ffmpeg -f image2 -i %*.png out.avi

Từ mantrang, trong một ví dụ trong "Chuyển đổi định dạng tệp video và âm thanh":

Khi nhập một chuỗi hình ảnh, -icũng hỗ trợ mở rộng các mẫu ký tự đại diện giống như vỏ (globalbing) trong nội bộ. Để giảm cơ hội can thiệp vào tên tệp thực tế của bạn và mở rộng toàn cầu của shell, bạn được yêu cầu kích hoạt các ký tự meta toàn cầu bằng cách thêm tiền tố vào chúng bằng một %ký tự, như trong foo-%*.jpeg, foo-%?%?%?.jpeghoặc foo-00%[234%]%*.jpeg.

Cập nhật mỗi bình luận: trên các phiên bản gần đây, bạn nên sử dụng -i '*.png'cú pháp.


3
Điều này đã không làm việc cho tôi bằng cách sử dụng ffmpeg hoặc avconv trong Ubuntu 13.04
hellocatfood

2
Điều này dường như không còn là một lựa chọn nữa.
Timmmm

2
Kiểu glob_sequencemẫu không được dùng nữa, nhưng globkiểu mẫu thì không. Câu trả lời của Mulvya và Peter Cordes hoạt động.
dr. Sybren

1
Pattern type 'glob_sequence' is deprecated: use pattern_type 'glob' instead
Serge Stroobandt

1
Cũng như làm rõ, vì trang này hiện là kết quả hàng đầu trong Google cho thông báo cảnh báo đó ( Pattern type 'glob_sequence' is deprecated...): lệnh được đưa ra bởi rymo ở trên (cụ thể, -i %*.png) sẽ gây ra cảnh báo. Để loại bỏ nó, hãy sử dụng cú pháp hơi khác trong câu trả lời của Peter Cordes ( -i '*.png').
James

19

Ngoài cách giải quyết trong nhận xét của tôi, bạn sẽ có thể sử dụng cú pháp này từ tài liệu ffmpeg :

ffmpeg -f image2 -pattern_type glob -i '*.png' out.avi

Các trích dẫn rất quan trọng, bạn cần ffmpeg để xem *, không có shell mở rộng nó.


Không làm việc cho tôi, nhưng có lẽ vì tôi có bản dựng cũ hơn. Tôi chấp nhận điều này bởi vì nó rất có thể sẽ giúp người dùng trong tương lai.
Brigand

Theo tài liệu ffmpeg, bạn nên sử dụng '* .png' thay vì% 04d.png với kiểu mẫu hình cầu.
Bạn của George

Điều đó sau đó sẽ chọn tất cả các pngs có trong thư mục, ngoài 00xx.png, trong khi OP chỉ muốn xếp hàng các png% 04d mà không phải lo lắng về việc đánh số liên tục.
Gyan

2
Tôi khá chắc chắn rằng bạn cần đặt *.pngcác trích dẫn đơn (vì vậy '*.png') để tránh bị mở rộng bởi các shell kiểu Unix (vì vậy, OSX và linux, v.v.).
evilsoup

1
Đáng buồn thay, các nhà phát triển ffmpeg làm cho tập tin toàn cầu hỗ trợ một tùy chọn ! Các bản dựng cửa sổ tiêu chuẩn không bao gồm nó.
Timmmm

9

Từ http://www.ffmpeg.org/faq.html : Nếu bạn có số lượng lớn hình ảnh để đổi tên, bạn có thể sử dụng lệnh sau để giảm bớt gánh nặng. Lệnh, sử dụng cú pháp shell bourne, liên kết một cách tượng trưng tất cả các tệp trong thư mục hiện tại khớp với * jpg với thư mục '/ tmp' trong chuỗi 'img001.jpg', 'img002.jpg', v.v.

x=1; for i in *jpg; do counter=$(printf %03d $x); ln -s "$i" /tmp/img"$counter".jpg; x=$(($x+1)); done


Tôi đã sử dụng điều này để kết hợp nhiều chuỗi seqA-[0001-n].png, seqB-[0001-n].pngv.v ... Dễ dàng hơn nhiều so với việc làm rối tung với hình ảnh toàn cầu và bộ lọc concat.
z0r

Đối với tôi điều này không làm việc cho đến khi tôi thay thế for i in *jpgvới for i in /full/path/*jpg, bởi vì tất cả các liên kết tượng trưng đã bị phá vỡ
Jezzamon

4

Tôi thực sự sẽ đề nghị điều tương tự Mulvya đề nghị. Bất cứ khi nào tôi cần làm những thứ như thế này khi xử lý kết xuất hoạt hình 3D, tôi đã đổi tên các tệp để biến chúng thành tuần tự. Thật dễ dàng để làm việc theo cách đó trong nhiều phần mềm khác nhau trừ khi bạn cần giữ nguyên tên tệp vì một số lý do. Total Commander cũng là một công cụ tuyệt vời để đổi tên nhiều.


Cuối cùng tôi đã làm một cái gì đó tương tự (một kịch bản đổi tên Python).
Brigand

3

Đối với phần trình tự bị thiếu, tôi sử dụng 2 lớp lót

CONCAT=$(echo $(ls *.png | sort -n -t _ -k 2) | sed -e "s/ /|/g")
ffmpeg -framerate 25 -i "concat:$CONCAT" -c:v libx264 -profile:v high -pix_fmt yuv420p output.mp4

Hy vọng điều này sẽ giúp được ai đó trong tương lai

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.