เพิ่มภาพซ้อนทับด้านหน้าวิดีโอโดยใช้ ffmpeg


31

ฉันมีวิดีโอจำนวนมากและฉันต้องวางภาพไว้ข้างหน้าพวกเขาประมาณ 5 วินาที แต่การเพิ่มด้วยตนเองและการเรนเดอร์ในแต่ละครั้งจะใช้เวลานานมากดังนั้นฉันจึงถามว่าเป็นไปได้ไหมที่จะทำเช่นนั้นผ่าน ffmpeg และถ้าคุณ ได้โปรดช่วยฉันด้วยเพราะฉันไม่มีประสบการณ์กับ ffmpeg ฉันพบคำสั่งบางคำแล้วแต่ไม่มีคำสั่งใดทำงาน ตัวอย่างนี้

ffmpeg -itsoffset 5 -i in.mp4 -r 25 -loop 1 -i intro.png -filter_complex "[1:v] fade=out:125:25:alpha=1 [intro]; [0:v][intro] overlay [v]" -map "[v]" -map 0:a -acodec copy out.mp4

1
คุณเพียงแค่คัดลอกคำสั่งนั้นหรือเขียนตามความต้องการของคุณหรือไม่? ฉันถามเพราะคำสั่งนี้เกี่ยวข้องกับสิ่งต่าง ๆ เช่นจางหายไปและสิ่งอื่น ๆ ทุกชนิดที่ไม่ครอบคลุมในคำถามของคุณ คุณแค่ต้องการวางซ้อนภาพหรือคุณต้องการมากกว่านั้น?
PTS

ฉันคัดลอกมาจากที่อื่นสิ่งที่ฉันต้องมีก็เพียงแค่วางภาพไว้หน้าวิดีโอ
Azthy

คำตอบ:


44

คุณสามารถทำการซ้อนรูปภาพอย่างง่ายโดยใช้ไวยากรณ์ต่อไปนี้:

ffmpeg -i input.mp4 -i image.png \
-filter_complex "[0:v][1:v] overlay=25:25:enable='between(t,0,20)'" \
-pix_fmt yuv420p -c:a copy \
output.mp4

overlay=25:25 หมายความว่าเราต้องการวางภาพ 25px ไปทางขวาและ 25px ลงมาจากมุมบนซ้าย (0: 0)

enable='between(t,0,20)' หมายความว่าเราต้องการให้รูปภาพแสดงระหว่าง 0 ถึง 20 ที่สอง

[0:v][1:v]หมายความว่าเราต้องการไฟล์วิดีโอแรกที่เรานำเข้าด้วย-iในกรณีของเรา input.mp4 หรือวิธีที่ ffmpeg เห็นว่าไฟล์อินพุตวิดีโอหมายเลข 0 อยู่ในไฟล์อินพุตวิดีโอ 1 ในกรณี image.png ของเรา :vหมายถึงว่าเราต้องการวิดีโอ 0 และวิดีโอ 1. [0:a]จะหมายถึงเราต้องการแทร็กเสียงที่นำเข้าครั้งแรก ซึ่งจะมาจาก input.mp4 แต่จะชี้ไปที่แทร็กเสียงแทนแทร็กวิดีโอในไฟล์ mp4

หากคุณต้องการคุณภาพ / การตั้งค่าภาพบางอย่างและไม่ใช่การตั้งค่าที่ ffmpeg เลือกให้เพิ่มตัวเลือกการเข้ารหัสภาพและเสียงที่คุณต้องการใช้ ตัวเข้ารหัสวิดีโอเริ่มต้นจะเป็น x264 ตรวจสอบคู่มือการเข้ารหัส H.264สำหรับการตั้งค่าที่เป็นไปได้

-acodec copy/ -c:a copyที่คุณมีในคำสั่งของคุณ fe ก็จะกลับมาใช้เสียงจากแฟ้มแหล่งที่มา แม้ว่าคุณจะไม่สามารถทำได้ด้วยวิดีโอของหลักสูตร (ในกรณีนี้) แต่จะต้องมีการแปลงรหัสเพราะเรากำลังสร้างแหล่งวิดีโอใหม่

หากคุณต้องการแปลงรหัสเสียงให้ถอดชิ้น-c:a copyส่วนออก -c:a aac -strict experimentalคุณอาจจะต้องระบุอย่างชัดเจนเข้ารหัสเช่น ดูคู่มือการเข้ารหัส AACสำหรับข้อมูลเพิ่มเติม


การวนซ้ำของคำสั่งด้านบนต่อไปนี้ใช้งานได้กับฉันบน Android ตั้งแต่ตัวแรกให้และข้อผิดพลาดอย่าง aac เป็นคุณสมบัติทดลอง: ffmpeg -i input.mp4 เข้มงวด -2 -i image.png -filter_complex [0: v] [1: v] overlay = 25: 25: เปิดใช้งาน = 'ระหว่าง (t, 0,20)' output.mp4
muneikh

จะมีการจัดตำแหน่งที่ด้านล่างโดยไม่ทราบความสูงหรือไม่ หรือขวาสุดโดยไม่ทราบความกว้าง?
chovy

แน่นอนว่าวิเคราะห์วิดีโอด้วย ffprobe และแยกขนาดของวิดีโอออกจากผลลัพธ์ อาจจะมีตัวเลือกรวมอยู่ใน ffmpeg แต่ฉันไม่ทราบ
PTS

3
คำสั่งของคุณจะแทนที่ส่วนไฟล์วิดีโอต้นฉบับ แต่ผู้ใช้อาจต้องการเพิ่ม (ซึ่งเป็นการเพิ่มความยาววิดีโอ) ภาพก่อนและ / หรือหลังวิดีโอ กรุณาช่วยด้วย
porton

1
@laurent ที่ขึ้นอยู่กับไฟล์ต้นฉบับและหรือเอาต์พุตของคุณ pix_fmt ย่อมาจากรูปแบบพิกเซล มีหลายรูปแบบพิกเซลที่แตกต่างกันสำหรับตัวแปลงสัญญาณที่แตกต่างกันระบุหนึ่งให้แน่ใจว่าคุณไม่ได้จบลงด้วยสิ่งที่ไม่ได้ผลสำหรับคุณ yuv420p เป็นรูปแบบพิกเซลที่รองรับมากที่สุดเมื่อพูดถึง h264 แต่ก็มีรูปแบบ yuv422p และ yuv444p เช่นกัน
PTS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.