Dengan pengonversi video2gif ini, Anda dapat mengunggah semua format video dan file multimedia untuk mengubahnya menjadi GIF animasi berkualitas tinggi
Persyaratan
Piton 3. 6+, pysimplegui,opencv-python dan paket umum lainnya yang terdaftar di requirements.txt
Instalasi
- Kloning repositori ini
- Instal dependensi
pip3 install -r requirements.txt
- Jalankan setup dari direktori root repositori
python3 setup.py install
_
Mulai
- Mulai antarmuka
python3 vgif/main.py
- Pilih berkas video
- Tetapkan opsi
- Klik tombol "Mulai" untuk memulai
- Setelah dimulai konverter akan menyimpan output di bawah video sumber iklan folder yang sama
- Klik tombol "Mulai Ulang" untuk memulai kembali proses ini
- Klik tombol "Keluar" untuk mengakhiri program ini
Antarmuka
- Tingkat Sampel Video. Setel laju sampel untuk video sumber [sampel default setiap 10 bingkai]
- Keluarkan FPS GIF. Atur output GIF fps [default 10 fps]
- Tingkat Pengubahan Ukuran Video. Kecilkan video n kali lebih kecil [default 2 kali lebih kecil]
Kutipan
Gunakan bibtex ini untuk mengutip repositori ini
@misc{ouzheng1993,
title={video2gif},
author={ou zheng},
year={2020},
publisher={Github},
journal={GitHub repository},
howpublished={\url{//github.com/ozheng1993/video2gif}},
}
Melakukan
- Ukuran GIF
- keluaran berkas
Berkontribusi
Kontribusi ke repositori ini dipersilakan. Contoh hal-hal yang dapat Anda kontribusikan
- perbarui README
- memperbarui antarmuka pengguna
Terkadang menghasilkan GIF animasi yang bagus memerlukan beberapa penyesuaian tingkat lanjut, yang dapat membantu pembuatan skrip. Jadi saya menambahkan fitur ekspor GIF ke MoviePy, paket Python yang awalnya ditulis untuk pengeditan video
Untuk demo ini kami akan membuat beberapa GIF dari trailer ini
Anda dapat mengunduhnya dengan perintah ini jika Anda telah menginstal Youtube-dl
1
youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
Mengubah kutipan video menjadi GIF
Berikut ini kami mengimpor MoviePy, kami membuka file video, kami memilih bagian antara 1'22. 65 [1 menit 22. 65 detik] dan 1'23. 2, kurangi ukurannya [menjadi 30% dari aslinya] dan simpan sebagai GIF
1 2 3 4 5 6
from moviepy.editor import *
clip = [VideoFileClip["frozen_trailer.mp4"]
.subclip[[1,22.65],[1,23.2]]
.resize[0.3]]
clip.write_gif["use_your_head.gif"]
Memotong gambar
Untuk GIF saya berikutnya, saya hanya akan mempertahankan bagian tengah layar. Jika Anda bermaksud menggunakan MoviePy, perhatikan bahwa Anda dapat mempratinjau klip dengan
1 2 3 4 5 60. Selama pratinjau mengklik piksel akan mencetak posisinya, yang nyaman untuk dipotong dengan presisi
1 2 3 4 5
kris_sven = [VideoFileClip["frozen_trailer.mp4"]
.subclip[[1,13.4],[1,13.9]]
.resize[0.5]
.crop[x1=145,x2=400]] # remove left-right borders
kris_sven.write_gif["kris_sven.gif"]
Membekukan suatu wilayah
Banyak pembuat GIF suka membekukan beberapa bagian GIF untuk mengurangi ukuran file dan/atau memfokuskan perhatian pada satu bagian animasi
Di GIF berikutnya, kami membekukan bagian kiri klip. Untuk melakukannya, kami mengambil cuplikan klip pada t=0. 2 detik, kami memotong snapshot ini hanya untuk menyimpan setengah kiri, lalu kami membuat klip komposit yang melapiskan snapshot yang dipotong pada klip asli
1 2 3 4 5 6 7 8 9 10 11 12
anna_olaf = [VideoFileClip["frozen_trailer.mp4"]
.subclip[87.9,88.1]
.speedx[0.5] # Play at half speed
.resize[.4]]
snapshot = [anna_olaf
.crop[x2= anna_olaf.w/2] # remove right half
.to_ImageClip[0.2] # snapshot of the clip at t=0.2s
.set_duration[anna_olaf.duration]]
composition = CompositeVideoClip[[anna_olaf, snapshot]]
composition.write_gif['anna_olaf.gif', fps=15]
Membekukan wilayah yang lebih rumit
Kali ini kita akan menerapkan custom mask ke snapshot untuk menentukan di mana itu akan transparan [dan membiarkan bagian animasi muncul].
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import moviepy.video.tools.drawing as dw
anna_kris = [VideoFileClip["frozen_trailer.mp4", audio=False]
.subclip[[1,38.15],[1,38.5]]
.resize[.5]]
# coordinates p1,p2 define the edges of the mask
mask = dw.color_split[anna_kris.size, p1=[445, 20], p2=[345, 275],
grad_width=5] # blur the mask's edges
snapshot = [anna_kris.to_ImageClip[]
.set_duration[anna_kris.duration]
.set_mask[ImageClip[mask, ismask=True]]
composition = CompositeVideoClip[[anna_kris,snapshot]].speedx[0.2]
# 'fuzz' [0-100] below is for gif compression
composition.write_gif['anna_kris.gif', fps=15, fuzz=3]
Simetri waktu
Tentunya Anda telah memperhatikan bahwa di GIF sebelumnya, akhir tidak selalu terlihat seperti awal. Akibatnya, Anda dapat melihat gangguan setiap kali animasi dimulai ulang. Cara untuk menghindarinya adalah dengan menyelaraskan waktu klip, mis. e. untuk membuat klip diputar sekali ke depan, lalu sekali ke belakang. Dengan cara ini akhir klip benar-benar menjadi awal klip. Ini menciptakan GIF yang dapat berputar dengan lancar, tanpa awal atau akhir yang nyata
youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
0youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
1Oke, ini mungkin contoh buruk dari simetri waktu, ini membuat butiran salju naik ke atas di paruh kedua animasi
Menambahkan beberapa teks
Di GIF berikutnya akan ada klip teks yang dilapiskan pada klip video
youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
2youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
3Membuat gif dapat diulang
GIF berikut menampilkan banyak salju yang turun. Oleh karena itu, tidak dapat dibuat berulang menggunakan simetri waktu [atau salju akan melayang ke atas. ]. Jadi kami akan membuat animasi ini dapat diulang dengan membuat awal animasi muncul secara progresif [memudar] tepat sebelum akhir klip. Montase di sini agak rumit, saya tidak bisa menjelaskannya lebih baik daripada dengan gambar ini
youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
4youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
5Contoh lain dari GIF yang dibuat dapat diulang
Klip berikutnya [dari film Charade] hampir dapat diulang. Anda bisa melihat Carry Grant tersenyum, lalu memasang wajah lucu, lalu kembali normal. Masalahnya adalah di akhir kutipan Cary tidak persis berada di posisi yang sama, dan dia tidak tersenyum seperti di awal. Untuk memperbaikinya, kami mengambil snapshot dari bingkai pertama dan membuatnya muncul secara progresif di bagian akhir. Ini sepertinya berhasil
1 2 3 4 5 6 7 8 9 10 11 12
youtube-dl 2Jw-AeaU5WI -o frozen_trailer.mp4
7Selesai besar. penghapusan latar belakang
Mari selami kegilaan scripting lebih jauh. kami menganggap video ini sekitar 2'16 [edit. bukan video yang awalnya saya gunakan, itu dihapus oleh pengguna Youtube, saya tambahkan untuk mencari tautan lain]
Dan kami akan menghapus latar belakang untuk membuat gif ini [dengan latar belakang transparan]
Kesulitan utama adalah menemukan apa latar belakang adegan itu. Untuk melakukannya, skrip mengumpulkan beberapa gambar di mana babi kecil berada pada posisi yang berbeda [sehingga setiap bagian dari latar belakang terlihat pada setidaknya beberapa [sebenarnya sebagian besar] slide, maka dibutuhkan piksel per-