จะเพิ่มโลโก้ของฉันใน 30 วินาทีแรกในวิดีโอด้วย ffmpeg ได้อย่างไร


9

ฉันพยายามเพิ่มโลโก้ของฉันในช่วง 30 วินาทีแรกในวิดีโอด้วย ffmpeg ฉันมีวิดีโอที่เรียกว่าและโลโก้ที่เรียกว่าd1.mp4logo.png

เมื่อวิดีโอเริ่มขึ้นลายน้ำควรอยู่ที่มุมบนซ้ายหรือมุมขวาบนของวิดีโอและหายไปหลังจาก 30 วินาที

คุณช่วยแสดงวิธีเพิ่มได้ไหม


ชื่อวิดีโอของฉันคือ d1.mp4 และชื่อโลโก้ของฉันคือ logo.png ขอบคุณ ..
iwocan

ถ้าอย่างนั้นจะffmpeg -i d1.mp4 -i logo.pngแสดงอะไร โปรดป้อนคำสั่งนั้นและแสดงให้เราเห็นว่าผลลัพธ์คืออะไร เมื่อถามคำถามffmpegคุณควรใส่รายละเอียดให้มากที่สุดเท่าที่จะเป็นไปได้เกี่ยวกับเนื้อหาวิดีโอ / เสียงสิ่งที่คุณได้ลองแล้วและเอาต์พุตบรรทัดคำสั่งแบบเต็มของทุกสิ่งที่คุณพยายาม
slhck

นี่คือสิ่งที่ฉันได้รับบนหน้าจอ cmd ของฉัน pastebin.com/bPCnhXh2
iwocan

คำตอบ:


13
ffmpeg -i in.mp4 -framerate 30000/1001 -loop 1 -i logo.png -filter_complex
  "[1:v] fade=out:st=30:d=1:alpha=1 [ov]; [0:v][ov] overlay=10:10 [v]" -map "[v]"
  -map 0:a -c:v libx264 -c:a copy -shortest out.mp4

สิ่งนี้ถือว่าโลโก้เป็นภาพนิ่งเดียวที่มีช่องอัลฟาและคุณต้องการซ้อนทับบนวิดีโอที่มีอัตราเฟรม 30000/1001 (อัตรา NTSC) เปลี่ยน-framerateเพื่อให้ตรงกับวิดีโออินพุตของคุณหากแตกต่าง -framerate 30000/1001 -loop 1หากโลโก้ของคุณเป็นวิดีโอแล้วงด หากโลโก้ไม่ได้มีช่องอัลฟาเพิ่มหนึ่งโดยการใส่เช่นทันทีก่อนformat=yuva420p,fade

สิ่งนี้จะแสดงโลโก้ที่ x, y อยู่ที่ตำแหน่ง 10,10 เป็นเวลา 30 วินาทีแล้วตามด้วยจางหายไป 1 วินาที


1
น่าสนใจมาก! คุณสามารถอธิบายได้ว่าทำไมframerateและloopเป็นสิ่งจำเป็นในกรณีนี้ไม่ใช่สำหรับการวางซ้อนอย่างง่ายโดยไม่มีตัวกรองจาง?
Rajib

ขอบคุณมาก mark40 แต่เมื่อฉันเขียนรหัสนี้หน้าจอ cmd ไม่หยุด .. ฉันไม่รู้ว่าทำไม แต่มันใช้งานไม่ได้สำหรับฉัน ..
iwocan

สวัสดี LordNeckbeard นี่เป็นภาพหน้าจอ .. u1312.hizliresim.com/1j/4/v5ny8.png ..
iwocan

1
@iwocan ฉันเชื่อว่าคุณสามารถคัดลอกสิ่งต่าง ๆ จากหน้าต่างแจ้ง ผมถือว่าคุณจะค้นหาวิธีที่จะทำ แต่ดูที่คัดลอกไปที่คลิปบอร์ดจากคำสั่งของ Windows พร้อมท์
llogan

4
@Rajib: สาเหตุของการ-framerateและ-loopสำหรับภาพนิ่งคือเพื่อให้การหายไปจะทำงาน หากมีเพียงเฟรมเดียวก็จะไม่มีทางหลุดออกไปในช่วงเวลา 1 วินาที โดยหลักการแล้วมันควรจะเป็นอัตราเฟรมเดียวกับวิดีโอเพื่อให้การจางหายไปจะราบรื่นที่สุด
mark4o

