Saya memiliki serangkaian gambar tempat saya ingin membuat video. Idealnya saya bisa menentukan durasi frame untuk setiap frame tetapi frame rate yang tetap akan baik-baik saja. Saya melakukan ini di wxPython, jadi saya dapat merender ke wxDC atau saya dapat menyimpan gambar ke file, seperti PNG. Apakah ada pustaka Python yang memungkinkan saya membuat video (AVI, MPG, dll) atau animasi GIF dari bingkai ini?
Sunting: Saya sudah mencoba PIL dan sepertinya tidak berhasil. Adakah yang bisa mengoreksi saya dengan kesimpulan ini atau menyarankan alat lain? Tautan ini tampaknya mendukung kesimpulan saya mengenai PIL: http://www.somethinkodd.com/oddthinking/2005/12/06/python-imaging-library-pil-and-animated-gifs/
sumber
imageio in anaconda
hasilTrue
, yay!Nah, sekarang saya menggunakan ImageMagick. Saya menyimpan bingkai saya sebagai file PNG dan kemudian memanggil convert.exe ImageMagick dari Python untuk membuat animasi GIF. Yang menyenangkan tentang pendekatan ini adalah saya dapat menentukan durasi frame untuk setiap frame secara individual. Sayangnya ini tergantung pada ImageMagick yang diinstal pada mesin. Mereka memiliki pembungkus Python tetapi terlihat sangat jelek dan tidak didukung. Masih terbuka untuk saran lainnya.
sumber
convert -delay 20 -loop 0 *jpg animated.gif
convert -delay 20 -resize 300x200 -loop 0 *jpg animated.gif
Pada Juni 2009, posting blog yang awalnya dikutip memiliki metode untuk membuat GIF animasi dalam komentar . Unduh skrip images2gif.py (sebelumnya images2gif.py , perbarui dari @geographika).
Kemudian, untuk membalikkan frame dalam gif, misalnya:
sumber
pip install visvis
, kemudian di skrip Andafrom visvis.vvmovie.images2gif import writeGif
.Berikut ini cara melakukannya dengan hanya menggunakan PIL (instal dengan :)
pip install Pillow
:sumber
x = [a, b, c]
untuk*x
yang dapat dianggap sebagaia, b, c
(tanpa tanda kurung melampirkan). Dalam fungsi panggilan ini identik:f(*x) == f(a, b, c)
. Dalam membongkar tuple itu sangat berguna dalam kasus di mana Anda ingin membagi iterable menjadi kepala (elemen pertama) dan ekor (sisanya), yang adalah apa yang saya lakukan dalam contoh ini.Saya menggunakan images2gif.py yang mudah digunakan. Tampaknya memang menggandakan ukuran file ..
26 file PNG 110kb, saya harapkan 26 * 110kb = 2860kb, tapi my_gif.GIF adalah 5.7mb
Juga karena GIF adalah 8bit, png yang bagus menjadi sedikit kabur di GIF
Berikut adalah kode yang saya gunakan:
Berikut adalah 3 dari 26 frame:
menyusut gambar mengurangi ukuran:
sumber
fp.write(globalPalette) TypeError: must be string or buffer, not list
Untuk membuat video, Anda dapat menggunakan OpenGL ,
sumber
Saya menemukan posting ini dan tidak ada solusi yang bekerja, jadi inilah saya solusi yang berfungsi
Masalah dengan solusi lain sejauh ini:
1) Tidak ada solusi eksplisit tentang bagaimana durasi dimodifikasi
2) Tidak ada solusi untuk iterasi direktori out of order, yang penting untuk GIF
3) Tidak ada penjelasan tentang cara menginstal imageio untuk python 3
instal imageio seperti ini: python3 -m pip instal imageio
Catatan: Anda akan ingin memastikan frame Anda memiliki semacam indeks dalam nama file sehingga mereka dapat diurutkan, jika tidak Anda tidak akan tahu di mana GIF dimulai atau berakhir
sumber
sort
mungkin menghasilkan hasil yang tidak terduga jika skema penomoran Anda tidak termasuk nol di depan. Juga mengapa Anda menggunakan peta alih-alih pemahaman daftar sederhana?filenames.append(os.path.join(path, filename))
images = [imageio.imread(f) for f in filenames]
lebih bersih, lebih cepat, dan lebih pythonic.Seperti kata Warren tahun lalu , ini adalah pertanyaan lama. Karena orang masih melihat halaman, saya ingin mengarahkan mereka ke solusi yang lebih modern. Seperti yang dikatakan blakev di sini , ada contoh Bantal di github .
Catatan: Contoh ini sudah usang (
gifmaker
bukan modul yang dapat diimpor, hanya skrip). Bantal memiliki GifImagePlugin (yang sumbernya ada di GitHub ), tetapi dokumen tentang ImageSequence tampaknya mengindikasikan dukungan terbatas (hanya baca)sumber
Ini bukan pustaka python, tetapi mencoder dapat melakukannya: Pengkodean dari beberapa file gambar input . Anda dapat menjalankan mencoder dari python seperti ini:
sumber
Pertanyaan lama, banyak jawaban bagus, tapi mungkin masih ada minat pada alternatif lain ...
The
numpngw
modul yang saya baru-baru memasang di github ( https://github.com/WarrenWeckesser/numpngw ) dapat menulis file PNG animasi dari array numpy. ( Pembaruan :numpngw
sekarang di pypi: https://pypi.python.org/pypi/numpngw .)Misalnya, skrip ini:
menciptakan:
Anda akan memerlukan browser yang mendukung PNG animasi (baik secara langsung atau dengan plugin) untuk melihat animasi.
sumber
Seperti salah satu anggota yang disebutkan di atas, imageio adalah cara terbaik untuk melakukan ini. imageio juga memungkinkan Anda untuk mengatur frame rate, dan saya benar-benar menulis sebuah fungsi dengan Python yang memungkinkan Anda untuk mengatur penahanan pada frame terakhir. Saya menggunakan fungsi ini untuk animasi ilmiah di mana perulangan berguna tetapi restart segera tidak. Inilah tautan dan fungsinya:
Cara membuat GIF menggunakan Python
sumber
Sudahkah Anda mencoba PyMedia ? Saya tidak 100% yakin tetapi sepertinya contoh tutorial ini menargetkan masalah Anda.
sumber
Dengan windows7, python2.7, opencv 3.0, berikut ini berfungsi untuk saya:
sumber
Hal termudah yang membuatnya berfungsi bagi saya adalah memanggil perintah shell dengan Python.
Jika gambar Anda disimpan seperti dummy_image_1.png, dummy_image_2.png ... dummy_image_N.png, maka Anda dapat menggunakan fungsi ini:
Eksekusi saja:
Ini akan membuat file gif Anda, my_output.gif.
sumber
Tugas dapat diselesaikan dengan menjalankan skrip python dua baris dari folder yang sama dengan urutan file gambar. Untuk file yang diformat png, skripnya adalah -
sumber
Saya sedang mencari kode baris tunggal dan menemukan berikut ini berfungsi untuk aplikasi saya. Inilah yang saya lakukan:
Langkah Pertama: Instal ImageMagick dari tautan di bawah ini
https://www.imagemagick.org/script/download.php
Langkah Kedua: Arahkan baris cmd ke folder tempat gambar (dalam kasus .png format saya) ditempatkan
Langkah Ketiga: Ketikkan perintah berikut
Terima kasih FogleBird untuk idenya!
sumber
Saya baru saja mencoba yang berikut dan sangat berguna:
Pertama Unduh perpustakaan
Figtodat
danimages2gif
ke direktori lokal Anda.Kedua, Kumpulkan angka-angka dalam array dan konversikan menjadi animasi gif:
sumber
Saya menemukan modul ImageSequence PIL , yang menawarkan informasi GIF yang lebih baik (dan lebih standar). Saya juga menggunakan metode after () Tk kali ini, yang lebih baik daripada time.sleep () .
sumber
Fungsi sederhana yang membuat GIF:
sumber
Saya mengerti Anda bertanya tentang mengonversi gambar ke gif; namun, jika format aslinya adalah MP4, Anda dapat menggunakan FFmpeg :
sumber
Benar-benar luar biasa ... Semua mengusulkan beberapa paket khusus untuk memainkan GIF animasi, saat ini dapat dilakukan dengan Tkinter dan modul PIL klasik!
Ini adalah metode animasi GIF saya sendiri (saya buat beberapa waktu lalu). Sangat sederhana:
Anda dapat mengatur cara Anda sendiri untuk menghentikan animasi. Beri tahu saya jika Anda ingin mendapatkan versi lengkap dengan tombol putar / jeda / keluar.
Catatan: Saya tidak yakin apakah frame berturut-turut dibaca dari memori atau dari file (disk). Dalam kasus kedua akan lebih efisien jika mereka membaca sekaligus dan disimpan ke dalam array (daftar). (Saya tidak begitu tertarik untuk mencari tahu! :)
sumber
sleep
utas utama GUI. Anda dapat menggunakanafter
metode ini untuk memanggil suatu fungsi secara berkala.tk.after()
sendiri. Tapi di sini saya perlu membuat kode sesederhana mungkin. Siapa pun yang menggunakan metode animasi GIF ini dapat menerapkan fungsi penundaannya sendiri.