Chuyển đổi hàng loạt tệp * .avi bằng ffmpeg


13

Tôi đang cố gắng chuyển đổi hơn 20 tệp .avi trong một đợt bằng ffmpeg.

Tôi đã có những điều sau đây

@echo off.

for file in *.avi
do
   ffmpeg -i "$file" -s 640x480 -vcodec msmpeg4v2 "'basename "$file" .avi'.mpg';
done

trong tập tin .bat của tôi nhưng nó không hoạt động. Làm thế nào tôi có thể làm cho nó hoạt động trong hệ điều hành Windows. Ồ, và vâng tất cả các tập tin trong cùng một thư mục.

Thông báo lỗi tôi nhận được:

Tập tin bất ngờ vào lúc này


Và chính xác những gì không làm việc về nó?
slhck

Nếu bạn có thể chỉ cho tôi cách nhận thông báo lỗi vì cmd biến mất rất nhanh, tôi sẽ có thể cho bạn biết tôi đang gặp vấn đề gì.
Darius

Bạn có thể chỉ cần mở một cửa sổ lệnh trước ( Bắt đầu »Chạy Tập»cmd ) và sau đó chạy tệp bó bằng đường dẫn đầy đủ của nó từ đó. Bạn thực sự muốn làm gì với các video? Những loại video này là gì? Bạn chỉ cần di chuyển chúng đến một container MPG? Hay bạn cần thay đổi kích thước chúng? Hay bạn đặc biệt cần msmpeg4v2codec?
slhck

Các tập tin được lấy ra khỏi một DVR và có clip hơn 1GB 5 phút. Có, phần mềm DVR rất thảm hại khi nén. Bộ giải mã hoạt động vì phải mất các tệp 1GB cho các tệp khoảng 7 MB, dễ quản lý hơn. Và khi cố gắng chạy đợt đó, tôi nhận được thông báo "Tệp không mong đợi tại thời điểm này".
Darius

Tôi hiểu rồi. Nếu bạn không quan tâm đến bộ giải mã và bộ chứa video kết quả, tôi khuyên bạn nên sử dụng x264 làm bộ mã hóa thay thế, điều này dẫn đến chất lượng tốt hơn nhiều so với MPEG-4. Lệnh sẽ giống như ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4khi giá trị CRF đặt chất lượng (ít hơn là tốt hơn, nhiều hơn là tệ hơn, các giá trị lành mạnh từ 19 đến 24). Xem thêm: Chuyển đổi video cũ để có kích thước nhỏ hơntôi nên xem thông số nào để giảm kích thước của tệp .MOV?
slhck

Câu trả lời:


26

Tệp bó của bạn không ở định dạng chính xác cho tập lệnh bat của Windows. Thay vào đó, tập lệnh của bạn trông giống như được dành cho Linux. Bạn sẽ cần thay đổi tập lệnh để sử dụng vòng lặp for được Windows Shell hỗ trợ.

Dưới đây là một ví dụ về cách thực hiện nhiệm vụ này bằng cách sử dụng một cửa sổ cho vòng lặp. Chỉ cần đặt dòng dưới đây trong tệp bó của bạn và di chuyển tập lệnh vào cùng thư mục với các tệp avi, sau đó chạy nó.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"

Với cái này tôi nhận được[NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
Darius

1
Cần xóa dấu chấm phẩy đó ở cuối dòng
Brett
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.