Batch thay đổi kích thước video với pan pan và quét cắt xén


8

Tôi đang cố gắng chuẩn bị một bộ sưu tập ~ 120 video clip để phát trong VLC Player và chiếu trên máy chiếu có độ phân giải thấp (1024x768) trong một sự kiện âm nhạc điện tử DIY. Các clip nguồn là tất cả các hình ảnh trừu tượng siêu hi-res ở định dạng .mov, khoảng 4GB mỗi hình. Họ có tỷ lệ khung hình khác nhau. Một số là 4: 3, số khác là 16: 9, số khác là 1: 1 (hình vuông), v.v.

Tôi muốn cắt / chia tỷ lệ tất cả các clip thành 1024x768 trong khi duy trì tỷ lệ khung hình gốc tương ứng của chúng. Và, tôi muốn làm như vậy mà không cần hộp thư và để lại các thanh màu đen ở trên cùng / dưới cùng hoặc trái / phải. Về cơ bản những gì tôi muốn làm là giảm chúng đến mức chúng hoàn toàn lấp đầy màn hình 1024x768, và không nhỏ hơn. Tôi tin rằng đó thực chất là một kỹ thuật "quét và quét"?

(Không thành vấn đề nếu một phần của hình ảnh bị xóa trong quá trình - chúng chỉ quay các hình dạng hình học và như vậy.)

Có cách nào để tôi có thể thay đổi kích thước tất cả ~ 120 video theo lô bằng một lệnh FFMPEG không? Hoặc, có một công cụ khác cho Windows hoặc Linux sẽ hoạt động không? Tôi không thực sự quan tâm định dạng đầu ra nào - chỉ là thứ mà VLC có thể chơi mà không bị giật.

Câu trả lời:


3

Nếu bạn chỉ có video 4: 3 và 16: 9, tôi sẽ đề xuất:

ffmpeg -i input.mov -filter:v 'scale=-1:768,crop=1024:ih' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Điều đó sẽ chia tỷ lệ video lên độ cao 768, chia tỷ lệ chiều rộng để giữ tỷ lệ khung hình; và sau đó, nó cắt chiều rộng thành 1024, giữ chiều cao ở mức 768. Thực tế là bạn đang sử dụng video 1: 1 cũng làm phức tạp mọi thứ: một video 3000x3000 sẽ được thu nhỏ thành 768x768, và sau đó ffmpeg sẽ cố gắng cắt nó thành 1024x768, điều này rõ ràng sẽ không hoạt động, vì cây trồng có thể không lớn hơn đầu vào ...

Cách duy nhất tôi có thể nghĩ để làm cho điều này hoạt động là cắt tất cả các video mà bạn tuyên bố sẽ không thành vấn đề. Điều này sẽ cắt chiều rộng đầu ra giống với chiều cao đầu vào và chiều cao đầu ra là 3/4 chiều cao đầu vào; và sau đó nó sẽ thu nhỏ video xuống độ cao 768, giữ tỷ lệ khung hình với chiều rộng:

ffmpeg -i input.mov -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast output.mp4

Điều này sẽ chỉ hoạt động nếu các tệp gốc có chiều cao từ 1024 trở lên. Lưu ý rằng x264 chỉ chấp nhận chiều rộng hoặc chiều cao chẵn, điều này có thể gây ra sự cố (nhưng không nên trong trường hợp này).

Để chuyển đổi mọi .mov trong một thư mục, bạn có thể sử dụng vòng lặp for:

for f in *.mov; \
do ffmpeg -i "$f" -filter:v 'crop=ih:3/4*ih,scale=-1:768' \
-c:v libx264 -crf 23 -preset veryfast "${f/%mov/mp4}"; \
done

Để làm như vậy đệ quy, bạn có thể sử dụng find:

find . -type f -name *.mov -exec bash -c \
'ffmpeg -i "$0" -filter:v "crop=ih:3/4*ih,scale=-1:768" \
-c:v libx264 -crf 23 -preset veryfast "${0/%mov/mp4}"' {} \;

Tất cả điều này sẽ yêu cầu một phiên bản gần đây của ffmpeg.

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.