คุณแปลงไดเรกทอรีทั้งหมดด้วย ffmpeg อย่างไร


190

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

คำตอบ:


174

คำตอบก่อนหน้าจะสร้างไฟล์เอาต์พุต 1 ไฟล์ชื่อ out.mov เท่านั้น หากต้องการสร้างไฟล์เอาต์พุตแยกกันสำหรับภาพยนตร์เก่าแต่ละเรื่องให้ลองทำสิ่งนี้

for i in *.avi;
  do name=`echo "$i" | cut -d'.' -f1`
  echo "$name"
  ffmpeg -i "$i" "${name}.mov"
done

24
หากคุณชอบฉันและมีช่องว่างมากมาย (และอักขระที่มีปัญหาอื่น ๆ ) ในชื่อไฟล์ของคุณฉันขอแนะนำให้เพิ่มเครื่องหมายคำพูดคู่: ffmpeg -i "$ i" "$ name.mov";
Pif

7
ฉันได้รับข้อผิดพลาดi was unexpected at this time.
Keavon

5
do name=`echo "${i%.*}"`;จะทำงานกับชื่อไฟล์ที่มีจุด (และช่องว่าง) ในนั้น
Nepoxx

8
ว้าวคำตอบนี้ซับซ้อนเกินไปอย่างไม่น่าเชื่อ ดูหนึ่งในคำตอบแบบบรรทัดเดียว
foobarbecue

2
รองรับ.batWindows นี้หรือไม่
Jazuly

294

สำหรับLinuxและmacOSสามารถทำได้ในหนึ่งบรรทัดโดยใช้การขยายพารามิเตอร์เพื่อเปลี่ยนนามสกุลไฟล์ของไฟล์เอาต์พุต:

for i in *.avi; do ffmpeg -i "$i" "${i%.*}.mp4"; done

2
นี่มันยอดเยี่ยมมากขอบคุณ! นี่คือคำสั่งแบบเต็มซึ่งจบลงด้วยการทำงานที่ยอดเยี่ยมสำหรับฉัน: สำหรับฉันใน * .avi; ทำ ffmpeg -i "$ i" -c: aac -b: 128k -c: v libx264 -crf 20 "$ {i% .avi} .mp4"; เสร็จสิ้น
Phil Kulak

1
@Junaid 1) ตรวจสอบให้แน่ใจว่าได้ใช้ชื่ออื่นสำหรับไฟล์เอาต์พุตมากกว่าอินพุตหรือเอาต์พุตไปยังไดเร็กทอรีอื่นเนื่องจากffmpegไม่สามารถอินพุตและเอาต์พุตไปยังไฟล์เดียวกัน 2) ฉันไม่แน่ใจว่าคำสั่ง Bash ทำงานบน Windows 10 หรือไม่ บางทีฉันควรเพิ่มคำตอบที่มีการกำหนดเป้าหมายไปยังระบบที่สามารถใช้ Bash เช่น Linux และ macOS lxs ให้คำตอบกับ Windows สำหรับคำถามนี้
llogan

4
คำตอบที่ยอดเยี่ยม ทำงานกับชื่อไฟล์พร้อมช่องว่างด้วย!
wisbucky

1
นี่ควรเป็นคำตอบที่ดีที่สุด คำอธิบายสำหรับเหตุผลที่ว่า {$ i%. *} นั้นไม่ง่าย แต่ถ้าคุณสามารถแยกมันออกมาและเพียงแค่ "ใช้มัน" คุณสามารถปรับเปลี่ยนให้เหมาะสมได้อย่างรวดเร็ว ตัวอย่างเช่นฉันแปลง .mp4 หลายร้อยรายการ (ด้วยชื่อไฟล์ที่มีช่องว่างและอักขระพิเศษ) เป็นรูปแบบที่เล็กลงโดยใช้: สำหรับ i ใน.mp4; ทำ ffmpeg -i "$ i" -s 512x288 -c: สำเนา "$ {i%. } .m4v"; เสร็จแล้ว
Tony M

