Câu hỏi Làm cách nào để chuyển đổi toàn bộ thư mục bằng ffmpeg?


Làm thế nào để bạn chuyển đổi toàn bộ thư mục / thư mục với ffmpeg thông qua dòng lệnh hoặc với một tập lệnh batch?


75
2018-04-26 00:19


gốc




Các câu trả lời:


Câu trả lời trước sẽ chỉ tạo 1 tệp đầu ra có tên là out.mov. Để tạo một tệp đầu ra riêng cho mỗi phim cũ, hãy thử điều này.

for i in *.avi;
  do name=`echo $i | cut -d'.' -f1`;
  echo $name;
  ffmpeg -i "$i" "${name}.mov";
done

93
2017-11-20 08:35



Nếu bạn giống tôi và có rất nhiều khoảng trống (và một vài ký tự có vấn đề khác) trong tên tệp của bạn, tôi khuyên bạn nên thêm dấu ngoặc kép: ffmpeg -i "$ i" "$ name.mov"; - Pif
Tôi đang gặp lỗi i was unexpected at this time. - Keavon
do name=`echo "${i%.*}"`; sẽ làm việc trên tên tệp có dấu chấm (và dấu cách) trong chúng. - Nepoxx
Wow, câu trả lời này cực kỳ phức tạp. Xem một trong các câu trả lời một dòng. - foobarbecue
là sự hỗ trợ này cho .bat trong cửa sổ? - Jazuly


Dành cho Linux và hệ điều hành Mac điều này có thể được thực hiện trong một dòng, và bạn không cần echo, cut, hoặc là basename như được thể hiện trong các câu trả lời khác của Bash, bởi vì mở rộng tham số sẽ xử lý phần mở rộng tên tệp đầu ra:

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done

Dành cho các cửa sổ xem câu trả lời này bởi lxs.


91
2017-11-17 20:15



Không hoạt động, chỉ cần thay đổi tên tệp thành $ {i% .avi} .mov - user2924019
@ user2924019 Bạn đang sử dụng trình bao nào? - LordNeckbeard
Điều này là hoàn hảo, cảm ơn bạn! Đây là lệnh đầy đủ mà kết thúc làm việc tuyệt vời cho tôi: cho i in * .avi; làm ffmpeg -i "$ i" -c: a aac -b: a 128k -c: v libx264 -crf 20 "$ {i% .avi} .mp4"; làm xong - Phil Kulak
Tôi đang nhận i was unexpected at this time. lỗi trong cmd, windows 10. Tôi sử dụng dòng sau: for i in *.mp3; do ffmpeg -i "$i" -map_metadata -1 -c:v copy -c:a copy "${i%.mp3}.mp3"; done - Junaid
@Junaid 1) Đảm bảo sử dụng tên khác cho tệp đầu ra so với đầu vào hoặc đầu ra cho một thư mục khác, bởi vì ffmpeg không thể nhập và xuất ra cùng một tệp. 2) Tôi không chắc liệu các lệnh Bash có hoạt động trên Windows 10 một cách tự nhiên hay không. Có lẽ tôi nên thêm vào câu trả lời rằng nó nhắm vào các hệ thống có thể sử dụng Bash như Linux và macOS. lxs cung cấp câu trả lời cho câu hỏi này của Windows. - LordNeckbeard


Và trên Windows:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"

43
2018-06-17 21:34



nếu bạn chạy lệnh này trong một tập tin batch (.bat) bạn cần phải tăng gấp đôi dấu% => %% - hB0
Bất kỳ ý tưởng làm thế nào để chạy lệnh này nhưng sao chép vào một tập tin mới bao gồm siêu dữ liệu của tập tin gốc? - Barryman9000
@ Barryman9000 đây là một thời gian dài trước đây nhưng tôi nghĩ rằng có một tùy chọn tập tin đầu ra bạn có thể vượt qua - lxs
@ lxs cảm ơn vì đã theo dõi. Tôi đã kết thúc với Powershell bằng cách thay đổi tên của tập tin mới thành ngày của tập tin gốc stackoverflow.com/a/35671099/197472 - Barryman9000
Đã sử dụng nó để xóa siêu dữ liệu. Nhưng nó cho tôi truy cập bị từ chối lỗi. Vì vậy, tôi thay đổi tên tập tin đầu ra với một không gian thêm để làm cho nó tập tin mới. FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3" - Junaid


Tập lệnh bash một dòng sẽ dễ thực hiện - thay thế *.avi với loại tệp của bạn:

for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov  ; done

15
2017-07-02 22:29



Không nên có dấu ngoặc kép xung quanh "* .avi", điều đó làm cho bash nghĩ rằng đó là chuỗi không phải là danh sách tệp - JZL003
Whops. Cảm ơn @ JZL003! - yolk
Bộ mã hóa mặc định cho .mov là libx264 (nếu có), nhưng bộ mã hóa này bỏ qua -qscale. Xóa và sử dụng cài đặt mặc định hoặc sử dụng -crf thay vào đó (mặc định là -crf 23). - LordNeckbeard
Câu trả lời này tốt hơn câu trả lời được đánh dấu. - Hal
Nếu có bất kỳ dấu cách nào trong tên tệp, lệnh sẽ thất bại vì ngược lại basename subshell không được trích dẫn. Đây chính là lý do tại sao bash có mở rộng shell thay vì: i in * .avi; làm ffmpeg -i "$ i" -qscale 0 "$ (tên cơ sở" $ i ".avi)". mov; làm xong - Calimo


Để chuyển đổi với các thư mục con, hãy sử dụng ví dụ:

find . -exec ffmpeg -i {} {}.mp3 \;

10
2017-12-12 16:59



Tôi đã sử dụng điều này, kết hợp với câu trả lời này để chuyển đổi VTT sang SRT, để có hiệu quả tuyệt vời. find -name "*.vtt" -exec ffmpeg -i {} {}.srt \; - grooveplex
Tôi lệnh này, với modif nhẹ để chuyển đổi tất cả mp4 sang mp3: find *.mp4 -exec ffmpeg -i {} {}.mp3 \; - swdev


Nếu bạn muốn giao diện đồ họa cho quá trình xử lý hàng loạt với ffmpegX, hãy thử Batcher nhanh. Nó hoàn toàn miễn phí và sẽ thực hiện các cài đặt ffmpegX cuối cùng của bạn để chuyển đổi các tệp bạn thả vào đó.

Lưu ý rằng bạn không thể kéo-thả thư mục vào Quick Batcher. Vì vậy, chọn tệp và sau đó đặt chúng qua Bộ điều khiển nhanh.


3
2018-04-05 08:58



Phần mềm "Bộ điều khiển nhanh" chỉ dành cho MAC OS - Mohammad ElNesr


Đối với bất cứ ai muốn chuyển đổi hàng loạt bất cứ điều gì với ffmpeg nhưng muốn có một giao diện Windows thuận tiện, tôi đã phát triển front-end này:

https://sourceforge.net/projects/ffmpeg-batch

Nó thêm vào ffmpeg một giao diện thời trang cửa sổ, thanh tiến trình và thời gian còn lại thông tin, tính năng tôi luôn luôn bỏ qua khi sử dụng ffmpeg.


3
2018-04-25 09:34