Batch แปลง MP4 ด้วย ffmpeg

Sep 25 2020

ฉันมีไฟล์ข้อความ jpg และ mp4 มากมายในโฟลเดอร์ ฉันต้องการให้ไฟล์ jpg และไฟล์ข้อความอยู่ตามลำพัง ฉันต้องการบีบอัด mp4 ทั้งหมดโดยใช้-crfอาร์กิวเมนต์ของ ffmpeg ด้วยค่า23เพื่อประหยัดเนื้อที่ดิสก์ ไฟล์ควรถูกเขียนทับ

ฉันใช้ @llogan คำตอบที่นี่และแทนที่.aviด้วย.mp4แต่ไม่ได้ผล

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

forลูปคืออะไรในการแปลง mp4 ให้มีคุณภาพต่ำกว่า ( -crf 23) โดยไม่ต้องลบและ / หรือแก้ไขไฟล์อื่น ๆ ในไดเร็กทอรีการทำงานเดียวกัน ฉันไม่ต้องการแฟล็กอื่น ๆ เช่นกันเพราะฉันจะไม่ทำการปรับขนาดอัพโหลด youtube เปลี่ยนความเร็วในการเข้ารหัส ฯลฯ

คำตอบ

2 llogan Sep 25 2020 at 00:58

คุณเพียงต้องการที่จะเปลี่ยนแปลง"encoded/${f%.avi}.mp4"ไป"encoded/${f%.mp4}.mp4"หรือ"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

ฉันลบสิ่งอื่น ๆ ที่คุณไม่ต้องการออกไปหมดแล้ว ฉันคิดว่าเสียงอินพุตของคุณเป็น AAC อยู่แล้วดังนั้นฉันจึงใช้-c:a copyเพื่อเปิดใช้งานโหมดคัดลอกสตรีมซึ่งเหมือนกับการคัดลอกและวาง

-crf 23 -preset mediumเป็นค่าเริ่มต้นเพื่อให้คุณสามารถลบออกได้หากคุณพอใจกับค่าเหล่านั้น มิฉะนั้นโปรดดูFFmpeg Wiki: H.264สำหรับคำแนะนำเกี่ยวกับสิ่งที่-crfและ-presetค่าที่จะใช้