จำเป็นต้องเขียนสคริปต์ทุบตีที่จะคว้าทุกไฟล์วิดีโอในโฟลเดอร์และใช้การดำเนินการ ffmpeg กับพวกเขา


1

เป็นหลักแอปพลิเคชันชุดคำสั่งต่อไปนี้:

ffmpeg -i "01.mkv" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "test.mkv"

ความหวังของฉันคือการเรียกใช้สิ่งนี้ในไดเรกทอรีและมีไฟล์ที่แก้ไขใหม่ทั้งหมดที่มีชื่อไฟล์เก่าและไฟล์เก่าที่ต่อท้ายด้วย "old_" หรือบางอย่างที่คล้ายกัน ฉันรู้ว่าไม่มีอะไรเกี่ยวกับ bash แต่มีประสบการณ์บางอย่างกับ c ++ และ java ดังนั้นคำศัพท์ไม่ใช่ปัญหาฉันเพิ่งไม่เคยดู bash มาก่อน ขอบคุณ!

แก้ไข: เพื่อความชัดเจนฉันต้องการไฟล์ใหม่เป็น "01.mkv" และไฟล์เก่าที่จะเปลี่ยนชื่อเป็น "old_01.mkv" งานวิจัยของฉันบอกฉันว่าสิ่งนี้อาจต้องใช้เพ่งพิศ แต่ฉันรู้น้อยลงกว่าที่ฉันทุบตี

แก้ไข 2: ฉันรู้ว่าฉันควรจะให้สิ่งที่ฉันสามารถรวบรวมมาด้วยตัวเองจนถึงขณะนี้

#!/bin/bash
    for i in $( ls ); do
        ffmpeg -i $i -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy $i
    done

ดังนั้นคุณต้องการให้เรารหัสนี้สำหรับคุณ?
JakeGould

ฉันขอแนะนำให้คุณเริ่มเรียนรู้เกี่ยวกับ bash โดยการตรวจสอบ for คำแถลง
AFH

ฉันแก้ไขข้างต้น สิ่งที่ฉันได้ในทางทฤษฎีฉันเดาสิ่งที่ฉันไม่เข้าใจคือวิธีการเปลี่ยนชื่อไฟล์? มันง่ายเหมือนพูดง่าย ๆ หรือเปล่า $i = old_$i? หรือฉันจะใช้บรรทัดคำสั่งเหมือนใน terminal ปกติหรือไม่? ชอบ for (blah blah) cp $i old_$i. ฉันเคยเห็นผู้คนพูดถึงเพ่งพิศในคำถามที่เกี่ยวข้อง แต่ดูเหมือนจะซับซ้อนเกินไปสำหรับสิ่งที่ฉันทำ ดูเหมือนว่าฉันจะไม่สามารถทำงานได้ด้วยซ้ำเว้นแต่ฉันอาจทำผิดไป
Jason Murray

คำตอบ:


4

ตกลงหลังจากยุ่งกับสิ่งนี้ประมาณสองสามชั่วโมงหลังจากได้รับผลการค้นหาโชคดีของ Google ที่ฉันไม่เคยเห็นมาก่อนในที่สุดฉันก็พบสิ่งนี้ นี่คือคำตอบในกรณีที่คนอื่นเข้ามาและต้องการทำสิ่งนี้

#!/bin/bash
for file in *.mkv;
    do
        oldFile=old_"$file"
        mv "$file" "$oldFile"
        ffmpeg -i "$oldFile" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "$file"
    done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.