Konversi Batch MP4 dengan ffmpeg
Saya memiliki banyak file teks, jpg dan mp4 dalam satu folder. Saya ingin file jpg dan teks dibiarkan sendiri. Saya ingin mengompres semua mp4 menggunakan -crfargumen ffmpeg dengan nilai 23, untuk menghemat ruang disk. File harus ditimpa pada tempatnya.
Saya menggunakan jawaban @llogan di sini , dan diganti .avidengan .mp4tetapi itu tidak berhasil.
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium \ -c:a aac -b:a 128k -movflags +faststart -vf scale=-2:720,format=yuv420p \ "encoded/${f%.avi}.mp4"; done
Apa forloop untuk mengubah mp4 ke kualitas yang lebih rendah ( -crf 23), di tempat, tanpa menghapus dan / atau memodifikasi file lain di direktori kerja yang sama? Saya juga tidak benar-benar menginginkan flag lain, karena saya tidak akan melakukan pengubahan ukuran, pengunggahan youtube, pengubahan kecepatan encoding, dll.
Jawaban
Anda hanya perlu mengubah "encoded/${f%.avi}.mp4"ke "encoded/${f%.mp4}.mp4"atau "encoded/${f%.*}.mp4":
mkdir encoded
for f in *.mp4; do ffmpeg -i "$f" -c:v libx264 -crf 23 -preset medium -c:a copy -movflags +faststart "encoded/${f%.*}.mp4"; done
Saya telah menghapus semua hal lain yang tidak Anda butuhkan. Saya berasumsi audio input Anda sudah AAC jadi saya dulu -c:a copymengaktifkan mode salin aliran yang seperti salin dan tempel.
-crf 23 -preset mediumadalah default sehingga Anda dapat menghapusnya jika Anda setuju dengan nilai-nilai itu. Jika tidak, lihat FFmpeg Wiki: H.264 untuk panduan tentang apa -crfdan -presetnilai yang akan digunakan.