Score:11

จะลบไฟล์ MP3 4 วินาทีสุดท้ายได้อย่างไร

ธง cn

ฉันมีไฟล์ MP3 ชุดหนึ่งที่ต้องการลบ 4 วินาทีล่าสุด ฉันรู้ว่าถ้าฉันรู้ระยะเวลาของแต่ละไฟล์ ฉันสามารถทำได้:

ffmpeg -t ${1} -i inputfilename -acodec copy -vcodec copy outputfilename

ที่ไหน $1 คือระยะเวลาของไฟล์ลบด้วย 4 วินาที

ฉันต้องการบางสิ่งบางอย่างที่จะตัด 4 วินาทีสุดท้ายออกโดยไม่คำนึงถึงความยาวของไฟล์ A "หยุด 4 วินาทีก่อน EOF"

หมายเหตุ: ฉันพยายามหา command line นี้ไม่เจอ หากมีเวอร์ชันที่ง่ายกว่านี้ ฉันชอบที่จะเห็นมัน

andrew.46 avatar
in flag
หากสิ่งเหล่านี้เป็น mp3 เสียงธรรมดา FFmpeg อาจเกินความจำเป็นสำหรับความต้องการของคุณ? Sox จะทำงานได้ดี: `sox input.mp3 output.mp3 trim 0 -4` ฉันสามารถเขียนสิ่งนี้ได้หากคุณสนใจที่จะใช้ Sox ในวิธีนี้...
LarryM avatar
cn flag
ดูดี แต่ ... ฉันทำ "sudo apt install sox" และเมื่อฉันรันคำสั่งฉันได้รับ "sox FAIL formats: no handler for file extension 'mp3'" ?
LarryM avatar
cn flag
ตกลง ทำ: sudo apt-get install libsox-fmt-mp3 และตอนนี้การตัดแต่งส่วนท้ายทำงานได้ดี - ขอบคุณ! แต่ฉันต้องการตัดแต่ง 2 วินาทีจากจุดเริ่มต้น odf ไฟล์อื่นบางไฟล์ ฉันลอง: sox input.mp3 output.mp3 trim =2 (และรูปแบบอื่นๆ) แต่ดูเหมือนจะไม่เป็นเช่นนั้น ข้อเสนอแนะ?
Score:7
ธง in

Sometimes when dealing with audio files, rather than audio plus video, a more nuanced application than FFmpeg is SoX. Install a fully featured SoX on Ubuntu as follows:

sudo apt-get install sox libsox-fmt-all

And to trim 4 seconds from the end of your mp3 file the following very simple command is required:

sox input.mp3 output.mp3 trim 0 -4

In this example '0' is the starting position at the beginning of the file while '-4' establishes the end position of the required segment: 4 seconds from the end.

Multiple variations on this, with multiple positions and saved segments, are possible. For example, as you have mentioned in the comments, if you only wanted to remove 2 seconds at the beginning of your file the command line would be:

sox input.mp3 output.mp3 trim 2

In this example no end position is required. The SoX man pages contain many more examples of the trim command if you want more complex usage...

LarryM avatar
cn flag
สมบูรณ์แบบ ขอบคุณ!
andrew.46 avatar
in flag
@LarryM ข่าวดีที่มันได้ผลสำหรับคุณ :) คุณสามารถ 'ยอมรับ' คำตอบโดยคลิกที่เครื่องหมายถูกหรือเครื่องหมายถูกใกล้กับคำตอบ และด้วยวิธีนี้ ผู้อ่านคำถามนี้ในอนาคตจะรู้ว่านี่คือคำตอบที่ดีที่สุด และมีวันที่ดี!
Score:5
ธง jp

ดัดแปลงมาจาก ตัดวิดีโอด้วย ffmpeg:

ffmpeg -i input.mp3 -ss 4 -i input.mp3 -c copy -map 0:a -map 1:a -shortest -f อ่อนนุช - | ffmpeg -y -f nut -i - -c copy -map 0:0 output.mp3

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

  1. อินพุตที่สองมีเวลา 4 วินาทีจากจุดเริ่มต้น
  2. เดอะ - สั้นที่สุด ตัวเลือกใช้ระยะเวลาอินพุตที่สั้นที่สุดเพื่อกำหนดระยะเวลาของเอาต์พุต ซึ่งส่งผลให้ตัด 4 วินาทีสุดท้ายออกจากอินพุตแรกเพื่อให้ตรงกับระยะเวลาของอินพุตที่สองที่ตัดทอน
  3. เพราะทั้งสองกระแสมีความจำเป็นสำหรับ - สั้นที่สุด ในการทำงาน พวกเขาจะถูกส่งต่อไปยัง ffmpeg อื่นเพื่อลบอินพุตที่สอง
in flag
ควรเป็น `-map 0 -map -0:1` หรือ `-map 0:0`
LarryM avatar
cn flag
สิ่งนี้จะตัดสี่วินาทีแรกออกจากไฟล์ ไม่ใช่สี่วินาทีสุดท้าย
llogan avatar
jp flag
@LarryM มีการพิมพ์ผิดตามที่ Gyan ชี้ให้เห็น และคราวนี้ฉันทดสอบผลลัพธ์จริง
Score:2
ธง am

คุณสามารถใช้ได้ เอฟโพรบ ที่ควรมาพร้อมกับ เอฟเอ็มเพก เพื่อรับระยะเวลา

dur=$(($(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename | xargs printf %.0f)-4))
ffmpeg -t ${dur} -i inputfilename -c คัดลอก outputfilename

บรรทัดแรกใช้ เอฟโพรบ เพื่อให้ได้ระยะเวลาลบ 4 วินาทีจากนั้นใส่ไว้ใน var ที่เรียก ระยะเวลา.

ฉันยังใช้ xargs เพื่อปัดเศษตัวเลขเพราะ ทุบตี ยอมรับเฉพาะจำนวนเต็มเมื่อดำเนินการทางคณิตศาสตร์

คุณสามารถใช้ได้ พ.ศ หากคุณต้องการความแม่นยำมากขึ้น

dur=$(ffprobe -loglevel error -show_entries format=duration -of default=nk=1:nw=1 inputfilename)
dur=$(bc <<< ${dur}-4)
ffmpeg -t ${dur} -i inputfilename -c คัดลอก outputfilename
qwr avatar
kr flag
qwr
วิธีการแก้ปัญหามากเกินไป
llogan avatar
jp flag
ไม่จำเป็นต้องใช้ `sed` เนื่องจากสามารถดึงระยะเวลาได้โดยตรงด้วย `ffprobe` เพียงอย่างเดียว ดู [ฉันจะเพิ่มเอฟเฟ็กต์เฟดเอาต์ 1 วินาทีที่ส่วนท้ายของวิดีโอด้วย ffmpeg ได้อย่างไร](https://askubuntu.com/a/1128909/) สำหรับแนวทางที่คล้ายกัน `-acodec copy -vcodec copy` สามารถย่อเป็น `-c copy` ได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา