Ghi tên tệp của hình ảnh đơn vào video đầu ra FFmpeg


6

Tôi đang sử dụng FFmpeg để đọc trong một loạt các hình ảnh đơn lẻ và xuất chúng dưới dạng video.
Kết quả là một bản thời gian của các ảnh chụp màn hình của một trang web trong khoảng thời gian 1 phút.

Bây giờ tôi muốn ghi thời gian chụp ban đầu của mỗi hình ảnh vào video kết quả bằng lệnh drawtext. Thời gian chụp có sẵn trong tên tệp của mỗi hình ảnh. Nhưng tôi không tìm thấy một số tùy chọn cho drawtext để truy cập tên tệp của hình ảnh đầu vào.

Một cách khác là truy cập ngày tạo của mỗi hình ảnh từ bên trong drawtext (tôi cũng không thể tìm ra cách nào để làm điều này). Nhưng tôi chắc chắn sẽ thích truy cập vào tên tệp, vì điều này sẽ cho tôi nhiều tùy chọn hơn để định dạng văn bản.

Có cách nào để làm việc này không?
Sẽ thật tuyệt nếu bất kỳ giải pháp được đề xuất nào cũng hoạt động trên Windows.

Câu trả lời:


2

Bạn sẽ không thể làm điều đó trong một dòng, như ffmpeg Bộ lọc drawtext không tiên tiến.

Bạn sẽ cần xử lý trước các hình ảnh trước với một số kịch bản.

Một cái gì đó giống như một tập lệnh bash đơn giản:

for i in *.png; do 
    time = $(echo $i | cut -d . -f 1)
    ffmpeg -i $i -vf "drawtext=text=$time" mod-$time.png
done

Sau đó, bạn có thể sử dụng các tệp mod * .png để tạo video của mình.


2

Câu trả lời của Znuff là rất tốt (được chấp nhận & tăng cường) và mở đường cho giải pháp của riêng tôi. Vì nó là dành riêng cho Unix và tôi đã phải làm việc trên Win, đây là giải pháp của tôi cho Windows 7 trở lên:

Tôi đã sử dụng hai tệp bó (Master.cmd và Slave.cmd) để lặp qua tất cả các hình ảnh và ghi tên tệp vào chúng.

Thầy.cmd:

forfiles /p "MyImagesSubPath" /m "2014-02-15*.png" /c "cmd /c ..\Slave.cmd @file @fname

Nô lệ.cmd:

ffmpeg -i "%~1" -vf "crop=1072:1192:24:101, drawtext=text=%~2: fontcolor=white: fontsize=60: box=1: boxcolor=black@0.6: x=50:y=50: fontfile=c\\:\\\\Windows\\\\Fonts\\\\myfont.ttf" "mod_%~1"

Giải trình:

Cần sử dụng hai đợt vì nhiều lý do:
1. Tham số / c của forfiles chỉ chấp nhận một dòng lệnh có độ dài giới hạn (253 ký tự)
2. Việc lồng lệnh FFmpeg vào tham số forfiles / c sẽ yêu cầu mức độ cắt bỏ ký tự điên rồ.

Bộ lọc tên tệp "2014 -.... png" trong Master.cmd được sử dụng để ngăn vòng lặp xử lý lại đầu ra của chính nó (được đặt tên là "mod _.... png") trong một vòng lặp vô tận. Bạn phải điều chỉnh chuỗi bộ lọc đó để phù hợp với hình ảnh nguồn của bạn.

Lô Slave được thực thi từ trong thư mục con "MyImagesSubPath" bên dưới thư mục bó (đây là nơi bạn phải đặt hình ảnh nguồn của mình). Slave.cmd nhận tên tệp có và không có phần mở rộng (.png) làm hai tham số.

Tham số tên tệp không có phần mở rộng được sử dụng làm văn bản được ghi vào hình ảnh. Các hình ảnh thu được được lưu trữ với tiền tố "mod_" trong cùng đường dẫn với hình ảnh gốc. Tên tệp có thể chứa khoảng trống.

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.