จุ่ม / จางเป็นสีดำ
เลื่อนลงเพื่อดูวิธีการ crossfade
ตัวอย่างที่ภาพแต่ละภาพแสดงเป็นเวลา 5 วินาทีและแต่ละภาพมีสีซีดจางนาน 1 วินาที อินพุตของภาพแต่ละรายการมีความกว้างความสูงและอัตราส่วนตัวอย่างที่เท่ากัน หากขนาดแตกต่างกันโปรดดูตัวอย่าง # 3 ด้านล่าง
เอาต์พุต MP4
ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
[1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4
พร้อมเสียง
เหมือนด้านบน แต่มีเสียง:
ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-i audio.m4a \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
[1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" -map 5:a -shortest out.mp4
สำหรับภาพอินพุตที่มีขนาดแตกต่างกันหรือขนาดใดก็ได้
เช่นเดียวกับตัวอย่างแรก แต่ด้วยภาพอินพุตที่เปลี่ยนแปลงในความกว้าง x ความสูง พวกเขาจะได้รับเบาะให้พอดีกับภายในกล่อง 1280x720:
ffmpeg \
-loop 1 -t 5 -i input0.png \
-loop 1 -t 5 -i input1.png \
-loop 1 -t 5 -i input2.png \
-loop 1 -t 5 -i input3.png \
-loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=out:st=4:d=1[v0]; \
[1:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1,fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,format=yuv420p[v]" -map "[v]" out.mp4
ดูตัวอย่างในการปรับขนาดวิดีโอให้พอดีกับเครื่องเล่นขนาดคงที่หากคุณต้องการครอบตัด (เติมหน้าจอ) แทนที่จะเป็นแผ่น (กล่องจดหมาย / เสาหลัก) หรือหากคุณต้องการป้องกันการลดอัตราการสุ่ม
เอาท์พุท GIF
เพิ่มตัวกรองจากฉันจะแปลงวิดีโอเป็น GIF โดยใช้ ffmpeg ด้วยคุณภาพที่เหมาะสมได้อย่างไร
ffmpeg \
-framerate 10 -loop 1 -t 5 -i input0.png \
-framerate 10 -loop 1 -t 5 -i input1.png \
-framerate 10 -loop 1 -t 5 -i input2.png \
-framerate 10 -loop 1 -t 5 -i input3.png \
-framerate 10 -loop 1 -t 5 -i input4.png \
-filter_complex \
"[0:v]fade=t=out:st=4:d=1[v0]; \
[1:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v1]; \
[2:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v2]; \
[3:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v3]; \
[4:v]fade=t=in:st=0:d=1,fade=t=out:st=4:d=1[v4]; \
[v0][v1][v2][v3][v4]concat=n=5:v=1:a=0,split[v0][v1]; \
[v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" out.gif
ใช้-loop
ตัวเลือกเอาต์พุตเพื่อควบคุมจำนวนครั้งที่ลูป GIF ค่าเริ่มต้นคือการวนซ้ำไม่สิ้นสุดหากไม่ได้ใช้ตัวเลือกนี้ ค่าของ-1
คือไม่วนซ้ำ
ตัวเลือกและตัวกรองที่ใช้:
-t
เพื่อตั้งระยะเวลาเป็นวินาทีของอินพุตแต่ละรายการ
-loop 1
ลูปภาพมิฉะนั้นจะมีระยะเวลา 1 เฟรม
-framerate
เพื่อตั้งค่าอัตราเฟรมภาพอินพุต (ค่าเริ่มต้นเมื่อไม่ได้ประกาศคือ 25) มีประโยชน์สำหรับการสร้าง GIF
สเกลที่มีแผ่นอิเล็กโทรดเพื่อให้พอดีกับภาพที่นำเข้ามาในขนาดที่เฉพาะและสม่ำเสมอ (ใช้ในตัวอย่างที่ 3)
จางหายไปเข้าและออก d
คือระยะเวลาของการจาง st
คือเมื่อมันเริ่ม
concat to concatenate (หรือ "เข้าร่วม") แต่ละภาพ
ฟอร์แมตเพื่อเอาท์พุทชุดรูปแบบการสุ่มของ Chroma ที่เข้ากันได้กับผู้เล่นที่ไม่ใช่ FFmpeg หากส่งออก MP4 และเข้ารหัสด้วย libx264 (ตัวเข้ารหัสเริ่มต้นสำหรับเอาต์พุต MP4 หากสนับสนุนโดยบิลด์ของคุณ)
แยกเพื่อทำสำเนาของเอาต์พุตตัวกรอง ต้องการโดยตัวกรอง palette * เพื่อทำทุกอย่างในคำสั่งเดียว
palettegenและpaletteuseสำหรับการทำ GIF ที่ดูดี
Crossfade
ตัวอย่างที่ภาพแต่ละภาพแสดงเป็นเวลา 5 วินาทีและแต่ละภาพมีรูปกากบาทที่มีความยาว 1 วินาที อินพุตของภาพแต่ละรายการมีความกว้างความสูงและอัตราส่วนตัวอย่างที่เท่ากัน หากขนาดแตกต่างกันให้ปรับตัวอย่าง # 3 ด้านบน
เอาต์พุต MP4
ffmpeg \
-loop 1 -t 5 -i 1.png \
-loop 1 -t 5 -i 2.png \
-loop 1 -t 5 -i 3.png \
-loop 1 -t 5 -i 4.png \
-loop 1 -t 5 -i 5.png \
-filter_complex \
"[1]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
[2]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
[3]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
[4]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
[0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3]; \
[bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -movflags +faststart out.mp4
พร้อมเสียง
ffmpeg \
-loop 1 -t 5 -i 1.png \
-loop 1 -t 5 -i 2.png \
-loop 1 -t 5 -i 3.png \
-loop 1 -t 5 -i 4.png \
-loop 1 -t 5 -i 5.png \
-i music.mp3 \
-filter_complex \
"[1]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
[2]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
[3]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
[4]format=yuva444p,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
[0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3]; \
[bg3][f3]overlay,format=yuv420p[v]" -map "[v]" -map 5:a -shortest -movflags +faststart out.mp4
ข้ามระหว่างสองวิดีโอพร้อมเสียง
เลือกเซ็กเมนต์ 5 วินาทีจากแต่ละอินพุตและเพิ่ม crossfade 1 วินาที:
ffmpeg -i input0.mp4 -i input1.mp4 -filter_complex \
"[0:v]trim=start=5:end=10,setpts=PTS-STARTPTS[v0];
[1:v]trim=start=12:end=17,setpts=PTS-STARTPTS+4/TB,format=yuva444p,fade=st=4:d=1:t=in:alpha=1[v1];
[v0][v1]overlay,format=yuv420p[v];
[0:a]atrim=start=5:end=10,asetpts=PTS-STARTPTS[a0];
[1:a]atrim=start=12:end=17,asetpts=PTS-STARTPTS[a1];
[a0][a1]acrossfade=d=1[a]" \
-map "[v]" -map "[a]" output.mp4
เอาท์พุท GIF
ffmpeg \
-framerate 10 -loop 1 -t 5 -i 1.png \
-framerate 10 -loop 1 -t 5 -i 2.png \
-framerate 10 -loop 1 -t 5 -i 3.png \
-framerate 10 -loop 1 -t 5 -i 4.png \
-framerate 10 -loop 1 -t 5 -i 5.png \
-filter_complex \
"[1]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+4/TB[f0]; \
[2]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+8/TB[f1]; \
[3]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+12/TB[f2]; \
[4]format=rgba,fade=d=1:t=in:alpha=1,setpts=PTS-STARTPTS+16/TB[f3]; \
[0][f0]overlay[bg1];[bg1][f1]overlay[bg2];[bg2][f2]overlay[bg3];[bg3][f3]overlay,split[v0][v1]; \
[v0]palettegen[p];[v1][p]paletteuse[v]" -map "[v]" out.gif
ใช้-loop
ตัวเลือกเอาต์พุตเพื่อควบคุมจำนวนครั้งที่ลูป GIF ค่าเริ่มต้นคือการวนซ้ำไม่สิ้นสุดหากไม่ได้ใช้ตัวเลือกนี้ ค่าของ-1
คือไม่วนซ้ำ