1
หากต้องการเพิ่มอีกหนึ่งขั้นคุณสามารถใช้การแทนที่พารามิเตอร์ Bashหากคุณต้องการแทนที่สตริง "x265" ด้วย "x264" หากคุณแปลงรหัสจาก H.265 เป็น H.264 ซึ่งเป็นกรณีการใช้งานทั่วไป for f in *.mkv; do ffmpeg -i "$f" -map 0 -movflags faststart -c:v libx264 -c:a copy -c:s copy "${f/x265/x264}"; done
Travis Runyard

70

และบน Windows:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"

19
หากคุณเรียกใช้คำสั่งนี้ในไฟล์แบตช์ (.bat) คุณต้องเพิ่มเครื่องหมาย% = => %%
hB0

มีความคิดวิธีเรียกใช้คำสั่งนี้ แต่คัดลอกไปยังไฟล์ใหม่ที่มีข้อมูลเมตาของไฟล์ต้นฉบับหรือไม่
Barryman9000

@ Barryman9000 นี่เป็นเวลานานแล้ว แต่ฉันคิดว่ามีตัวเลือกไฟล์เอาต์พุตที่คุณสามารถผ่านได้
lxs

@lxs ขอบคุณสำหรับการติดตาม ฉันลงเอยด้วย Powershell ด้วยการเปลี่ยนชื่อไฟล์ใหม่เป็นวันที่สร้างไฟล์ดั้งเดิมstackoverflow.com/a/35671099/197472
Barryman9000

ใช้เพื่อลบข้อมูลเมตา แต่มันให้ Access ฉันปฏิเสธข้อผิดพลาด ดังนั้นฉันจึงเปลี่ยนชื่อไฟล์ที่ส่งออกด้วยพื้นที่พิเศษเพื่อให้เป็นไฟล์ใหม่ FOR /F "tokens=*" %G IN ('dir /b *.mp3') DO ffmpeg -i "%G" -map_metadata -1 -c:v copy -c:a copy "%~nG .mp3"
Junaid

28

สคริปต์ทุบตีแบบบรรทัดเดียวทำได้ง่าย - แทนที่*.aviด้วยประเภทไฟล์ของคุณ:

for i in *.avi; do ffmpeg -i "$i" -qscale 0 "$(basename "$i" .avi)".mov  ; done

เข้ารหัสเริ่มต้นสำหรับ .mov เป็น libx264 (ถ้ามี) -qscaleแต่เข้ารหัสละเว้นนี้ ลบออกและใช้การตั้งค่าเริ่มต้นหรือใช้-crfแทน (ค่าเริ่มต้นคือ-crf 23)
llogan

1
หากมีช่องว่างใด ๆ ในชื่อไฟล์คำสั่งจะล้มเหลวเนื่องจากbasenameไม่มีการอ้างถึง subshell ย่อย นี่คือเหตุผลที่ bash มีการขยายเชลล์แทน: สำหรับ i ใน * .avi; ทำ ffmpeg -i "$ i" -qscale 0 "$ (ชื่อฐาน" $ i ".avi)" mov; เสร็จแล้ว
Calimo

ขอบคุณ @Calimo ทั้งหมดเห็น - ผมได้ปรับปรุงคำตอบของฉัน
ไข่แดง

22

หากต้องการแปลงด้วยไดเรกทอรีย่อยให้ใช้เช่น

find . -exec ffmpeg -i {} {}.mp3 \;

ฉันใช้สิ่งนี้บวกกับคำตอบนี้เพื่อแปลง VTT เป็น SRT เพื่อให้ได้ผลลัพธ์ที่ยอดเยี่ยม find -name "*.vtt" -exec ffmpeg -i {} {}.srt \;
grooveplex

ฉันคำสั่งนี้มี modif เล็กน้อยเพื่อแปลง mp4 เป็น mp3 ทั้งหมด:find *.mp4 -exec ffmpeg -i {} {}.mp3 \;
swdev

1
หรือถ้าคุณต้องการแปลงไฟล์หลายประเภท:find . -name *.ogg -or -name *.wma -exec ffmpeg -i {} {}.mp3 \;
bonh

แปลงไฟล์ wma ทั้งหมดเป็น MP3 และหลังจากลบไฟล์:find . -name *.wma -exec ffmpeg -i {} {}.mp3 \; -exec rm {} \;
Panagiotis

20

สำหรับ Windows:

