เพิ่มความเงียบ 1 วินาทีลงในเสียงผ่าน FFmpeg


14

ฉันมีไฟล์เสียง AC3 5.1 ซึ่งฉันต้องการแทรก x วินาทีของเสียงเงียบที่จุดเริ่มต้น สิ่งนี้ไม่เกี่ยวข้องกับการ muxing ของวิดีโอดังนั้นมันออฟเซ็ตจะไม่มีประโยชน์เนื่องจากดูเหมือนว่าจะทำงานกับกระแสข้อมูลเสียงที่มาพร้อมกับวิดีโอเท่านั้น ฉันต้องการบรรลุสิ่งนี้ด้วย ffmpeg ความคิดใด ๆ


ffmpeg จะต่อท้ายหรือเข้าร่วม codec สิ่งเดียวกันอัตราเดียวกัน?
Psycogeek

ฉันคิดว่า ... @Psycogeek
Makaveli84

และสามารถสร้างไฟล์เสียงเงียบของอัตราตัวแปลงสัญญาณและช่องสัญญาณที่แน่นอนได้หรือไม่? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? ตัวฉันเองใช้วิธี GUI แต่การทำตามที่คุณขอควรจะค่อนข้างง่ายและเร็วมากตราบใดที่พารามิเตอร์เหมือนกันทั้งหมด นี่คือที่ที่มันแสดงให้เห็นการเพิ่มลงใน Mov stackoverflow.com/questions/12368151/…ในคำตอบ
Psycogeek

ใช้ Ardor เพื่อเพิ่มสิ่งที่คุณต้องการ หากคุณต้องการเอฟเฟกต์เช่นกันให้ดาวน์โหลดปลั๊กอิน Calf ..
แดชบอร์ด

คำตอบ:


23

ใช้ concat demuxer (เพิ่มความเงียบในการเริ่มต้นและ / หรือสิ้นสุด)

ใช้ concat demuxer หากคุณต้องการหลีกเลี่ยงการเข้ารหัสเซกเมนต์หลักอีกครั้ง วิธีนี้ใช้ได้กับการเพิ่มความเงียบไปที่จุดเริ่มต้นหรือจุดสิ้นสุด (หรือทั้งสองอย่าง)

  1. ใช้ตัวกรองสัญญาณเสียงanullsrcเพื่อสร้างเสียงเงียบ คุณจะต้องจับคู่รูปแบบเค้าโครงช่องสัญญาณและอัตราตัวอย่างของไฟล์เสียงหลัก ตัวอย่างการสร้าง 5.1 แชนเนลอัตราตัวอย่าง 48000 เฮิร์ตซ์ไฟล์เสียงเงียบ AC3 1 วินาที (เช่นนี้เป็นรูปแบบของคำถาม):

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. ตอนนี้ให้ตั้งชื่อไฟล์ข้อความinput.txtที่แสดงรายการไฟล์ที่จะต่อกัน:

    file 'silent.ac3'
    file 'main.ac3'
    

    input.txtหากคุณต้องการความเงียบในตอนท้ายแทนเพียงแค่เปลี่ยนคำสั่งของไฟล์ใน

  3. ตอนนี้คุณสามารถต่อไฟล์เข้าด้วยกันโดยใช้concat demuxer :

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

การใช้ตัวกรอง concat (เพิ่มความเงียบในการเริ่มต้นและ / หรือสิ้นสุด)

ใช้ตัวกรอง concat หากคุณต้องการทำทุกอย่างในหนึ่งคำสั่งหรือถ้าคุณต้องการส่งออกไปยังรูปแบบที่แตกต่างจากอินพุต (ตั้งแต่วิธีนี้เข้ารหัสอีกครั้ง) วิธีนี้ใช้ได้กับการเพิ่มความเงียบไปที่จุดเริ่มต้นหรือจุดสิ้นสุดหรือทั้งสองอย่าง

