Konversi Batch MP4 dengan ffmpeg

Sep 25 2020

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

2 llogan Sep 25 2020 at 00:58

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.