Saya ingin membuat animasi .gif
dari .mp4
video. Saya lebih suka melakukannya dari baris perintah, jadi tolong hanya daftar alat baris perintah.
command-line
mp4
gif
Maythux
sumber
sumber
Jawaban:
ffmpeg
3.4.4 dapat melakukannya secara langsung di Ubuntu 18.04Anda mungkin ingin menggunakan sesuatu seperti:
Prosedur pembuatan data uji dijelaskan pada posting ini .
Yang lebih langsung:
juga berfungsi, tetapi output GIF akan jauh lebih besar dari input video, karena format video kompres secara cerdas di seluruh frame.
Rincian argumen:
ulimit -Sv 1000000
: setel ukuran memori maksimum 1Gb untuk program.Kebanyakan saya memastikan bahwa perintah tersebut tidak menggunakan memori tidak terbatas seperti upaya-upaya tertentu sebelumnya.
500Mb membuat ffmpeg gagal memuat pustaka bersama ... waktu untuk meningkatkan RAM Anda?
-ss 00:00:03 -to 00:00:06
: mulai dan akhiri waktu untuk memotong video.Tidak, GIF bukanlah cara terbaik untuk
membajakvideo secara online.Lihat juga: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: buat512
tingginya piksel keluaran , dan sesuaikan lebar untuk mempertahankan rasio aspek.Ini adalah kasus penggunaan umum untuk gambar untuk web, yang cenderung memiliki resolusi jauh lebih kecil daripada video.
Jika Anda menghapus opsi ini, GIF output memiliki ketinggian yang sama dengan video input.
Ketinggian video asli dapat ditemukan misalnya dengan
ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 dan 1024 x 1024 dalam kasus kami.-r 15
: sampling FPS.Misalnya, video asli adalah 30 FPS, jadi itu
-r 15
berartiffmpeg
akan memilih satu frame di setiap 2 (= 30 / 15
).Namun, output FPS yang disesuaikan disesuaikan dengan input, sehingga Anda tidak akan melihat peningkatan, hanya rincian yang lebih besar.
Input FPS dapat ditemukan dengan
ffprobe
, dan jumlah total frame input dapat ditemukan denganmediainfo
sebagaimana dijelaskan di: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -in-a-video-di-linux-command-line / 1044894 # 1044894Saya merekomendasikan opsi ini karena format video biasanya memiliki framerate yang lebih tinggi karena resolusi yang lebih besar. Dengan GIF yang lebih kecil, framerate yang lebih rendah kurang terlihat, sehingga kita dapat melewatkan beberapa frame dan membuat GIF yang lebih kecil.
Sebelum pra 18.04:
ffmpeg
+convert
satu liner tanpa file perantaraffmpeg
tidak dapat menangani GIF sebelumnya. Yang terbaik yang saya miliki adalah sesuatu:Penjelasan dari beberapa argumen:
-loop 0
: tambahkan bidang jumlah loop Netscape Gif ekstensi ke output. 0 berarti infinite loop seperti yang dijelaskan di: http://www.vurdalakov.net/misc/gif/netscape-looping-application-extensioneog
,firefox
dan chromium semua loop tanpa batas secara default meskipun tanpa itu, jadi saya tidak yakin seberapa perlunya lagi.-delay 5
: waktu menunggu sebelum menampilkan frame berikutnya, dalam hundreths detik, seperti yang dijelaskan di: https://en.wikipedia.org/wiki/GIF#Animated_GIF byte 324. Jadi100
artinya 1 FPS,5
berarti1 / 0.5 == 20FPS
.Sekalipun Anda mengurangi ketinggian dan framerate, output GIF mungkin masih lebih besar dari video, karena format video non-GIF "asli" mengkompresi di seluruh frame, sementara GIF hanya memampatkan frame individual.
A direct:
bekerja, tetapi hampir membunuh komputer saya karena memory overflow, dan menghasilkan ouptput 100x lebih besar untuk file input 2s 1Mb saya. Mungkin suatu hari ImageMagick akan menyusul.
Lihat juga: https://superuser.com/questions/556029/how-do-i-convert-a-video-to-gif-using-ffmpeg-with-reasonable-quality
Diuji pada Ubuntu 17.10.
sumber
scale=320:-1
-r 10
akan membawa GIF kembali ke kecepatan normal.Dua langkah:
Ekstrak Gambar dari Video
Buat direktori bernama bingkai di direktori yang sama dengan
.mp4
file Anda . Gunakan perintah:sumber
Konversi Gambar ke gif
Documents: konversi opsi gif
Anda akan berakhir dengan file yang agak besar, lihat panduan sulap gambar untuk mengoptimalkan opsi gif yang dapat Anda tambahkan ke perintah langkah kedua untuk mendapatkan file yang lebih kecil.
sumber
frames
folder harus ada agar perintah pertama berfungsi.-layers Optimize
keconvert
perintah terakhir , sebelumnya*.jpg
. Periksa outputnya, mungkin terpengaruh. Bagi saya itu mengurangi ukuran gif dari 5 MB menjadi 700 KB tanpa ada penurunan kualitas :)ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.gifify adalah utilitas berbasis simpul all-in-one yang menyederhanakan konversi. Hal ini tergantung pada
nodejs
,npm
,ffmpeg
, danimagemagick
yang semuanya tersedia di repo.Setelah Anda
npm
menginstal, Anda dapat menginstalgifify
secara global dengan:Video dapat dikonversi ke .GIF dengan:
Anda juga dapat secara opsional mengatur posisi awal dan akhir dalam video dan menambahkan teks:
❗️ Diperlukan beberapa menit agar konversi selesai bahkan dengan video yang lebih kecil.
sumber
gifsicle
, tetapi kemudian masalah lain terjadi: github.com/vvo/gifify/issues/95 Juga, apakah Anda keberatan memberi tahu kami npm novis di direktori mana yang akan dijalankannpm install
dan apakah menjalankannya sebagai root atau tidak? Terima kasih!