ที่นี่ฉันกำลังแปลงไฟล์ (.mp4) เป็นไฟล์ (.mp3) ทั้งหมด
เพียงแค่เปิด cmd ไปที่โฟลเดอร์ที่ต้องการแล้วพิมพ์คำสั่ง

ทางลัด: (ตัวเลือกเสริม)
1. ไปที่โฟลเดอร์ที่มีไฟล์ (.mp4)
2. กด Shift และคลิกซ้ายแล้วเลือก "เปิดหน้าต่าง PowerShell ที่นี่"
หรือ "เปิดหน้าต่างพร้อมรับคำสั่งที่นี่"
3. พิมพ์ "cmd" [NOTE : ข้ามขั้นตอนนี้หากเปิดโดยตรง cmd แทน PowerShell]
4. เรียกใช้คำสั่ง

for %i in (*.mp4) do ffmpeg -i "%i" "%~ni.mp3"

หากคุณต้องการใส่สิ่งนี้ลงในไฟล์แบตช์บน Windows 10 คุณต้องใช้ %% i


18

สำหรับผู้ที่ต้องการแปลงชุดด้วย ffmpeg แต่ต้องการมีส่วนต่อประสาน Windows ที่สะดวกฉันก็พัฒนาส่วนหน้านี้:

https://sourceforge.net/projects/ffmpeg-batch

มันเพิ่ม ffmpeg อินเทอร์เฟซแบบหน้าต่าง, แถบความคืบหน้าและข้อมูลเวลาที่เหลืออยู่, คุณสมบัติที่ฉันพลาดเสมอเมื่อใช้ ffmpeg


ตกลงนี่เป็นโครงการที่ดี! ฉันไล่ตามหางมาเป็นเวลาหนึ่งชั่วโมงเพื่อให้ได้ ffmpeg เพื่อยอมรับเส้นทาง outfile สัมพัทธ์ใน Windows และสิ่งนี้ทำให้รู้สึกเหมือนโกง แก้ไข: ฉันใช้สิ่งนี้เพื่อแปลง. xwm เป็น. flac
semtex41

6

หากคุณมี GNU แบบขนานคุณสามารถแปลงไฟล์. avi ทั้งหมดด้านล่างvid_dirเป็น mp4 แบบขนานโดยใช้ทั้งหมดยกเว้นหนึ่งในคอร์ CPU ของคุณด้วย

find vid_dir -type f -name '*.avi' -not -empty -print0 |
    parallel -0 -j -1 ffmpeg -loglevel fatal -i {} {.}.mp4

ในการแปลงจาก / เป็นรูปแบบที่แตกต่างกันให้เปลี่ยน'*.avi'หรือ.mp4จำเป็น GNU parallelขนานแสดงอยู่ในที่เก็บของลินุกซ์มากที่สุดในแพคเกจซึ่งมักจะเรียกว่า


คุณไม่สามารถทำแบบเดียวกันได้ด้วยการเพิ่ม!ในส่วนท้ายของ bash one-liners?
stib

3

ฉันรู้ว่านี่อาจซ้ำซ้อน แต่ฉันใช้สคริปต์นี้เพื่อแปลงไฟล์เป็นชุด

old_extension=$1
new_extension=$2

for i in *."$old_extension";
  do ffmpeg -i "$i" "${i%.*}.$new_extension";
done

ใช้เวลา 2 ข้อโต้แย้งเพื่อให้มีความยืดหยุ่นมากขึ้น:

  1. นามสกุลที่คุณต้องการแปลง
  2. นามสกุลใหม่ที่คุณต้องการแปลง

ฉันสร้างนามแฝงสำหรับมัน แต่คุณสามารถใช้มันด้วยตนเองเช่นนี้:

sh batch_convert.sh mkv mp4

นี่จะแปลงmkvไฟล์ทั้งหมดเป็นmp4ไฟล์

อย่างที่คุณเห็นมันอเนกประสงค์มากกว่าเล็กน้อย ตราบใดที่ffmpegสามารถแปลงได้คุณสามารถระบุสองส่วนขยายได้


นั่นเป็นสิ่งที่ดีที่สุด👍
Andreas ปรางค์

3

