Ghép kênh video và âm thanh với FFMPEG từ các thư mục con bằng Windows Batch Script


1

Tôi đang cố gắng tìm ra một tập lệnh bó (dựa trên windows) cho phép tôi ghép một số tệp .m2v và .wav tồn tại trong một tải các thư mục con (trong một thư mục chính duy nhất). Chúng cũng cần được sắp xếp lại và chuyển mã, các tệp đầu ra cần phải là MXF và kết thúc trong một thư mục khác. Tôi chưa quen với các tập lệnh bó, không quá mới đối với các lệnh FFMPEG. Cho đến nay tôi không thể tìm thấy bất kỳ tập lệnh bó nào cho phép sử dụng nhiều tệp, chỉ những tập lệnh hoạt động để chuyển đổi một tập tin.

Sau nhiều lần tìm kiếm, thứ gần nhất tôi thấy là cái này, thứ mà tôi đã thử nhưng không thành công. Điều kỳ lạ là, một lần nó đã tạo ra một tệp .mxf, mặc dù là 0KB, nhưng mỗi lần tôi không nhận được gì.

for %%a in (".m2v") do ffmpeg -i "%%~na.wav" -i "%%~na.m2v" -acodec copy -vcodec copy "newfiles\%%~na.mxf". 

Tôi không chắc những gì có nghĩa là đi trong ngoặc đơn nơi tôi có (".m2v").

nó đại diện cho cái gì


Xin lưu ý rằng Siêu người dùng không phải là một dịch vụ viết kịch bản. Nếu bạn cho chúng tôi biết những gì bạn đã cố gắng cho đến nay (bao gồm bất kỳ tập lệnh nào bạn đang sử dụng) và nơi bạn bị mắc kẹt thì chúng tôi có thể cố gắng giúp đỡ với các vấn đề cụ thể. Bạn cũng nên đọc Làm thế nào để tôi hỏi một câu hỏi hay? .
DavidPostill

Sau nhiều lần tìm kiếm, thứ gần nhất tôi thấy là cái này, thứ mà tôi đã thử nhưng không thành công. Điều kỳ lạ là, một lần nó đã tạo ra một tệp .mxf, mặc dù là 0KB, nhưng mỗi lần tôi không nhận được gì. cho %% a trong (" .m2v ") thực hiện ffmpeg -i"% có nghĩa là đi trong ngoặc đơn nơi tôi có (" .m2v "). Điều đó thể hiện điều gì?
DMtd

Câu trả lời:


1

Tôi không chắc những gì có nghĩa là đi trong ngoặc đơn nơi tôi có (".m2v").

nó đại diện cho cái gì

for %%a in (".m2v") do ffmpeg -i "%%~na.wav" -i "%%~na.m2v" -acodec copy -vcodec copy "newfiles\%%~na.mxf"

Giá trị (".m2v") đại diện cho một tập hợp các tập tin để xử lý.

Trong lệnh của bạn không có tệp nào để xử lý vì:

  • .m2v chỉ là một phần mở rộng và chúng ta có thể cho rằng nó phải giống như filename.m2v
  • Bạn thực sự cần một biểu thức ký tự đại diện ở đây (xem bên dưới để biết cách làm điều này).
  • Các tập tin của bạn nằm trong thư mục con.

Sử dụng tệp bó sau (trong thư mục chính duy nhất):

@echo off
setlocal
for /f "usebackq" %%a in (`dir /b /s *.m2v`) do (
  echo ffmpeg -i "%%~dpna.wav" -i "%%~dpna.m2v" -acodec copy -vcodec copy "newfiles\%%~na.mxf
  )
endlocal

Ghi chú:

  • Gỡ bỏ echo từ ffmpeg lệnh khi bạn hài lòng với những gì tập tin bó sẽ làm.

  • dir /b /s *.m2v được sử dụng để tạo danh sách các tệp cần xử lý.

    Các /b tùy chọn chỉ cung cấp tên tệp (chúng tôi không muốn các tiêu đề, tóm tắt hoặc các chi tiết khác)

    Các /s tùy chọn cho phép dir để xử lý các thư mục con.

  • for /f được sử dụng để xử lý danh sách các tập tin.

  • %%~dpna được sử dụng để có được tên tệp đủ điều kiện mà không cần phần mở rộng.


Đọc thêm

  • Chỉ mục A-Z của dòng lệnh Windows CMD - Một tài liệu tham khảo tuyệt vời cho tất cả những thứ liên quan đến dòng cmd Windows.
  • thư mục - Hiển thị danh sách các tập tin và thư mục con.
  • cho / f - Lệnh loop chống lại kết quả của lệnh khác.
  • thông số - Đối số dòng lệnh (hoặc tham số) là bất kỳ giá trị nào được truyền vào tập lệnh bó.
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.