# 1ในการลบเสียงเข้า / ออกพร้อมกัน:
ffmpeg -i clip.mp4 -vf 'fade=in:0:30,fade=out:960:30'
-af 'afade=in:st=0:d=1,afade=out:st=32:d=1'
-c:v libx264 -crf 22 -preset veryfast fadeInOut.mp4
ครั้ง afade อยู่ในไม่กี่วินาที
# 2โดยอัตโนมัติ ไม่ แต่ดูวิธีแก้ปัญหาด้านล่าง
คุณสามารถรัน ffprobe ก่อนเพื่อรับช่วงเวลา
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
คุณจะได้รับสิ่งนี้:
video|13.556000
audio|13.816000
จากนั้นคุณสามารถใช้ด้านบนเพื่อวางจางหาย เวลาเหล่านี้เป็นวินาที
วิธีแก้ปัญหา
ffmpeg -i clip.mp4 -sseof -1 -copyts -i clip.mp4 -filter_complex
"[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v];
anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]"
-map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -shortest fadeInOut.mp4
FFmpeg มีsseof
ตัวเลือกที่อนุญาตให้หนึ่งค้นหาอินพุตจากจุดสิ้นสุด เราสามารถใช้สิ่งนั้นเพื่อบรรลุเป้าหมาย ดังนั้นเราจึงป้อนข้อมูลเข้าสองครั้งโดยครั้งที่ 2 จะนำเข้าเฉพาะวินาทีสุดท้าย เราบอก FFmpeg เพื่อรักษา timestamps ดังนั้น ffmpeg จะรักษาตำแหน่งชั่วคราวของส่วนหางนี้
เราใช้จางไปที่หางนี้แล้วซ้อนทับผลลัพธ์ลงบนอินพุตแบบเต็ม เนื่องจากเป็นไฟล์สื่อเดียวกันส่วนหน้าจะครอบคลุมพื้นหลังอย่างสมบูรณ์และเนื่องจากcopyts
มีการใช้การซ้อนทับจึงเกิดขึ้นกับเฟรมที่เหมือนกันในอินพุตพื้นหลัง
สำหรับเสียงเราสร้างเสียงดัมมี่เปล่า ๆ ที่มีระยะเวลา 2 วินาทีจากนั้นนำเสียงไขว้จากเสียงหลักไปใช้กับเสียงจำลองนี้ เนื่องจากเสียงที่ 2 ว่างเปล่านี่เป็นผลมาจากการหายไปของอินพุตหลัก -shortest
จะถูกเพิ่มออกจากบางส่วนของเสียงหุ่นหลังจาก Crossfade ได้เกิดขึ้น