รับบิตเช่นโค้ดกอล์ฟที่นี่ แต่เนื่องจากเกือบคำตอบทั้งหมดจะถูกทุบตี (ยกเว้นหนึ่ง cmd โดดเดี่ยวหนึ่ง) นี่เป็นคำสั่งข้ามแพลตฟอร์มwindows ที่ใช้ powershell (เพราะน่ากลัว):

ls *.avi|%{ ffmpeg -i $_ <ffmpeg options here> $_.name.replace($_.extension, ".mp4")}

คุณสามารถเปลี่ยน * .avi เป็นอะไรก็ได้ที่ตรงกับวิดีโอต้นฉบับของคุณ


3

แน่นอนว่าตอนนี้มี PowerShell มาพร้อมการออกแบบมาโดยเฉพาะเพื่อให้บางสิ่งบางอย่างที่ว่าเช่นนี้มากง่าย

และใช่ PowerShell ยังมีอยู่ในระบบปฏิบัติการอื่นที่ไม่ใช่แค่ Windows แต่มาพร้อมกับการติดตั้งล่วงหน้าบน Windows ดังนั้นสิ่งนี้จะเป็นประโยชน์กับทุกคน

ขั้นแรกคุณจะต้องการแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันดังนั้นเราจะเริ่มด้วย:

ls

คุณสามารถใช้ls -Recurseหากคุณต้องการแปลงไฟล์ทั้งหมดซ้ำในไดเรกทอรีย่อยด้วยซ้ำ

จากนั้นเราจะกรองเฉพาะไฟล์ประเภทที่เราต้องการแปลงเช่น "avi"

ls | Where { $_.Extension -eq ".avi" }

หลังจากนั้นเราจะส่งผ่านข้อมูลที่ FFmpeg ForEachผ่าน

สำหรับอินพุตของ FFmpeg เราจะใช้FullName- นั่นคือเส้นทางทั้งหมดไปยังไฟล์ และสำหรับการส่งออก FFmpeg ของเราจะใช้Name- แต่แทนที่ในตอนท้ายด้วย.avi .mp3ดังนั้นจะมีลักษณะดังนี้:

$_.Name.Replace(".avi", ".mp3")

ดังนั้นมารวมทั้งหมดเข้าด้วยกันและนี่คือผลลัพธ์:

ls | Where { $_.Extension -eq ".avi" } | ForEach { ffmpeg -i $_.FullName $_.Name.Replace(".avi", ".mp3") }

ที่จะแปลงไฟล์ ".avi" ทั้งหมดเป็นไฟล์ ".mp3" ผ่าน FFmpeg เพียงแค่แทนที่สามสิ่งในเครื่องหมายคำพูดเพื่อเลือกประเภทของการแปลงที่คุณต้องการและForEachอย่าลังเลที่จะเพิ่มอาร์กิวเมนต์อื่น ๆ ลงใน FFmpeg

คุณสามารถทำขั้นตอนนี้ต่อไปและเพิ่มRemove-Itemไปยังจุดสิ้นสุดเพื่อลบไฟล์เก่าโดยอัตโนมัติ

หากffmpegไม่ได้อยู่ในเส้นทางของคุณและจริง ๆ แล้วอยู่ในไดเรกทอรีที่คุณอยู่ให้เขียน./ffmpegตรงffmpegนั้น

หวังว่านี่จะช่วยทุกคน


1
PowerShell เยี่ยมมากขอบคุณ! ในกรณีที่บุคคลอื่นประสบปัญหาในการใช้งานนี้ให้ใส่คำสั่งนี้ใน.ps1ไฟล์ไม่ใช่.batไฟล์ คุณจะต้องเรียกใช้Set-ExecutionPolicy RemoteSignedในฐานะผู้ดูแลระบบหากคุณไม่เคยเรียกใช้สคริปต์ PS มาก่อน
starpause

โดยทั่วไปฉันแค่คิดเกี่ยวกับการเรียกใช้มันโดยตรงใน PowerShell ดังนั้นฉันจึงไม่คิดอย่างนั้น คำแนะนำที่ดี!
ABPerson

2
for i in *.flac;
  do name=`echo "${i%.*}"`;
  echo $name;
  ffmpeg -i "${i}" -ab 320k -map_metadata 0 -id3v2_version 3 "${name}".mp3;
done