19

การใช้overlayตัวกรองวิดีโอเพื่อเพิ่มโลโก้ลงในวิดีโอ:

ป้อนคำอธิบายรูปภาพที่นี่

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay" \
-codec:a copy out.mp4

เพื่อให้เข้าใจคำสั่งนี้คุณต้องรู้ว่าตัวระบุกระแสคืออะไรและการอ่านข้อมูลเบื้องต้นเกี่ยวกับการกรอง FFmpegจะช่วยได้ [0:v]อ้างถึงสตรีมวิดีโอของอินพุตแรก ( video.mp4) และ[1:v]อ้างถึงสตรีมวิดีโอของอินพุตที่สอง ( logo.mp4) นี่คือวิธีที่คุณสามารถบอกได้overlayว่าจะใช้อินพุตใด คุณสามารถละเว้น[0:v][1:v]และoverlayจะยังคงใช้งานได้ แต่ขอแนะนำให้ชัดเจนและไม่ต้องพึ่งพาค่าเริ่มต้นที่ไม่รู้จัก

โดยค่าเริ่มต้นโลโก้จะถูกวางไว้ที่ด้านซ้ายบน

การใช้-codec:a copyจะเป็นการสตรีมคัดลอกเสียง สิ่งนี้เพียงแค่ทำการมิกซ์เสียงแทนการเข้ารหัสอีกครั้ง คิดว่ามันเป็น "คัดลอกและวาง" ของเสียง

ย้ายโลโก้

ตัวอย่างนี้จะย้ายโลโก้ 10 พิกเซลไปทางขวาและลดลง 10 พิกเซล: ป้อนคำอธิบายรูปภาพที่นี่

ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4

ตัวอย่างนี้จะย้ายโลโก้ 10 พิกเซลจากด้านขวาและลง 10 พิกเซล:

ป้อนคำอธิบายรูปภาพที่นี่

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=main_w-overlay_w-10:10" -codec:a copy out.mp4

main_wหมายถึงความกว้างของอินพุต "หลัก" (พื้นหลังหรือ[0:v]) และoverlay_wหมายถึงความกว้างของอินพุต "โอเวอร์เลย์" (โลโก้หรือ[1:v]) ดังนั้นในตัวอย่างนี้สามารถแปลหรือoverlay=320-90-10:10overlay=220:10

กำหนดเวลาโอเวอร์เลย์

ตัวกรองบางตัวสามารถจัดการการแก้ไขเส้นเวลาซึ่งอนุญาตให้คุณใช้นิพจน์ทางคณิตศาสตร์เพื่อกำหนดว่าควรจะใช้ตัวกรองเมื่อใด อ้างถึงffmpeg -filtersเพื่อดูว่าตัวกรองใดรองรับการแก้ไขเส้นเวลา

ตัวอย่างนี้จะแสดงโลโก้จนถึง 30 วินาที:

ffmpeg -i video.mp4 -i logo.png -filter_complex \
"[0:v][1:v]overlay=10:10:enable=between(t\,0\,30)" -codec:a copy out.mp4

หากคุณต้องการที่จะจางหายโลโก้อ้างถึงคำตอบของ mark4o


ขอบคุณมาก! :) ฉันขอโทษสำหรับภาษาอังกฤษที่แตกสลายอีกครั้งคำสั่งนี้ทำงานได้สมบูรณ์แบบ! :)
iwocan

ในที่สุดสิ่งที่เข้าใจ! สิ่งที่ฉันควรใช้เพื่อทำให้มันปรากฏที่จุดเริ่มต้นกว่าในตอนท้าย?
cikatomo

ฉันต้องการจะปรากฏที่จุดเริ่มต้นและตอนท้ายหรือไม่ สองครั้ง. ฉันได้ลองเปิดใช้งาน = ระหว่าง (t \, 0 \, 30): เปิดใช้งาน = ระหว่าง (t \, 50 \, 60), แต่ไทม์ไลน์ล่าสุดเท่านั้นที่มีผล
cikatomo

enable=not(between'(t,30,50)')@cikatomo การทำเช่นนี้จะแสดงภาพซ้อนทับตลอดเวลา แต่ไม่ใช่ในช่วงเวลา 30-60 วินาที
llogan

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