สุ่มเลือก 10 วินาทีจากไฟล์ mp3


1

ฉันมีไดเรกทอรีtracksที่มี 3 ไฟล์track1.mp3, ,track2.mp3 track3.mp3ฉันต้องการที่จะเลือกอันสุ่มของ 10 sample.mp3วินาทีจากแต่ละไฟล์และรวมชิ้นเหล่านี้เป็นไฟล์ใหม่ที่เรียกว่า ฉันจะทำสิ่งนี้โดยใช้ ffmpeg ได้อย่างไร

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

ffmpeg -i track1.mp3 -f segment -segment_time 10 -c copy out%03d.mp3

มีคนช่วยด้วย ฉันใช้ Mac OSX เซียร์ราสูงและเปลือกทุบตี

คำตอบ:


3

คุณสามารถใช้สคริปต์ทุบตีต่อไปนี้:

numFiles=3
maxStart=10
idx=1
for randomStart in $(jot -r $numFiles 0 $maxStart); do
    ffmpeg -y -ss "$randomStart" -i "track${idx}.mp3" -t 10 -c:a copy "track${idx}-chunk.mp3"
    idx=$((idx + 1))
done

ที่นี่คุณจะต้องระบุจำนวนไฟล์ ( track1ผ่านtrack3) และตำแหน่งเริ่มต้นสูงสุด (เช่นหากไฟล์ของคุณมีความยาวเพียง 20 วินาทีคุณควรเริ่มจาก 00:00:10)

jotยูทิลิตี้ที่ใช้ในการสร้างตัวเลขสุ่มระหว่าง 0 และ$maxStart(เช่น 10 ในตัวอย่างข้างต้น) บน Linux jotไม่สามารถใช้งานได้ shuf -n $numFiles -i 0-$maxStartแทนที่จะใช้

จากนั้นเชื่อมชิ้นส่วน (ดูรายการFFmpeg Wiki ):

ffmpeg -f concat -safe 0 -i <(for f in ./*-chunk.mp3; do echo "file '$PWD/$f'"; done) -c copy output.mp3

มันใช้ไวยากรณ์เปลือกพิเศษเพื่อสร้างไฟล์การต่อข้อมูลชั่วคราว สิ่งนี้จะเป็นการคัดลอกบิตสตรีมดังนั้นจึงไม่มีการเข้ารหัสซ้ำ


ขอบคุณสำหรับคำตอบที่ดี คุณได้รับประโยชน์มากฉันไม่เคยรู้เลยว่าความยาวของไฟล์ของฉันมาก่อน
Tony Vincent

ในกรณีนี้คุณจะต้องหาวิธีที่แตกต่าง: วนซ้ำไฟล์เรียกใช้รอบแรกด้วย ffmpeg หรือ ffprobe เพื่อให้ได้ความยาวเป็นวินาทีและใช้เพื่อสร้างหมายเลขสุ่มใหม่สำหรับตำแหน่งเริ่มต้นสูงสุด แต่นั่นคือสิ่งที่ฉันจะหยุดใช้ Bash และใช้ Python หรือ Ruby แทน
slhck
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.