แบตช์flacไฟล์ประมวลผลเป็นmp3(ปลอดภัยสำหรับชื่อไฟล์ที่มีช่องว่าง) โดยใช้[1] [2]


2

หน้าต่าง:

@echo off
for /r %%d in (*.wav) do (
    ffmpeg -i "%%~nd%%~xd" -codec:a libmp3lame -c:v copy -qscale:a 2 "%

%~nd.2.mp3"
)

นี่คือตัวแปรบิตเรตของคุณภาพ 2 คุณสามารถตั้งค่าเป็น 0 ถ้าคุณต้องการ แต่ถ้าคุณไม่มีระบบลำโพงที่ดีจริงๆมันไร้ค่า


1

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

โปรดทราบว่าคุณไม่สามารถลากโฟลเดอร์ไปยัง Quick Batcher ได้ ดังนั้นเลือกไฟล์แล้ววางผ่าน Quick Batcher


2
ซอฟต์แวร์ "Quick Batcher" สำหรับ Mac OS เท่านั้น
Mohammad ElNesr

1

เฉพาะอันนี้ใช้ได้สำหรับฉันเท่านั้นโปรดสังเกตว่าคุณต้องสร้างโฟลเดอร์ "newfiles" ด้วยตนเองที่ไฟล์ ffmpeg.exe ตั้งอยู่

แปลง ไฟล์เป็น. wav รหัสเสียง:

for %%a in ("*.*") do ffmpeg.exe -i "%%a" "newfiles\%%~na.wav"
pause

เช่นถ้าคุณต้องการแปลงไฟล์ .mp3 ทุกการเปลี่ยนแปลง .wav ไป("*.*")("*.mp3")

ผู้เขียนสคริปต์นี้คือ:

https://forum.videohelp.com/threads/356314-How-to-batch-convert-multiplex-any-files-with-ffmpeg

หวังว่ามันจะช่วย🙏


0

จะเป็นการสร้างวิดีโอ mp4 จากไฟล์ jpg ทั้งหมดจากไดเรกทอรีปัจจุบัน

echo exec("ffmpeg -framerate 1/5 -i photo%d.jpg -r 25 -pix_fmt yuv420p output.mp4");

0

และสำหรับ Windows สิ่งนี้ใช้ไม่ได้

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec mp3 "%~nG.mp3"

%แม้ว่าผมจะทำสองเท่าของผู้ที่

ฉันอยากจะแนะนำ:

-acodec ***libmp3lame***

เพิ่มเติม:

FOR /F "tokens=*" %G IN ('dir /b *.flac') DO ffmpeg -i "%G" -acodec libmp3lame "%~nG.mp3"

นี่เป็นคำตอบหรือพยายามโพสต์คำถามใหม่เป็นคำตอบหรือไม่ ในกรณีหลังโปรดสร้างคำถามใหม่อย่างสมบูรณ์แทน แต่อาจเชื่อมโยงกลับมาที่นี่เพื่อรับพื้นหลัง
tripleee

0

นี่คือสิ่งที่ฉันใช้ในการแปลงชุด avi เป็น 1280x mp4

FOR /F "tokens=*" %%G IN ('dir /b *.avi') DO "D:\Downloads\ffmpeg.exe" -hide_banner -i "%%G" -threads 8 -acodec mp3 -b:a 128k -ac 2 -strict -2 -c:v libx264 -crf 23 -filter:v "scale=1280:-2,unsharp=5:5:1.0:5:5:0.0" -sws_flags lanczos -b:v 1024k -profile:v main -preset medium -tune film -async 1 -vsync 1 "%%~nG.mp4"

ทำงานได้ดีเช่นเดียวกับไฟล์ cmd เรียกใช้ลูปจะค้นหาไฟล์ avi ทั้งหมดในโฟลเดอร์นั้น

เรียก MY (เปลี่ยนเพื่อคุณ) ffmpeg, ผ่านชื่ออินพุต, การตั้งค่าสำหรับการปรับขนาดด้วยการลับภาพ ฉันไม่จำเป็นต้องใช้ CRF และ " -b:v 1024k" ...

ไฟล์เอาต์พุตเป็นไฟล์อินพุตลบส่วนขยายโดย mp4 เป็นส่วนขยายใหม่


0

