File konversi * .avi menggunakan ffmpeg

13

Saya mencoba mengkonversi 20+ file .avi dalam batch menggunakan ffmpeg.

Saya punya yang berikut ini

@echo off.

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

di file .bat saya tetapi tidak berfungsi. Bagaimana saya bisa membuatnya bekerja di bawah OS Windows. Oh, dan ya semua file ada di folder yang sama.

Pesan kesalahan yang saya dapatkan:

File tidak terduga saat ini

Darius
sumber
Dan apa sebenarnya yang tidak berhasil?
slhck
Jika Anda bisa menunjukkan kepada saya cara mendapatkan pesan kesalahan karena cmd menghilang dengan sangat cepat, saya akan dapat memberi tahu Anda apa yang saya alami masalah.
Darius
Anda seharusnya bisa membuka jendela perintah sebelumnya ( Mulai »Jalankan ...»cmd ) dan kemudian jalankan file batch menggunakan path lengkapnya dari sana. Apa yang sebenarnya ingin Anda lakukan dengan video? Video macam apa ini? Apakah Anda hanya perlu memindahkannya ke wadah MPG? Atau apakah Anda perlu mengubah ukurannya? Atau apakah Anda secara khusus membutuhkan msmpeg4v2codec?
slhck
File diambil dari DVR dan klip lebih dari 1GB 5 menit. Ya, perangkat lunak DVR menyedihkan pada kompresi. Codec berfungsi karena dibutuhkan file 1GB hingga sekitar 7MB file yang lebih mudah dikelola. Dan ketika mencoba menjalankan batch itu saya mendapat pesan "File tak terduga saat ini".
Darius
Saya melihat. Jika Anda tidak peduli dengan codec dan wadah video yang dihasilkan, saya sarankan untuk menggunakan x264 sebagai encoder, yang menghasilkan kualitas yang jauh lebih baik daripada MPEG-4. Perintah akan menjadi sesuatu seperti di ffmpeg -i input.avi -c:v libx264 -crf 23 -s 640x480 output.mp4mana nilai CRF menentukan kualitas (lebih sedikit lebih baik, lebih banyak lebih buruk, nilai waras dari 19 hingga 24). Lihat juga: Konversi video lama menjadi ukuran yang lebih kecil dan Parameter apa yang harus saya perhatikan untuk mengurangi ukuran file .MOV?
slhck

Jawaban:

26

File batch Anda tidak dalam format yang benar untuk skrip Windows bat. Sebaliknya skrip Anda sepertinya ditujukan untuk Linux. Anda harus mengubah skrip untuk menggunakan loop for yang didukung oleh Windows Shell.

Di bawah ini adalah contoh bagaimana menyelesaikan tugas ini dengan menggunakan windows for loop. Cukup letakkan baris di bawah ini di file batch Anda dan pindahkan skrip ke direktori yang sama dengan file avi, kemudian jalankan.

for %%A IN (*.avi) DO ffmpeg -i "%%A" "%%A.mpg"
Brett
sumber
Dengan ini saya dapatkan[NULL @ 000000000037e360] Unable to find a suitable output format for 'outputfile.avi.mpg;' outputfile.avi.mpg:: Invalid argument
Darius
1
Perlu menghapus titik koma dari akhir baris
Brett