ตัวอย่างการเพิ่มความเงียบ 1 วินาทีไปยังจุดเริ่มต้นของสเตอริโออินพุตอัตราตัวอย่าง 44100 Hz:

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • การกรองจะส่งผลให้มีการเข้ารหัสอีกครั้งในขณะที่ตัวถอดรหัส demat จะไม่ทำงาน

  • ใน anullsrc ขอแนะนำให้จับคู่เค้าโครงของช่องและอัตราตัวอย่างของอินพุต

  • หากคุณต้องการที่จะเพิ่มความเงียบไปยังจุดสิ้นสุดแทนเพียงแค่เปลี่ยนคำสั่งของปัจจัยการผลิตให้กับตัวกรอง concat [1:a][0:a]concat=n=2:v=0:a=1นี้:


การใช้ตัวกรอง adelay (เพิ่มความเงียบไปที่จุดเริ่มต้น)

ใช้ตัวกรองเสียงadelayหากคุณต้องการทำทุกอย่างในคำสั่งเดียวหรือถ้าคุณต้องการส่งออกไปยังรูปแบบที่แตกต่างจากอินพุต (ตั้งแต่วิธีนี้เข้ารหัสอีกครั้ง) ใช้งานได้เฉพาะเพื่อเพิ่มความเงียบไปที่จุดเริ่มต้นของไฟล์

ตัวอย่างนี้จะเพิ่มความเงียบ 1 วินาทีไปที่จุดเริ่มต้นของอินพุตสเตอริโอ:

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • การกรองจะส่งผลให้มีการเข้ารหัสอีกครั้งในขณะที่ตัวถอดรหัส demat จะไม่ทำงาน
  • ค่าเป็นมิลลิวินาที ผู้ใช้เวอร์ชันล่าสุด (ปัจจุบัน git master หรืออะไรที่ใหม่กว่า FFmpeg 4.1) สามารถใช้แทนได้1sหนึ่งวินาที
  • แต่ละช่องต้องการความล่าช้าของตนเอง ยกตัวอย่างเช่นการป้อนข้อมูลขาวดำจะใช้adelay=1000ในขณะที่ 5.1 adelay=1000|1000|1000|1000|1000|1000การป้อนข้อมูลจะใช้

การใช้ตัวกรอง apad (เพิ่มความเงียบไปยังจุดสิ้นสุด)

ใช้ตัวกรองเสียงของapadหากคุณต้องการทำทุกอย่างในหนึ่งคำสั่งหรือถ้าคุณต้องการส่งออกไปยังรูปแบบที่แตกต่างจากอินพุต (เนื่องจากวิธีนี้เข้ารหัสอีกครั้ง) ใช้งานได้เฉพาะเพื่อเพิ่มความเงียบในตอนท้ายของไฟล์

ตัวอย่างนี้จะเพิ่มความเงียบ 1 วินาทีไปยังจุดสิ้นสุด:

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • การกรองจะส่งผลให้มีการเข้ารหัสอีกครั้งในขณะที่ตัวถอดรหัส demat จะไม่ทำงาน

  • pad_durตัวเลือกที่ถูกเพิ่มเข้ามาหลังจากการเปิดตัวของ FFmpeg 4.1 ดังนั้นคุณจะต้องใช้การสร้างล่าสุดจากสาขาต้นแบบคอมไพล์หรือรอให้ FFmpeg 4.2


5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.ไวยากรณ์ใหม่คือ-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny

ฉันสามารถทำได้หลายไฟล์พร้อมกันหรือไม่
Aaron Franke

@AaronFranke ใช่ แต่ ffmpeg ไม่มีคุณสมบัติเช่นนั้น คุณจะต้องใช้เชลล์หรือภาษาสคริปต์เพื่อวนคำสั่ง ระบบปฏิบัติการของคุณไม่เป็นที่รู้จักดังนั้นฉันไม่สามารถให้โซลูชันแบบเบ็ดเสร็จแก่คุณได้ แต่โปรดดูคุณจะแปลงไดเรกทอรีทั้งหมดด้วย ffmpeg ได้อย่างไร สำหรับข้อมูลทั่วไป (ข้ามคำตอบที่ยอมรับเนื่องจากซับซ้อนและไม่มีประสิทธิภาพโดยไม่จำเป็น)
llogan

adelayนอกจากนี้ยังมีallตัวเลือกที่เป็นประโยชน์ในการหน่วงเวลา (pad จากจุดเริ่มต้น) ทุกช่องทางด้วยจำนวนเงินเช่นadelay=delays=1000:all=1
Jurijs Kovzels
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.