ฉันใช้หนึ่งซับใน linux เพื่อแปลงไฟล์ (ปกติคือ H265) เป็นสิ่งที่ฉันสามารถเล่นบน Kodi ได้โดยไม่มีปัญหา:

for f in *.mkv; do ffmpeg -i "$f" -c:v libx264 -crf 28 -c:a aac -b:a 128k output.mkv; mv -f output.mkv "$f"; done

สิ่งนี้จะแปลงเป็นไฟล์ชั่วคราวจากนั้นแทนที่ต้นฉบับเพื่อให้ชื่อยังคงเหมือนเดิมหลังจากการแปลง


0

นอกจากนี้หากคุณต้องการแปลงเดียวกันในโฟลเดอร์ย่อย นี่คือรหัสซ้ำ

for /R "folder_path" %%f in (*.mov,*.mxf,*.mkv,*.webm) do (
    ffmpeg.exe -i "%%~f" "%%~f.mp4"
    )

-1

สคริปต์ PHP เล็กน้อยที่จะทำ:

#!/usr/bin/env php
<?php
declare(strict_types = 1);
if ($argc !== 2) {
    fprintf ( STDERR, "usage: %s dir\n", $argv [0] );
    die ( 1 );
}
$dir = rtrim ( $argv [1], DIRECTORY_SEPARATOR );
if (! is_readable ( $dir )) {
    fprintf ( STDERR, "supplied path is not readable! (try running as an administrator?)" );
    die(1);
}
if (! is_dir ( $dir )) {
    fprintf ( STDERR, "supplied path is not a directory!" );
    die(1);
}
$files = glob ( $dir . DIRECTORY_SEPARATOR . '*.avi' );
foreach ( $files as $file ) {
    system ( "ffmpeg -i " . escapeshellarg ( $file ) . ' ' . escapeshellarg ( $file . '.mp4' ) );
}

2
คำตอบที่มีขอบเขต จำกัด มากเมื่อผู้ใช้ต้องติดตั้ง PHP ไว้ในเครื่อง บรรทัดคำสั่งและคำตอบไฟล์แบตช์นั้นง่ายกว่าและซับซ้อนน้อยกว่ามาก
ProfK

2
@ProfK PHP เป็นหนึ่งในภาษาที่ได้รับความนิยมมากที่สุดใน SO - second คำตอบของ Isaac สำหรับ sh นั้นค่อนข้างไม่น่าเชื่อถือเนื่องจากอาจเปลี่ยนชื่อไฟล์ของคุณเป็นอย่างอื่นที่ไม่ใช่ต้นฉบับตัวอย่างเช่นจะไม่รักษาบรรทัดใหม่ในชื่อไฟล์ สคริปต์ค้างคาวของlyxยิ่งแย่กว่านั้นมันจะละเว้นไฟล์ใด ๆ ที่มีบรรทัดใหม่ในชื่อ ไม่แน่ใจว่าทำไมไม่ใช่แม้แต่ข้อผิดพลาดทางไวยากรณ์หรืออะไร แต่ทำ (ทดสอบบน win10) สคริปต์ PHP ของฉันไม่มีปัญหาขอบคุณescapeshellarg()และใช้งานได้ทั้งบน windows และ linux ฉันเห็นด้วยมันเป็นกรณีที่ขอบ
hanshenrik

-1

อีกวิธีง่ายๆที่ยังไม่ได้รับการแนะนำจะใช้xargs:

ls *.avi | xargs -i -n1 ffmpeg -i {} "{}.mp4"

หนึ่งหลุมพรางเล็ก ๆ น้อย ๆ คือการตั้งชื่อที่น่าอึดอัดใจของไฟล์ที่ส่งออก (เช่น input.avi.mp4 ) วิธีแก้ปัญหาที่เป็นไปได้สำหรับสิ่งนี้อาจเป็น:

ls *.avi | xargs -i -n1 bash -c "i={}; ffmpeg -i {} "\${i%.*}.mp4""


shellcheck.netมีคำแนะนำเล็กน้อยเกี่ยวกับตัวอย่างของคุณ
llogan

mywiki.wooledge.org/ParsingLsถึงแม้ว่าคุณสามารถแทนที่lsด้วยprintf '%s\n'ที่นี่
tripleee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.