Tạo hình thu nhỏ từ video


11

Làm cách nào để tạo một bản chụp đơn giản từ video. Tốt nhất là từ dòng lệnh?

Ý tưởng: chụp 9 ảnh chụp nhanh trong 9 lần đặt (trên dòng thời gian) và lưu chúng dưới dạng JPG

Thí dụ:

Movie length = 10 min
T1= snapshot of 1 min
T2= snapshot of 2 min
......
T9= snapshot of 9 min
   |   |
 T1| T2| T3
---+---+---
 T4| T5| T6
---+---+---
 T7| T8| T9
   |   |

Chương trình tốt nhất để làm điều này là gì? Có bất kỳ chương trình mã nguồn mở?

Câu trả lời:


5

ffmpeg là một công cụ mã nguồn mở tuyệt vời để thao tác video, bao gồm trích xuất khung.

Để trích xuất một khung hình từ dấu thời gian cụ thể, bạn có thể sử dụng lệnh như

ffmpeg -i video.avi -r 1  -t 00:01:00 -f image2 image%05d.png

-r là tốc độ khung hình. Bạn cũng có thể sử dụng lệnh như

ffmpeg -i video.avi -r 1/1440 -f image2 image%05d.png

để có được một khung hình cứ sau một phút (giả sử video 24FPS). % 05d có nghĩa là số thứ tự của mỗi hình ảnh thu nhỏ phải được định dạng bằng 5 chữ số.

Nếu bạn muốn kết hợp hình ảnh dưới dạng dựng phim (lưới của bạn), bạn có thể sử dụng hình ảnh sau khi trích xuất khung bằng ffmpeg.



1

vcsi là một công cụ dòng lệnh được viết bằng Python, có thể được sử dụng để tạo một lưới ảnh chụp nhanh 3 x 3 với lệnh sau:

vcsi -g 3x3 video.mkv -o output.jpg

0

Ca sử dụng của tôi chỉ là một hình thu nhỏ từ video, chỉ là một tệp duy nhất để sử dụng làm <video>poster poster. Vì vậy, điều gì sẽ là một cách nhanh chóng để thực hiện điều này?

Với ffmpeg, bạn có thể làm điều này:

ffmpeg -ss 123 -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

Điều đó sẽ cung cấp cho bạn khung gần thứ hai 123được video.mp4lưu dưới dạng poster.jpg.

Vấn đề, như bạn có thể thấy, là chúng ta cần biết thứ hai nào là đúng.

Để giữ cho sự phụ thuộc của chúng tôi ở mức thấp, chúng tôi sẽ sử dụng chính ffmpeg cho việc này:

# Get the time as h:m:s (non-padded)
l=$(ffmpeg -i video.mp4 2>&1 | grep Duration: | sed -r 's/\..*//;s/.*: //;s/0([0-9])/\1/g')
# Convert that into seconds
s=$((($(cut -f1 -d: <<< $l) * 60 + $(cut -f2 -d: <<< $l)) * 60 + $(cut -f3 -d: <<< $l)))
# Get frame at 25% as the thumbnail
ffmpeg -ss $((s / 4)) -y -i video.mp4 -r 1 -updatefirst 1 -frames 1 poster.jpg

25% video có vẻ như là một lựa chọn phổ biến, nhưng bạn cũng có thể làm cho nó 33% hoặc 50%.

Đây là một kịch bản làm điều này .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.