Bagaimana saya dapat mengkonversi file video ke urutan gambar, misalnya satu frame setiap N detik. Bisakah mplayer atau ffmpeg melakukan ini? Saya telah menggunakan MPlayer untuk mengambil tangkapan layar secara manual tetapi saya ingin mengotomatiskan ini untuk video yang panjang.
71
Jawaban:
Ini sangat sederhana dengan ffmpeg, dan dapat menghasilkan satu frame setiap N detik tanpa skrip tambahan. Untuk mengekspor sebagai urutan gambar cukup gunakan
myimage_%04d.png
atau mirip dengan output. The%0xd
bit dikonversi menjadi nol-empuk bilangan bulatx
digit - contoh yang saya berikan mendapat outputmyimage_0000.png
,myimage_0001.png
,myimage_0002.png
dll ..
Anda dapat menggunakan banyak format gambar diam, png, jpeg, tga, apa pun (lihat
ffmpeg -formats
daftar lengkap).Ok jadi sekarang kita tahu bagaimana mengekspor film sebagai urutan gambar, tetapi katakan kita tidak ingin mengekspor setiap frame?
Caranya adalah dengan hanya mengubah frame rate dari output ke apa pun yang kita inginkan menggunakan
-r n
opsi di manan
jumlah frame per detik. 1 frame per detik adalah-r 1
satu frame setiap empat detik-r 0.25
, satu frame setiap sepuluh detik,-r 0.1
dan seterusnya.Jadi untuk menyatukan semuanya, beginilah tampilannya untuk menyimpan satu frame dari
input.mov
setiap empat detikoutput_0000.png
,output_0001.png
dll.:Perhatikan bahwa
-r 0.25
opsi pergi setelah itu-i input.mov
sebagian, karena itu mengendalikan frame rate dari keluaran . Jika Anda meletakkannya sebelum input, itu akan memperlakukan file input seolah-olah itu memiliki frame rate yang ditentukan.Ubah% xd menjadi berapa banyak digit yang Anda butuhkan, misalnya jika perintah akan membuat lebih dari 10.000 frame, ubah
%04d
menjadi%05d
. Ini juga berfungsi untuk file input yang merupakan urutan gambar. Baca lebih lanjut di sini .Pengguna Windows : Pada baris perintah digunakan
%
contoh:
ffmpeg -i inputFile.mp4 -r 1 outputFile_%02d.png
Dalam CMD dan Script BAT digunakan
%%
contoh:
ffmpeg -i inputFile.mp4 -r 1 outputFile %%02d.png
Jadi gandakan
%%
dalam skrip, dan lajang%
di baris perintah interaktif. Melakukan kesalahan di kedua situasi akan menghasilkan kesalahan.sumber
-r
jika saya ingin mengekspor setiap frame? Jika saya tahu FPS video, saya kira saya masukan itu, tetapi bagaimana jika saya tidak tahu?jpegs
untuk ini, kecuali Anda yakinpng
itulah yang Anda inginkan. Dalam kasus saya,jpeg
masing-masing sekitar 50kb, danpng
sekitar 2MB.-q:v 1
ini adalah opsi yang sangat berguna di sini seperti di superuser.com/questions/318845/…akan menyimpan bingkai sebagai file jpeg setiap 5 detik.
Namun, itu tidak akan berhenti di akhir file, itu akan terus menghasilkan salinan dari frame terakhir. Untuk menghindarinya, cari durasi video dalam detik, menggunakan pemutar lain, atau dengan mplayer:
dan cari garis seperti "ID_LENGTH = 147.00".
Kurangi 2 dari panjangnya, dan gunakan nilai ini untuk
-endpos
opsi. Misalnya, untuk video 147 detik:sumber
mpv --vo=image --sstep=5 movie.mkv
berfungsi dengan baik tanpa bug yang disebutkan di atas ( mpv adalah fork of mplayer) menggunakan mpv 0.27.0 di Debian.Dengan
ffmpeg
, Anda dapat melakukan hal berikut:Perintah ini menghasilkan thumbnail JPG berukuran 320x240 pada detik ke-4 dalam video. Masukkan ini dalam skrip yang mengubah waktu dan nama file dan Anda selesai.
Info lebih lanjut: Buat gambar mini setiap X detik video
sumber
-ss position
flag untuk mencari lebih jauh ke dalam file?-ss Seek to given time position in seconds. hh:mm:ss[.xxx] syntax is also supported
-ss
sebelum-i
sehingga pencarian terjadi sebelum video input akan diterjemahkan. ini harus mempercepatnya. sumberJika Anda mencari semacam lembar kontak dan jika Anda bekerja dengan OS mirip Unix, Anda dapat menggunakan skrip rumit ini, dipanggil ke titik Video Contact Sheet * NIX , vcs pendek .
Di latar belakang juga menggunakan
ffmpeg
(secara default) ataumplayer
, karenanya dapat menangani banyak format video. Ini mengotomatiskan proses pengambilan gambar diam dari film dan menyusunnya menjadi gambar dengan beberapa header dan footer. Anda dapat memilih misalnya berapa banyak tangkapan yang Anda inginkan atau sebagai alternatif perbedaan waktu di antara mereka.Untuk interval 10 menit, doa seperti itu:
Periksa daftar lengkap opsi baris perintah untuk beberapa penyesuaian lainnya.
Berikut ini contoh lembar kontak, yang diambil dari beranda :
sumber
Dengan VLC 1.1.0 ke atas, Anda dapat menggunakan filter video adegan:
Di atas menghemat 1 dari setiap 24 frame (--scene-ratio = 24), mulai dari 00:00:10 dan berakhir pada 00:00:11.
Baru saja diuji dan dikonfirmasi ini berfungsi dengan VLC 2.0.3 pada instalasi Windows 8 yang baru (saya tidak punya plugin video atau perangkat lunak tambahan).
Dokumentasi lengkap: http://wiki.videolan.org/How_to_create_thumbnails
sumber
VirtualDub dapat melakukan ini untuk Anda
File
->Export
->Image sequence
sumber
Anda juga bisa mencoba ini
Sumber di atas
sumber
Anda dapat melewati bingkai di VirtualDub. Cukup gunakan opsi "Decimate By" yang terletak di Video -> menu Frame Rate. Misalnya jika Anda menetapkan "Decimate By 100" lalu gunakan File -> Export -> Sequence gambar, itu akan menyimpan hanya setiap frame ke-100.
sumber