Dibangun dengan AI canggih di perangkat Anda dan akselerasi perangkat keras untuk performa profesional dengan privasi tanpa kompromi.AI di perangkat — profesional dan privat.
Potong GIF
Potong GIF per frame atau waktu — frame yang disimpan tetap utuh.
- Tanpa unggahan
- Pangkas lossless
- Per frame atau waktu
- Simpan, buang, atau pecah
Lepaskan GIF di sini
GIF, WebP animasi, atau APNG
Simpan bagian terpilih, buang bagian itu, atau pecah seluruh animasi.
Geser pegangan pada lini masa, atau ketik angka persisnya.
Cara memotong GIF
Pangkas GIF animasi hingga tersisa bagian yang Anda inginkan, berdasarkan nomor frame atau berdasarkan waktu, tanpa mengubah frame yang Anda simpan.
- 1
Tambahkan animasi Anda
Seret GIF animasi ke area berkas, atau klik untuk menelusuri. WebP animasi dan APNG juga bisa. Berkas dibaca di perangkat Anda dan tidak pernah diunggah.
- 2
Geser dua pegangannya
Lini masa disusun dari frame milik animasi itu sendiri, sehingga Anda bisa melihat apa yang sedang Anda pilih. Geser salah satu pegangan, atau ketik angka persisnya pada dua kotak isian — keduanya adalah pilihan yang sama, hanya diukur dalam frame atau dalam detik.
- 3
Pilih simpan, buang, atau pecah
Simpan bagian di antara kedua pegangan, buang bagian itu lalu sambung sisanya, atau abaikan pegangannya dan pecah seluruh animasi menjadi beberapa animasi yang lebih pendek.
- 4
Potong dan simpan
Hasilnya diputar di layar dengan jumlah frame dan durasi sebenarnya, dan kartu hasil menyebutkan apakah frame disalin atau dibangun ulang. Simpan berkasnya, atau ambil seluruh bagian hasil pemecahan sebagai satu arsip.
Kenapa memotong GIF
Kebanyakan animasi yang sampai ke tangan Anda lebih panjang daripada bagian yang sebenarnya Anda inginkan. Sebuah GIF reaksi punya tiga detik ancang-ancang sebelum momen yang membuatnya lucu. Sebuah rekaman layar merekam empat puluh detik Anda mencari tombolnya dan empat detik bug-nya. Sebuah loop kiriman orang lain dimulai setengah ketukan terlambat, sehingga ia tidak pernah benar-benar menyambung. Memotong adalah suntingan paling umum yang dibutuhkan sebuah animasi, dan sekaligus yang paling mudah dikerjakan dengan buruk — karena cara paling gamblang untuk melakukannya justru mengubah setiap frame yang tadinya ingin Anda pertahankan.
Geser dua pegangan di sepanjang frame milik animasi itu sendiri untuk menyimpan satu bagian, membuang satu bagian dari tengah, atau memecah seluruhnya menjadi beberapa animasi yang lebih pendek.
Membaca GIF, WebP animasi, dan APNG. Menulis GIF. Frame yang Anda simpan disalin dari berkas asli bila strukturnya memungkinkan, sehingga warnanya, transparansinya, dan jeda per frame-nya tidak berubah.
Untuk apa biasanya sebuah potongan
- Memangkas bagian pembuka. Membuang detik pertama supaya loop-nya dimulai tepat pada gerakan, dan itulah yang membuat animasi pendek terbaca sebagai sesuatu yang disengaja alih-alih sekadar cuplikan.
- Menembus batas ukuran berkas. Aplikasi obrolan, forum, atau tanda tangan surel dengan batas ukuran berkas. Membuang frame sejauh ini adalah cara termurah untuk mengecilkan animasi, dan tidak seperti menurunkan jumlah warna, cara ini sama sekali tidak berbiaya pada frame yang tersisa.
- Membuang bagian yang mati. Sebuah rekaman ketika tidak ada apa pun yang terjadi di antara dua bagian yang berguna. Membuang bagian tengah lalu menyambung kedua ujungnya adalah operasi yang berbeda dari memangkas ujung, dan kebanyakan alat tidak menyediakannya.
- Memecah satu klip panjang menjadi beberapa bagian. Rekaman panjang yang dipecah menjadi bagian-bagian yang muat pada batas durasi, atau menjadi langkah-langkah untuk dokumentasi, masing-masing berupa animasi yang berfungsi dan bukan sekadar folder berisi gambar.
Memotong tidak harus merugikan Anda
Inilah bagian yang layak dipahami, karena inilah yang membedakan alat ini dari semua alat lain di kategorinya, dan karena alasannya sederhana begitu diucapkan terang-terangan. Sebuah potongan membuang frame. Ia tidak mengubah frame yang ia simpan. Jadi tidak ada alasan bagi frame yang disimpan untuk keluar dalam keadaan berbeda dari saat ia masuk — namun demikian, pada setiap pemotong GIF daring lain, itulah yang terjadi.
Apa yang sebenarnya dilakukan sebuah penyalinan
- Sebuah GIF adalah daftar blok. Sebuah header, sebuah tabel warna, lalu satu blok per frame yang memuat posisi frame itu, paletnya sendiri bila ada, jedanya, dan data gambar terkompresinya. Tidak ada bagian dari blok sebuah frame yang bergantung pada panjang berkasnya.
- Jadi membuang frame berarti membuang rentang byte. Frame yang Anda simpan disalin dari berkas asli persis apa adanya — palet yang sama, data terkompresi yang sama, transparansi yang sama, posisi yang sama. Hanya kolom jeda tiap frame yang ditulis ulang, karena itulah satu-satunya angka yang boleh diubah sebuah potongan.
- Tidak ada yang didekode. Alat ini membaca struktur berkasnya lalu menyalin byte. Ia mendekode tepat satu frame, dan hanya supaya halaman punya sesuatu untuk ditampilkan kepada Anda. Itulah sebabnya jalur salin lebih dari sepuluh kali lebih cepat daripada alternatifnya.
- Jadi hasilnya bukan sekadar "tampak identik". Ia adalah piksel yang sama. Pengujian kami mendekode keluaran dan sumbernya memakai pustaka gambar terpisah lalu mensyaratkan selisih terbesar pada kanal warna mana pun dari piksel mana pun bernilai 0 dari 255 — kesetaraan, bukan toleransi.
Apa yang dirampas encode ulang dari Anda
Alternatifnya — yang ditempuh setiap alat pesaing — adalah mendekode seluruh animasi, memilih ulang 256 warna dari apa yang ditemukannya, memetakan setiap piksel ke palet baru itu, menghitung ulang bagian mana dari tiap frame yang berubah, lalu menulis berkas baru. Setiap langkah itu bersifat lossy dalam kadar kecil, dan kerugiannya menumpuk lewat suntingan berulang. Diukur pada berkas contoh kami sendiri dengan encoder serbaguna sebagai wakil jalur tersebut, tiga frame yang sama kembali dengan kanal warna meleset hingga empat langkah dari nilai awalnya. Empat dari 255 memang bukan bencana pada satu kali proses; tetapi itu tetap perubahan yang tidak diminta siapa pun, pada pekerjaan yang tidak punya alasan untuk membuat perubahan, dan proses ketiga atau keempatlah yang membuatnya terlihat.
Ketika penyalinan tidak dimungkinkan
Sebuah frame di dalam GIF tidak diwajibkan berupa gambar utuh. Formatnya membolehkan sebuah frame menjadi persegi panjang berukuran apa pun pada posisi mana pun, dan membolehkannya menandai piksel sebagai transparan yang berarti "apa yang sudah ada di layar di sini masih benar". Begitulah rekaman layar dari jendela yang sebagian besar diam bisa terkompresi sangat baik: frame satu adalah seluruh jendela dan frame dua dan seterusnya hanyalah tambalan kecil. Kalau potongan Anda dimulai pada frame tambalan, menyalin bloknya saja akan menghasilkan berkas yang menampilkan tambalan itu di atas kanvas kosong — sebuah GIF yang sah, unduhan yang berfungsi, dan gambar yang salah. Jadi alat ini memilih membangun ulang: ia lebih dulu menyusun setiap frame di atas kanvas utuh, baru kemudian menuliskannya. Bahkan dalam kasus itu ia membangun paletnya dari warna yang memang terkandung pada frame tersebut alih-alih memilih warna baru, sehingga hasilnya tetap persis. Kartu hasil selalu menyebutkan mana di antara keduanya yang terjadi.
Frame atau detik — dan bagaimana waktu menjadi frame
GIF tidak punya lini masa. Ia punya daftar frame, dan setiap frame membawa jedanya sendiri dalam perseratus detik. Semua yang ditampilkan sebuah lini masa diturunkan dari penjumlahan jeda-jeda itu, itulah sebabnya dua GIF dengan panjang yang sama bisa punya jumlah frame yang sama sekali berbeda, dan itulah sebabnya waktu yang Anda ketik harus diubah menjadi sekumpulan frame sebelum apa pun bisa dipotong.
Aturan yang dipakai alat ini
Satu rentang waktu memilih setiap frame yang tampil di layar selama rentang itu. Kalau frame empat berjalan dari 0,60 detik sampai 1,60 detik dan Anda meminta menyimpan 0,60 detik sampai 1,70 detik, Anda mendapat frame empat, lima, dan enam — setiap gambar yang mungkin Anda lihat dalam rentang itu. Alternatif paling terkenal mendokumentasikan aturan sebaliknya, membulatkan maju ke batas frame berikutnya, yang diam-diam membuang gambar yang justru sedang tampil pada saat yang Anda tunjuk. Keduanya bisa dipertahankan; hanya satu yang tidak pernah kehilangan sesuatu yang Anda minta, dan perbedaannya baru terlihat pada animasi dengan jeda tidak beraturan, yang justru mayoritas.
Satuan mana yang sebaiknya dipakai
- Frame, saat Anda ingin persis. Nomor frame dimulai dari 1 dan bersifat inklusif, jadi 3 sampai 6 menyimpan empat frame. Inilah satuan yang dipakai ketika Anda memotong menuju gambar tertentu — momen saat ekspresinya tepat mendarat, frame sebelum artefaknya muncul.
- Detik, saat Anda menyelaraskan dengan hal lain. Batas durasi, sebuah ketukan, sebuah teks yang harus tetap tampil di layar. Kotak isiannya menerima dua angka di belakang koma dan lini masa ikut bergerak mengikutinya.
- Keduanya adalah satu pilihan yang sama. Mengganti satuan mengonversi angkanya, bukan menafsirkannya ulang, jadi frame 3 sampai 6 menjadi detik yang ditempati frame-frame itu, dan kembali lagi akan mendarat tepat di 3 sampai 6. Kendali yang diam-diam mengubah "frame 3" menjadi "3 detik" berarti pilihan yang tidak pernah Anda buat.
- Kotak isian dan pegangannya selalu sepakat. Menggeser sebuah pegangan menuliskan angkanya ke dalam kotak, dalam satuan apa pun yang sedang tampil. Tidak ada status geser terpisah, jadi gambar dan angkanya tidak akan pernah berselisih soal apa yang akan dipotong.
Simpan, buang, atau pecah
Ada tiga hal yang orang maksud dengan "memotong GIF", dan kebanyakan alat hanya mengerjakan yang pertama. Ketiganya adalah operasi mendasar yang sama — memilih frame mana yang bertahan — jadi tidak ada alasan mengirim siapa pun ke halaman lain untuk dua sisanya.
- Simpan bagian terpilih. Pemangkasan biasa. Semua yang berada di antara kedua pegangan bertahan dan semua yang di luarnya hilang. Inilah arti memotong ketika tidak ada yang menyebut sebaliknya, dan inilah bawaannya.
- Buang bagian terpilih. Kebalikannya. Pita di antara kedua pegangan itulah yang hilang, dan sisanya di kedua sisi disambung menjadi satu animasi. Lini masa mewarnai pita itu merah supaya jelas ke arah mana Anda sedang bekerja.
- Pecah menjadi beberapa bagian. Abaikan pegangannya sama sekali: seluruh animasi dibagi menjadi beberapa animasi yang lebih pendek, menurut jumlah bagian yang sama besar, menurut frame per bagian, atau menurut detik per bagian. Setiap bagian adalah animasi sungguhan dengan waktu tampilnya sendiri, dan semuanya terunduh bersama sebagai satu arsip.
Bagaimana bagian-bagiannya dibagi
Pembagian rata dibuat serata mungkin sejauh frame utuh memungkinkan. Dua puluh frame menjadi tiga bagian menghasilkan tujuh, tujuh, dan enam — sisanya disebar ke bagian-bagian awal alih-alih ditumpuk pada bagian terakhir, dan itulah yang membuat sekumpulan bagian terlihat disengaja, bukan compang-camping. Memecah menurut frame per bagian memberi Anda bagian-bagian dengan jumlah frame persis segitu dan satu bagian lebih pendek di ujung; memecah menurut detik memotong menurut jam internal animasi itu sendiri, sehingga batas antarbagian jatuh di antara frame, bukan di tengah sebuah frame. Pada setiap mode, bagian-bagiannya bisa dijumlahkan kembali menjadi sumbernya secara persis: tidak ada frame yang terduplikasi dan tidak ada yang hilang, dan durasi total seluruh bagian sama dengan durasi animasi yang Anda mulai.
- GIF splitter — one animation in, a folder of still pictures out, one per frame. Use it when you want the images; use this page when you want shorter animations.
- GIF speed changer — the other way to make an animation shorter, by re-timing it rather than by removing frames. Use it when every frame has to stay and only the pace is wrong.
Apa yang terjadi pada waktu tampilnya
Sebuah potongan punya satu tugas yang jelas dan satu lagi yang tidak dipikirkan siapa pun sampai ia rusak. Yang jelas adalah memilih frame. Yang satunya adalah tidak mengubah waktu tampil animasi sambil melakukannya — dan karena GIF menyimpan satu jeda per frame, ada beberapa cara untuk salah secara halus di situ dan tetap menghasilkan berkas yang bisa diputar.
Tiga aturan waktu tampil
- Frame yang disimpan mempertahankan jedanya sendiri. Frame tujuh punya jeda 40 milidetik sebelum dipotong, jadi ia punya jeda 40 milidetik setelahnya. Ini terdengar terlalu jelas untuk dinyatakan, dan justru inilah yang dirusak sebuah alat ketika ia membangun ulang animasi pada laju frame yang diasumsikan.
- Durasi keluaran adalah jumlah dari apa yang Anda simpan. Bukan durasi sumbernya, dan bukan pula sebagian darinya. Angka pada kartu hasil dijumlahkan dari jeda frame-frame yang ada di berkas yang sebentar lagi Anda unduh.
- Hanya Tahan yang mengubah jeda. Dan ia mengubah tepat satu: frame di titik sambungan bagian yang dibuang, yang diperpanjang persis sebesar waktu yang dibuang. Selebihnya lewat tanpa disentuh.
Perpendek atau tahan, saat Anda membuang satu bagian
Membuang dua detik dari tengah animasi berdurasi lima detik menyisakan tiga detik gambar, dan Anda harus memutuskan apa yang terjadi pada dua detik itu. Perpendek adalah bawaan yang jujur: animasinya kini berdurasi tiga detik. Tahan mempertahankannya di lima detik dengan membiarkan frame sebelum celah tetap tampil selama waktu yang hilang, sehingga animasinya tetap memakan waktu seperti semula — jedanya terlihat, tetapi iramanya terjaga. Itu lebih sering penting daripada kedengarannya: sebuah loop yang diselaraskan dengan transisi halaman, hitung mundur yang panjangnya tidak boleh berubah, sebuah animasi yang duduk pada tata letak berdampingan dengan animasi lain. Hanya satu alat sisi klien di kategori ini yang menyediakan pilihan ini sama sekali, dan tidak ada alat unduhan yang kami tahu melakukannya.
Pengulangan, dan blok yang sering hilang
GIF menyimpan berapa kali ia diputar dalam sebuah blok aplikasi kecil di dekat awal berkas. Blok itu mudah terlewat, dan disimpan dengan cara yang canggung: angka di dalam berkas adalah berapa kali harus MENGULANG setelah pemutaran pertama, dan nol berarti selamanya — sehingga "diputar tepat sekali" sama sekali tidak bisa ditulis sebagai angka, dan justru dinyatakan lewat ketiadaan blok itu.
Apa artinya dalam praktik
- Sebuah potongan wajib membawanya serta. Animasi terpangkas yang diputar sekali lalu berhenti, padahal aslinya berulang, rusak dengan cara yang paling terlambat disadari orang — biasanya setelah ia sudah terlanjur dipublikasikan di suatu tempat.
- Membangun ulang harus menulisnya dari awal. Jalur bangun ulang menyusun berkas baru, jadi bloknya ditulis, bukan disalin. Salah satu angka di situ mengubah "diputar tiga kali" menjadi "diputar empat kali", dan itu persis jenis galat yang lolos dari tinjauan.
- Hasil satu frame tidak punya pengulangan. Memotong hingga tersisa satu frame menghasilkan gambar diam, dan gambar diam dengan blok pengulangan adalah kontradiksi. Bloknya tidak disertakan.
- Diuji pada tiga berkas sekaligus. Satu yang berulang selamanya, satu yang diputar tiga kali, satu yang diputar sekali — melalui jalur salin maupun jalur bangun ulang, dengan nilai pengulangan dibaca kembali dari berkas jadinya memakai pustaka terpisah.
Kenapa frame dua belas kadang membutuhkan frame sebelas
Inilah mekanisme di balik hampir semua hal di atas, dan ia layak mendapat satu paragraf karena menjelaskan kenapa sebuah potongan kadang berupa salinan dan kadang tidak, serta kenapa memotong GIF dengan alat yang naif bisa menghasilkan berkas yang terlihat rusak dengan cara yang tidak bisa Anda jelaskan.
Ketika sebuah GIF ditulis dengan baik, setiap frame hanya menyimpan apa yang berubah sejak frame sebelumnya. Sisanya ditandai transparan, yang oleh formatnya didefinisikan sebagai "biarkan apa yang sudah ada di sana". Itulah sebabnya rekaman layar 200 frame dari jendela yang sebagian besar diam bisa lebih kecil daripada animasi 20 frame dari sesuatu yang bergerak. Itu juga berarti sebagian besar frame di tengah berkas semacam itu tidak bermakna bila berdiri sendiri. Pemotong yang memulai animasi baru pada salah satu frame itu menghasilkan persis apa yang bisa Anda tebak: tambalan kecil melayang di atas kanvas kosong, di dalam berkas yang terbuka dengan sempurna.
Apa yang dilakukan alat ini soal itu
- Ia memeriksa sebelum menyalin. Sebuah frame bisa membuka animasi sendirian bila ia menutupi seluruh kanvas dan tidak menyatakan transparansi apa pun. Setiap deretan frame yang dihasilkan sebuah potongan harus dimulai dengan frame semacam itu, kalau tidak, penyalinan ditolak alih-alih dicoba.
- Pemeriksaannya pada berkas, bukan pada terkaan. Ia membaca persegi panjang frame itu dan tanda transparansinya langsung dari berkas — beberapa byte saja, tanpa dekode. Pemeriksaannya sengaja dibuat konservatif: frame yang menyatakan sebuah warna transparan tetapi tidak pernah memakainya akan ditolak untuk disalin padahal sebenarnya bisa, dan itu hanya berbiaya satu proses bangun ulang alih-alih berbiaya berkas yang rusak bagi Anda.
- Pemecahan memutuskannya bagian demi bagian. Bagian pertama dari sebuah pemecahan biasanya dimulai di frame satu dan bisa disalin; bagian-bagian berikutnya sering kali tidak bisa. Alat ini menyalin yang bisa disalin dan hanya membangun ulang yang memang harus, alih-alih menyeret seluruh pekerjaan ke jalur yang lebih lambat.
- Dan ia memberi tahu Anda. Kartu hasil menyebutkan jalur mana yang dijalankan. Alat yang diam-diam meng-encode ulang padahal berjanji tidak akan melakukannya akan tampak identik dari luar, dan itulah sebabnya jalurnya dilaporkan alih-alih diandaikan.
Hasil pengukuran
Setiap angka di bawah ini berasal dari paket pengujian alat ini sendiri pada perangkat acuan dan bisa direproduksi dengan menjalankannya. Bila sebuah klaim menyangkut kebenaran alih-alih kecepatan, klaim itu diperiksa terhadap pustaka gambar terpisah yang tidak berbagi kode apa pun dengan alat ini, sehingga perbandingannya bukan keluaran kami yang dinilai terhadap keluaran kami sendiri sebelumnya.
Angka-angkanya
- Kualitas Baik pada jalur salin maupun jalur bangun ulang, selisih terbesar pada kanal warna mana pun dari piksel mana pun antara keluaran dan frame sumbernya adalah 0 dari 255. Frame yang sama melalui encoder serbaguna kembali dengan selisih hingga 4 dari 255.
- Kecepatan Menyalin lebih dari sepuluh kali lebih cepat daripada membangun ulang potongan yang sama pada berkas yang sama, diukur dengan keduanya diselang-seling sehingga mesin yang sedang sibuk tidak bisa menguntungkan salah satunya.
- Pekerjaan yang dihindari Sebuah penyalinan mendekode tepat satu frame dari animasinya, berapa pun panjangnya — dipastikan lewat pengujian, bukan diperkirakan. Animasi 100 frame dipangkas tanpa pernah sekali pun mendekompresi 99 frame lainnya.
- Waktu tampil Jeda per frame lewat tanpa berubah dan durasi total keluaran adalah jumlah dari jeda yang disimpan, dibaca kembali dari berkas jadinya, bukan dari rencana yang membuatnya.
- Penyusunan ulang Bagian-bagian hasil pemecahan bisa dijumlahkan kembali menjadi sumbernya secara persis: jumlah frame yang sama dan durasi total yang sama, tanpa satu pun frame terduplikasi atau hilang.
Apa yang masuk, dan apa yang keluar
Daftar masukannya tertutup dan diberlakukan pada dialog berkas alih-alih pada mesin pemrosesnya, sehingga berkas yang tidak bisa dibuka alat ini ditolak dalam hitungan milidetik lengkap dengan arahan ke alat yang bisa — alih-alih diterima lalu gagal belakangan di balik lingkaran pemuatan.
- GIF masuk, GIF keluar. Beranimasi atau satu frame, terjalin maupun tidak, dengan satu palet atau palet berbeda pada setiap frame. Inilah kasus ketika frame yang Anda simpan disalin alih-alih di-encode ulang.
- WebP animasi dan APNG masuk. Keduanya dibaca oleh pembaca kami sendiri di setiap peramban alih-alih oleh dekoder bawaan, sehingga jumlah frame dan waktu tampilnya identik di mana pun. Keduanya keluar sebagai GIF, dan itu adalah konversi, alat apa pun yang melakukannya.
- Satu animasi keluar, atau beberapa. Simpan dan Buang menghasilkan satu berkas. Pecah menghasilkan satu berkas per bagian, masing-masing animasi yang berfungsi, bisa diunduh satu per satu atau sekaligus sebagai satu arsip.
- Selain itu ditolak dengan arahan. Video dikirim ke Video ke GIF; foto diam ke Pembuat GIF. Penolakannya menyebutkan berkas itu apa, alat ini menerima apa, dan ke mana Anda sebaiknya pergi.
Bagaimana animasinya dibaca
Pada jalur salin, animasinya nyaris tidak dibaca sama sekali: alat ini menyusuri struktur blok berkasnya, yang hanya beberapa ratus byte header berawalan panjang, dan tidak pernah mendekompresi satu gambar pun. Pada jalur bangun ulang, GIF didekode secara native bila peramban punya dekodernya dan oleh pembaca kami sendiri di tempat lain, sehingga sebuah animasi terbuka dengan cara yang sama di mana pun alih-alih muncul sebagai frame pertamanya saja tanpa pesan galat — yang justru terjadi pada beberapa peramban tanpa cadangan itu. WebP animasi dan APNG selalu memakai pembaca kami sendiri. Alat ini melaporkan pembaca mana yang berjalan, sehingga perbedaan antar-peramban muncul sebagai fakta alih-alih sebagai misteri.
Batas paket
- Gratis. Satu animasi hingga 200 MB dan hingga 300 frame, pada kualitas penuh. Paket gratis bukan potongan berkualitas rendah — keluarannya persis sama, hanya dalam batch yang lebih kecil.
- Pro. Hingga 20 animasi sekaligus tanpa batas jumlah frame, dipotong dalam satu kali jalan dan diunduh bersama sebagai satu arsip. Batch-lah yang dibeli Pro di sini, karena memangkas satu folder klip satu per satu adalah pekerjaan membosankan yang sebenarnya.
- Batas yang dimiliki kedua paket. Pada jalur bangun ulang, setiap frame dibentangkan ke warna penuh selama dikerjakan, jadi sebuah anggaran memori membatasi pekerjaannya sebelum dimulai alih-alih membiarkan tab berhenti merespons sementara lingkaran kemajuan terus berputar. Jalur salin tidak punya batas semacam itu, karena ia tidak pernah membentangkan apa pun.
Apa yang terjadi di perangkat Anda
Tidak ada yang diunggah. Berkas dibaca di mesin Anda sendiri, frame yang Anda simpan disalin atau dibangun ulang di sana, dan hasilnya diserahkan langsung ke folder unduhan Anda — semuanya di thread latar, sehingga halaman tetap tergambar selama pekerjaan berlangsung. Alat ini tetap bekerja saat jaringan diputus setelah halamannya selesai dimuat, dan pengujian kami sendiri mencatat setiap permintaan jaringan yang terjadi selama satu proses dan mensyaratkan daftarnya kosong.
Kenapa potongan yang sama selalu menghasilkan berkas yang sama
- Tidak ada keacakan di mana pun. Tidak ada bagian dari kedua jalur yang memakai algoritme acak, jadi animasi yang sama dengan pengaturan yang sama selalu menghasilkan keluaran yang identik byte demi byte. Itulah yang membuat hasilnya bisa diuji sama sekali.
- Keluarannya melaporkan dirinya sendiri. Setiap berkas mencatat apakah ia disalin atau dibangun ulang, dan apakah pikselnya persis. Perpindahan jalur yang senyap muncul sebagai fakta yang dinyatakan alih-alih sebagai perubahan ukuran berkas yang tak terjelaskan.
- Diperiksa terhadap implementasi lain. Identitas frame, jumlah frame, jeda, durasi total, dan jumlah pengulangan semuanya diverifikasi dengan libvips — pustaka gambar yang sepenuhnya terpisah — alih-alih terhadap keluaran kami sendiri sebelumnya.
- Salinannya juga diperiksa terhadap dirinya sendiri. Setelah setiap penyalinan, alat ini membandingkan data gambar terkompresi pada berkas yang baru saja ditulisnya dengan rentang yang sama pada sumbernya, byte demi byte. Pemeriksaan itu tidak mungkin gagal, dan justru itulah sebabnya ia murah dijalankan pada setiap potongan dan sebabnya perubahan di masa depan yang merusak jaminan ini akan gagal di sini alih-alih ikut terkirim.
Pada jalur salin, sebuah potongan tidak pernah mendekode gambar: alat ini membaca struktur berkasnya lalu menyalin frame yang Anda simpan, sehingga memangkas animasi 100 frame hanya mendekode tepat satu frame dan selesai dalam milidetik satu digit. Bila berkasnya harus dibangun ulang, pekerjaannya berjalan di thread latar pada perangkat keras grafis Anda bila perangkat Anda mendukungnya, sehingga halaman tetap responsif. Semua berjalan di perangkat Anda, bukan di server kami.
Pertanyaan yang sering diajukan
Apakah memotong GIF menurunkan kualitasnya?
Tidak di sini, pada kasus yang benar-benar penting. Setiap pemotong GIF daring lain membongkar animasinya lalu menulis berkas baru, yang berarti warna dipilih untuk kedua kalinya dan setiap frame dikompresi ulang — diukur terhadap satu alat populer, potongan delapan frame kembali dalam keadaan dikodekan ulang sepenuhnya, lengkap dengan komentar yang dicap ke dalam berkasnya. Alat ini menyalin frame yang Anda simpan langsung dari berkas asli: palet warnanya, data gambar terkompresinya, transparansinya, dan posisinya adalah byte yang sama persis seperti semula. Kami memeriksanya, bukan sekadar mengklaimnya, dengan mendekode keluaran dan sumbernya memakai pustaka gambar terpisah lalu mensyaratkan selisih terbesar pada kanal warna mana pun dari piksel mana pun bernilai 0 dari 255.
Bisakah saya memotong berdasarkan detik, bukan nomor frame?
Bisa, dan keduanya adalah pilihan yang sama yang ditampilkan dalam satuan berbeda — berpindah satuan mengonversi angkanya, bukan menafsirkannya ulang, jadi Anda mendarat kembali di titik semula. GIF tidak punya lini masa sendiri, hanya daftar frame yang masing-masing tampil selama jeda miliknya sendiri, sehingga sebuah waktu harus diterjemahkan menjadi sekumpulan frame. Aturan di sini: satu rentang waktu memilih setiap frame yang tampil di layar selama rentang itu. Minta menyimpan 0,6 detik sampai 1,7 detik dan Anda mendapat setiap gambar yang mungkin Anda lihat dalam satu detik lebih itu — bukan satu gambar yang dipangkas dari depan, yang justru terjadi kalau pembulatan dimajukan ke batas frame berikutnya.
Bisakah saya membuang satu bagian dari TENGAH sebuah GIF?
Bisa. Ubah modenya ke Buang, dan pita di antara kedua pegangan itulah yang hilang: semua yang ada sebelum dan sesudahnya disambung menjadi satu animasi. Tidak ada pemotong GIF lain yang menawarkan ini dalam alat yang sama — yang paling terkenal mengarahkan Anda ke editor frame terpisah, dan alternatif utama yang berjalan di sisi klien menyediakannya di halaman yang berbeda. Ini adalah pilihan yang sama, hanya dibaca terbalik, jadi lini masa memperlihatkan persis apa yang sebentar lagi menghilang.
Kalau saya membuang satu bagian, apakah animasinya jadi lebih pendek?
Itu pilihan Anda, dan disediakan sebagai kendali, bukan asumsi. Perpendek adalah bawaannya: animasi kehilangan persis waktu yang Anda buang. Tahan mempertahankan panjang totalnya dengan menambahkan waktu yang dibuang ke frame di titik sambungan, sehingga gambar sebelum potongan tetap tampil selama jeda itu. Tahan adalah yang Anda butuhkan ketika animasi harus mempertahankan iramanya — sebuah loop yang diselaraskan dengan elemen lain pada tata letak, atau hitung mundur yang panjangnya tidak boleh berubah. Perpendek adalah pilihan untuk selebihnya.
Bisakah saya memecah satu GIF menjadi beberapa GIF yang lebih pendek?
Bisa, dan justru inilah hal yang paling buruk ditangani kategori alat ini. Pemecah GIF paling terkenal hanya memecah menjadi gambar diam, dan alternatif utama berbasis peramban mencantumkan pemecahan menjadi beberapa animasi sebagai fitur yang akan datang, bukan yang sudah ada. Di sini Anda bisa memecah menjadi sejumlah bagian yang sama besar, menjadi bagian dengan sekian frame masing-masing, atau menjadi bagian dengan sekian detik masing-masing. Setiap bagian adalah animasi sungguhan dengan frame dan waktu tampilnya sendiri, dan semuanya turun bersama sebagai satu arsip. Tidak ada frame yang terduplikasi antarbagian dan tidak ada yang hilang — bagian-bagiannya selalu bisa dijumlahkan kembali menjadi sumbernya.
Apakah GIF saya tetap berulang setelah dipotong?
Ya. GIF menyimpan berapa kali ia diputar sebagai blok kecil di dekat awal berkas, dan itulah hal yang paling gampang dijatuhkan oleh sebuah pemotong — animasinya lalu diputar sekali lalu berhenti, yang biasanya baru disadari orang beberapa hari kemudian. Jumlah pengulangan dibawa melewati kedua jalur, termasuk pada kasus ketika berkas dibangun ulang dan bloknya harus ditulis dari awal. Hal ini diuji pada tiga berkas contoh sekaligus: satu yang berulang selamanya, satu yang diputar tepat tiga kali, dan satu yang diputar sekali.
Kenapa tertulis frame-nya dibangun ulang, bukan disalin?
Karena cara berkas Anda menyimpannya, bukan karena sesuatu yang Anda pilih. Frame GIF lazim disimpan sebagai tambalan: frame kedua belas dari sebuah rekaman layar sering kali hanya persegi panjang kecil yang baru masuk akal bila digambar di atas frame satu sampai sebelas. Kalau potongan Anda dimulai pada frame semacam itu, menyalin byte-nya akan menghasilkan berkas yang sah namun hanya menampilkan tambalan kecil di atas kanvas kosong — jadi alat ini memilih membangun ulang, dengan lebih dulu menyusun setiap frame di atas gambar utuh. Bahkan dalam kasus itu ia tidak melakukan kuantisasi ulang: paletnya dibangun dari warna yang memang terkandung pada frame tersebut, sehingga hasilnya tetap sama piksel demi piksel dengan apa yang ditampilkan animasi aslinya.
Adakah kasus ketika warnanya BENAR-BENAR berubah?
Ada satu, dan alat ini menyebutkannya pada kartu hasil saat itu terjadi. Sebuah GIF boleh memberi setiap frame palet warnanya sendiri, dan begitu frame semacam itu disusun bersama, gambarnya bisa memuat lebih dari 256 warna yang mampu ditampung satu palet GIF. Kombinasi itu — frame yang disimpan sebagai tambalan DAN membawa paletnya masing-masing — adalah satu-satunya kasus ketika potongan tidak bisa persis, dan itu jarang terjadi. WebP animasi atau APNG adalah kasus lainnya: keduanya sama sekali bukan GIF, jadi menjadikannya GIF adalah konversi, alat apa pun yang Anda pakai.
Seberapa cepat alat ini?
Menyalin lebih dari sepuluh kali lebih cepat dibanding membangun ulang pada berkas yang sama, karena ia sama sekali tidak pernah mendekode gambar — ia membaca struktur berkasnya, menyalin rentang byte yang memuat frame yang Anda simpan, lalu menuliskannya. Pada perangkat acuan, memotong 51 frame dari animasi 100 frame memakan waktu milidetik satu digit di jalur salin, dan tepat satu frame yang didekode untuk melakukannya. Membangun ulang potongan yang sama memakan waktu puluhan milidetik. Keduanya praktis seketika dibandingkan mengunggah berkasnya ke suatu tempat.
Apakah setiap frame mempertahankan waktu tampilnya sendiri?
Ya, dan inilah sifat yang paling mungkin dirusak sebuah pemotong. Jeda pada GIF bersifat per frame dan jauh lebih sering tidak beraturan daripada yang orang kira — satu pose ditahan selama sedetik, lalu enam frame masing-masing 40 milidetik. Pemotong yang meratakan semuanya menjadi rata-rata akan menghasilkan animasi yang sah tetapi diputar pada kecepatan yang salah, dan tidak ada satu pun bagian berkasnya yang tampak keliru. Setiap frame yang Anda simpan membawa jedanya sendiri tanpa perubahan, dan durasi total hasilnya adalah jumlah dari persis jeda-jeda itu. Satu-satunya jeda yang pernah diubah alat ini adalah yang Anda minta sendiri, lewat Tahan.
Berapa panjang GIF yang bisa saya potong pada paket gratis?
Hingga 300 frame dan 200 MB, satu animasi sekali jalan, pada kualitas penuh — paket gratis bukan potongan berkualitas rendah, melainkan batch yang lebih kecil. Pro menerima hingga 20 animasi sekaligus, menghapus batas jumlah frame, dan hanya dibatasi oleh kapasitas perangkat Anda, bukan oleh angka yang kami tetapkan. Setiap paket mendapat potongan lossless yang sama; tidak ada perbedaan apa pun pada keluarannya.
Apa bedanya alat ini dengan pemecah GIF?
Pemecah mengubah animasi menjadi gambar diam — satu frame, satu berkas — dan semua hal tentangnya mengikuti dari situ: format gambarnya, lembar sprite-nya, batas jumlah frame-nya. Keluaran alat ini selalu berupa animasi. Pemecahan menjadi beberapa animasi yang lebih pendek berada di sini, bukan di sana, karena alasan yang sama: itu adalah pemilihan rentang yang diterapkan lebih dari sekali, dan itulah yang memang sudah dilakukan sebuah pemotong. Kalau Anda ingin gambarnya, pakai pemecah; kalau Anda ingin animasi yang lebih pendek, Anda sudah di tempat yang tepat.
Apakah ada yang diunggah?
Tidak. Berkas dibaca di perangkat Anda sendiri dan, pada jalur salin, sebagian besar isinya bahkan tidak pernah didekode — frame yang Anda simpan disalin sebagai byte. Semuanya berjalan di thread latar sehingga halaman tetap responsif, dan alat ini tetap bekerja saat jaringan diputus setelah halamannya selesai dimuat. Pengujian kami sendiri mencatat setiap permintaan jaringan yang terjadi selama satu proses dan mensyaratkan daftarnya kosong.