ฉันพยายามแปลงชุดไฟล์. mov เป็น mp4 ฉันจะรับชื่อไฟล์จากไปป์เพื่อสร้างคำสั่ง ffmpeg ได้อย่างไร วิธีใช้ข้อโต้แย้งไปป์หลายครั้งในลิงค์โซ่? ฉันพยายามที่จะมีอะไรแบบนั้น:
ls *.MOV | ffmpeg -y -i $file "$file.mp4"
ฉันพยายามแปลงชุดไฟล์. mov เป็น mp4 ฉันจะรับชื่อไฟล์จากไปป์เพื่อสร้างคำสั่ง ffmpeg ได้อย่างไร วิธีใช้ข้อโต้แย้งไปป์หลายครั้งในลิงค์โซ่? ฉันพยายามที่จะมีอะไรแบบนั้น:
ls *.MOV | ffmpeg -y -i $file "$file.mp4"
คำตอบ:
ไพพ์มีประโยชน์เมื่อคุณต้องการใช้เอาต์พุตมาตรฐานของหนึ่งคำสั่งเป็นอินพุตมาตรฐานของคำสั่งอื่น แต่คุณต้องส่งไฟล์เป็นอินพุตไปffmpeg
ไม่ใช่ชื่อไฟล์ในอินพุตมาตรฐาน และคุณจำเป็นต้องเรียกใช้ffmpeg
หลายครั้งหนึ่งครั้งสำหรับแต่ละอินพุตไฟล์เพื่อรับไฟล์เอาต์พุต
เรื่องสั้นที่สั้นท่อไม่เป็นประโยชน์สำหรับสิ่งนี้คุณต้องวนซ้ำตามคำแนะนำอื่น ๆ แต่ควรอ้างอิงพารามิเตอร์ชื่อไฟล์สองครั้ง:
for file in *.MOV; do
ffmpeg -y -i "$file" "$file.mp4"
done
คุณพูดถึงในความคิดเห็นที่คุณสามารถเขียนสคริปต์ Perl นั่นจะเกินความเป็นจริงจริงๆ Bash เป็นวิธีที่ง่ายกว่าและเหมาะสมที่สุด โปรดทราบว่าคุณสามารถเขียนสคริปต์ด้านบนในบรรทัดเดียวและเรียกใช้โดยตรงในบรรทัดคำสั่ง
for file in *.MOV; do ffmpeg -y -i "$file" "$file.mp4"; done
คุณสามารถทำได้โดยใช้การfor
วนรอบแบบง่าย
#!/bin/bash
for file in /path/to/*.MOV
do
echo "Converting $file"
done