-pattern_type glob
Tùy chọn tuyệt vời này giúp bạn dễ dàng chọn ảnh hơn trong nhiều trường hợp.
Trình chiếu video với một hình ảnh mỗi giây
ffmpeg -framerate 1 -pattern_type glob -i '*.png' \
-c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Thêm một số nhạc vào đó, cắt khi âm thanh có lẽ dài hơn khi hình ảnh kết thúc:
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
Đây là hai bản demo trên YouTube:
Trở thành một con hà mã và sử dụng định dạng video không có bằng sáng chế của Theora :
ffmpeg -framerate 1 -pattern_type glob -i '*.png' -i audio.ogg \
-c:a copy -shortest -c:v libtheora -r 30 -pix_fmt yuv420p out.ogg
Hình ảnh của bạn tất nhiên phải được sắp xếp theo thứ tự abc, điển hình là:
0001-first-thing.jpg
0002-second-thing.jpg
0003-and-third.jpg
và như thế.
Trước tiên tôi cũng sẽ đảm bảo rằng tất cả các hình ảnh được sử dụng có cùng tỷ lệ khung hình, có thể bằng cách cắt xén chúng với imagemagick
hoặc danh nghĩa trước đó, để ffmpeg sẽ không phải đưa ra quyết định khó khăn. Cụ thể, chiều rộng phải chia hết cho 2, nếu không, chuyển đổi không thành công với: "chiều rộng không chia hết cho 2".
Video tốc độ bình thường với một hình ảnh trên mỗi khung hình ở 30 FPS
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-c:v libx264 -pix_fmt yuv420p out.mp4
Đây là những gì nó trông giống như:
GIF được tạo bằng: https://askubfox.com/questions/648603/how-to-create-an-animated-gif-from-mp4-video-via-command-line/837574#837574
Thêm một số âm thanh cho nó:
ffmpeg -framerate 30 -pattern_type glob -i '*.png' \
-i audio.ogg -c:a copy -shortest -c:v libx264 -pix_fmt yuv420p out.mp4
Kết quả: https://www.youtube.com/watch?v=HG7c7lldhM4
Đây là những phương tiện thử nghiệm tôi đã sử dụng: a
wget -O opengl-rotating-triangle.zip https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.zip?raw=true
unzip opengl-rotating-triangle.zip
cd opengl-rotating-triangle
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
Hình ảnh được tạo bằng: Cách sử dụng GLUT / OpenGL để kết xuất thành tệp?
Thật tuyệt khi quan sát xem video nén theo cách thứ tự hình ảnh tốt hơn ZIP bao nhiêu vì nó có thể nén trên các khung bằng các thuật toán chuyên dụng:
opengl-rotating-triangle.mp4
: 340K
opengl-rotating-triangle.zip
: 7,3 triệu
Chuyển đổi một tệp nhạc thành video có hình ảnh cố định để tải lên YouTube
Đã trả lời tại: /superuser/700419/how-to-convert-mp3-to-youtube-allowed-video-format/1472572#1472572
Thiết lập nghiên cứu trường hợp trình chiếu thực tế đầy đủ từng bước
Có nhiều hơn một chút để tạo trình chiếu hơn là chạy một lệnh ffmpeg duy nhất, vì vậy đây là một ví dụ chi tiết thú vị hơn lấy cảm hứng từ dòng thời gian này .
Nhận phương tiện đầu vào:
mkdir -p orig
cd orig
wget -O 1.png https://upload.wikimedia.org/wikipedia/commons/2/22/Australopithecus_afarensis.png
wget -O 2.jpg https://upload.wikimedia.org/wikipedia/commons/6/61/Homo_habilis-2.JPG
wget -O 3.jpg https://upload.wikimedia.org/wikipedia/commons/c/cb/Homo_erectus_new.JPG
wget -O 4.png https://upload.wikimedia.org/wikipedia/commons/1/1f/Homo_heidelbergensis_-_forensic_facial_reconstruction-crop.png
wget -O 5.jpg https://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Sabaa_Nissan_Militiaman.jpg/450px-Sabaa_Nissan_Militiaman.jpg
wget -O audio.ogg https://upload.wikimedia.org/wikipedia/commons/7/74/Alnitaque_%26_Moon_Shot_-_EURO_%28Extended_Mix%29.ogg
cd ..
# Convert all to PNG for consistency.
# /unix/29869/converting-multiple-image-files-from-jpeg-to-pdf-format
# Hardlink the ones that are already PNG.
mkdir -p png
mogrify -format png -path png orig/*.jpg
ln -P orig/*.png png
Bây giờ chúng tôi đã xem xét nhanh tất cả các kích thước hình ảnh để quyết định tỷ lệ khung hình cuối cùng:
identify png/*
đầu ra nào:
png/1.png PNG 557x495 557x495+0+0 8-bit sRGB 653KB 0.000u 0:00.000
png/2.png PNG 664x800 664x800+0+0 8-bit sRGB 853KB 0.000u 0:00.000
png/3.png PNG 544x680 544x680+0+0 8-bit sRGB 442KB 0.000u 0:00.000
png/4.png PNG 207x238 207x238+0+0 8-bit sRGB 76.8KB 0.000u 0:00.000
png/5.png PNG 450x600 450x600+0+0 8-bit sRGB 627KB 0.000u 0:00.000
vì vậy tỷ lệ khung hình 480p (640x480 == 4/3) cổ điển có vẻ phù hợp.
Thực hiện một chuyển đổi với thay đổi kích thước tối thiểu để tạo độ rộng đồng đều (TODO tự động hóa cho bất kỳ chiều rộng nào, ở đây tôi chỉ xem thủ công identify
đầu ra và giảm chiều rộng và chiều cao xuống một):
mkdir -p raw
convert png/1.png -resize 556x494 raw/1.png
ln -P png/2.png png/3.png png/4.png png/5.png raw
ffmpeg -framerate 1 -pattern_type glob -i 'raw/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p raw.mp4
Điều này tạo ra sản lượng khủng khiếp, vì nhìn từ:
ffprobe raw.mp4
ffmpeg chỉ lấy kích thước của hình ảnh đầu tiên, 556x494, sau đó chuyển đổi tất cả những cái khác thành kích thước chính xác đó, phá vỡ tỷ lệ khung hình của chúng.
Bây giờ, hãy tự động chuyển đổi hình ảnh sang tỷ lệ khung hình 480p mục tiêu bằng cách cắt xén theo ImageMagick: làm cách nào để cắt tối thiểu hình ảnh thành tỷ lệ khung hình nhất định?
mkdir -p auto
mogrify -path auto -geometry 640x480^ -gravity center -crop 640x480+0+0 png/*.png
ffmpeg -framerate 1 -pattern_type glob -i 'auto/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p auto.mp4
Vì vậy, bây giờ, tỷ lệ khung hình là tốt, nhưng chắc chắn một số cắt xén phải được thực hiện, đó là loại cắt các phần thú vị của hình ảnh.
Tùy chọn khác là đệm với nền đen để có cùng tỷ lệ khung hình như được hiển thị tại: Thay đổi kích thước để vừa với hộp và đặt nền thành màu đen trên phần "trống"
mkdir -p black
ffmpeg -framerate 1 -pattern_type glob -i 'black/*.png' -i orig/audio.ogg -c:v libx264 -c:a copy -shortest -r 30 -pix_fmt yuv420p black.mp4
Nói chung, mặc dù, lý tưởng nhất là bạn sẽ có thể chọn hình ảnh có tỷ lệ khung hình giống hoặc tương tự để tránh những vấn đề đó ngay từ đầu.
Về các tùy chọn CLI
Tuy nhiên, xin lưu ý rằng mặc dù có tên, nhưng -glob
điều này không chung chung như các patters vỏ Glob, ví dụ: -i '*'
fail: https://trac.ffmpeg.org/ticket/3620 (rõ ràng vì filetype được suy ra từ phần mở rộng).
-r 30
làm cho -framerate 1
video 30 FPS để khắc phục các lỗi trong trình phát như VLC cho tốc độ khung hình thấp: VLC đóng băng cho video 1 FPS thấp được tạo từ hình ảnh với ffmpeg Do đó, nó lặp lại mỗi khung hình 30 lần để giữ hiệu ứng 1 hình ảnh mong muốn mỗi giây.
Bước tiếp theo
Bạn cũng sẽ muốn:
TODO: tìm hiểu cách cắt và ghép nhiều tệp âm thanh vào video mà không cần các tệp trung gian, tôi khá chắc chắn là có thể:
Đã thử nghiệm trên
ffmpeg 3.4.4, vlc 3.0.3, Ubuntu 18.04.
Thư mục