Buat Gambar Kecil dari video


11

Bagaimana saya bisa membuat tangkapan sederhana dari video. Lebih disukai dari baris perintah?

Ide: ambil 9 snapshot untuk 9 kali bahkan (pada timeline) kali, dan simpan sebagai JPG

Contoh:

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
   |   |

Apa program terbaik untuk melakukan ini? Apakah ada program opensource?

Jawaban:


5

ffmpeg adalah alat open source yang sangat baik untuk memanipulasi video, termasuk mengekstraksi bingkai.

Untuk mengekstrak bingkai tunggal dari cap waktu tertentu, Anda dapat menggunakan perintah seperti

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

-r framerate Anda juga dapat menggunakan perintah like

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

untuk mendapatkan satu frame setiap satu menit (dengan asumsi video 24FPS). % 05d berarti bahwa nomor urut setiap gambar kecil harus diformat menggunakan 5 digit.

Jika Anda ingin menggabungkan gambar sebagai montase (kisi Anda), Anda dapat menggunakan imagemagick setelah mengekstraksi bingkai menggunakan ffmpeg.



1

vcsi adalah alat baris perintah yang ditulis dengan Python yang dapat digunakan untuk membuat snapshot 3 dengan 3 kotak dengan perintah berikut:

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

0

Kasing penggunaan saya hanya satu thumbnail dari video, hanya satu file untuk digunakan sebagai <video>poster tag. Jadi, apa cara cepat untuk membuat ini?

Dengan ffmpeg, Anda dapat melakukan ini:

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

Yang akan memberikan frame dekat kedua 123dari video.mp4disimpan sebagai poster.jpg.

Masalahnya, seperti yang Anda lihat, adalah kita perlu tahu mana yang benar.

Untuk menjaga agar dependensi kami tetap rendah, kami akan menggunakan ffmpeg sendiri untuk ini:

# 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 sepertinya pilihan umum, tetapi Anda bisa membuatnya 33% atau 50% juga.

Inilah skrip yang melakukan ini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.