Xin chào thế giới :) (thông điệp đầu tiên, cấp độ mới bắt đầu;))
Tôi đang cố gắng viết một tập lệnh ms ms nhỏ để thay đổi kích thước video.
Đầu tiên, với ffprobe tôi nhận được iw
, ih
, DAR, SAR từ nguồn sau đó tôi chọn chiều cao đầu ra mong muốn oH. Tôi sử dụng dòng cmd đơn giản này để cho ffmpeg tính toán độ rộng đầu ra và thực hiện công việc:
ffmpeg -i !in! -ss !t1! -to !t2! -filter:v scale=-2:!oH!,setsar=1,setdar=!dar! -c:a copy !out!
Tôi lấy ví dụ về độ rộng đầu ra trong một trường hợp đơn giản vì tính toán dễ dàng và giá trị -2 của bộ lọc tỷ lệ sẽ cho chiều rộng đầu ra là ow=trunc(oh*a/2)*2
Nhưng cuộc sống không đơn giản như thế! và đôi khi tôi thêm / chơi với các tùy chọn khác như cắt hoặc hiệu ứng khác, v.v ... Tính toán tự động với -1 hoặc -2 là hữu ích nhưng tôi sẽ cần kiểm tra xem kích thước cuối cùng được tính bởi ffmpeg có phải là điều tôi mong đợi trước khi tôi chạy toàn bộ kịch bản.
Vì vậy, câu hỏi của tôi: có cách nào để ước tính một số dữ liệu của video đầu ra trước khi chạy ffmpeg, sử dụng bất kỳ công cụ ffmpeg nào không?
Tôi không tìm thấy bất kỳ tùy chọn "chạy mô phỏng" nào (không có mã hóa) có thể cung cấp một số dữ liệu, ít nhất là những dữ liệu có thể dự đoán được.
Tôi cũng đã nghĩ đến việc sử dụng ffplay vì nó có thể có cùng các đối số và xử lý video 'đang hoạt động' và thử các giá trị -loglevel khác nhau:
ffplay -i !in! -vf "scale=-2:!oH!" -loglevel trace
nhưng tôi không thể tìm thấy kích thước đầu ra ở bất cứ đâu ... mặc dù video thực sự đang phát ...(ý tưởng cuối cùng trong khi viết: có vẻ như ffmpeg có thể trích xuất và xử lý một hình ảnh duy nhất từ video, sau đó tôi sẽ phải phân tích nó; nhưng nó sẽ là một bước bổ sung và tốn nhiều thời gian hơn cho một lần chạy)
bất cứ đề nghị nào? cảm ơn bạn!
ffmpeg -i !in! -vframes 1 -map 0:v -filter:v scale=-2:!oH!,showinfo -f null !out! >!log! 2>&1
Sau đó, tôi trích xuất siêu dữ liệu bằng cách sử dụng ffprobe: ffprobe -i !out! -v quiet -show_entries stream=width,height -select_streams v:0 -of csv=p=0
Nhưng, trong khi tôi có thể thấy SAR và DAR chính xác của vid được định cỡ lại bằng 'ffmpeg -vf showinfo', ffprobe không đưa ra các giá trị chính xác cho 'stream = sample_aspect_ratio, display_aspect_ratio': thay vào đó tôi nhận được '0: 1' của, nói, 1: 1 và 16: 9.
showinfo
làm bộ lọc video cuối cùng và đặt các tùy chọn đầu ra là-vframes 1 -map 0:v -f null -
(sau khi loại bỏ tên tệp đầu ra). Sau đó, bạn sẽ phải phân tích đầu ra showinfo để xác định chuỗi con này, ví dụ:s:640x480