Nhúng / phai màu đen
Cuộn xuống cho phương thức crossfade.
Ví dụ trong đó mỗi hình ảnh được hiển thị trong 5 giây và mỗi hình ảnh có độ mờ kéo dài 1 giây. Mỗi đầu vào hình ảnh có cùng chiều rộng, chiều cao và tỷ lệ khung hình mẫu. Nếu chúng khác nhau về kích thước, xem ví dụ # 3 dưới đây.
Đầu ra 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
Với âm thanh
Tương tự như trên nhưng với âm thanh:
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
Đối với hình ảnh đầu vào với kích thước khác nhau hoặc tùy ý
Giống như ví dụ đầu tiên, nhưng với hình ảnh đầu vào khác nhau về chiều rộng x chiều cao. Chúng sẽ được đệm để vừa trong hộp 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
Xem các ví dụ trong Thay đổi kích thước video để vừa với trình phát có kích thước tĩnh nếu bạn muốn cắt (lấp đầy màn hình) thay vì pad (hộp thư / cột trụ) hoặc nếu bạn muốn ngăn chặn việc nâng cấp.
Đầu ra GIF
Thêm các bộ lọc từ Làm cách nào để chuyển đổi video thành GIF bằng ffmpeg, với chất lượng hợp lý?
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
Sử dụng -loop
tùy chọn đầu ra để kiểm soát số lần các vòng lặp GIF. Mặc định là vòng lặp vô hạn nếu tùy chọn này không được sử dụng. Một giá trị -1
là không có vòng lặp.
Tùy chọn và bộ lọc được sử dụng:
-t
để đặt thời lượng tính bằng giây của mỗi đầu vào.
-loop 1
vòng lặp hình ảnh nếu không nó sẽ có thời lượng 1 khung hình.
-framerate
để đặt tốc độ khung hình ảnh đầu vào (mặc định khi không khai báo là 25). Hữu ích để làm GIF.
chia tỷ lệ với pad để khớp các hình ảnh đầu vào thành một kích thước đồng nhất, cụ thể (được sử dụng trong ví dụ # 3).
phai để mờ dần trong và ngoài. d
là thời gian mờ dần. st
là khi nó bắt đầu.
concat để nối (hoặc "tham gia") mỗi hình ảnh.
định dạng để xuất sơ đồ mẫu phụ sắc độ tương thích với các trình phát không dựa trên FFmpeg nếu xuất ra MP4 và mã hóa với libx264 (bộ mã hóa mặc định cho đầu ra MP4 nếu được bản dựng của bạn hỗ trợ).
tách để tạo bản sao của đầu ra bộ lọc. Cần bởi các bộ lọc bảng màu * để làm mọi thứ trong một lệnh.
palettegen và paletteuse để tạo GIF đẹp mắt.
Giao nhau
Ví dụ trong đó mỗi hình ảnh được hiển thị trong 5 giây và mỗi hình ảnh có độ dài kéo dài 1 giây. Mỗi đầu vào hình ảnh có cùng chiều rộng, chiều cao và tỷ lệ khung hình mẫu. Nếu chúng khác nhau về kích thước thì điều chỉnh ví dụ # 3 ở trên.
Đầu ra 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
Với âm thanh
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
Kết hợp giữa hai video với âm thanh
Chọn 5 đoạn thứ hai từ mỗi đầu vào và thêm giao diện 1 giây:
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
Đầu ra 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
Sử dụng -loop
tùy chọn đầu ra để kiểm soát số lần các vòng lặp GIF. Mặc định là vòng lặp vô hạn nếu tùy chọn này không được sử dụng. Một giá trị -1
là không có vòng lặp.