Saya ingin membuat animasi .gif
dari .mp4
video. Saya lebih suka melakukannya dari baris perintah, jadi tolong hanya daftar alat baris perintah.
Saya ingin membuat animasi .gif
dari .mp4
video. Saya lebih suka melakukannya dari baris perintah, jadi tolong hanya daftar alat baris perintah.
Jawaban:
ffmpeg
3.4.4 dapat melakukannya secara langsung di Ubuntu 18.04
Anda mungkin ingin menggunakan sesuatu seperti:
sudo apt-get install ffmpeg
wget -O opengl-rotating-triangle.mp4 https://github.com/cirosantilli/media/blob/master/opengl-rotating-triangle.mp4?raw=true
ulimit -Sv 1000000
ffmpeg \
-i opengl-rotating-triangle.mp4 \
-r 15 \
-vf scale=512:-1 \
-ss 00:00:03 -to 00:00:06 \
opengl-rotating-triangle.gif
Prosedur pembuatan data uji dijelaskan pada posting ini .
Yang lebih langsung:
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
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 membajak video secara online.
Lihat juga: https://stackoverflow.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: buat 512
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
berarti ffmpeg
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 dengan mediainfo
sebagaimana dijelaskan di: https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames -in-a-video-di-linux-command-line / 1044894 # 1044894
Saya 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 perantara
ffmpeg
tidak dapat menangani GIF sebelumnya. Yang terbaik yang saya miliki adalah sesuatu:
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
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-extension eog
, 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. Jadi 100
artinya 1 FPS, 5
berarti 1 / 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:
convert input.mp4 rpi2-bare-metal-blink.gif
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.
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:
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.jpg'
-r 5 stands for FPS value
for better quality choose bigger number
adjust the value with the -delay in 2nd step
to keep the same animation speed
%03d gives sequential filename number in decimal form
cd frames
convert -delay 20 -loop 0 *.jpg myimage.gif
-delay 20 means the time between each frame is 0.2 seconds
which match 5 fps above.
When choosing this value
1 = 100 fps
2 = 50 fps
4 = 25 fps
5 = 20 fps
10 = 10 fps
20 = 5 fps
25 = 4 fps
50 = 2 fps
100 = 1 fps
in general 100/delay = fps
-loop 0 means repeat forever
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.
frames
folder harus ada agar perintah pertama berfungsi.
-layers Optimize
ke convert
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
, dan imagemagick
yang semuanya tersedia di repo.
Setelah Anda npm
menginstal, Anda dapat menginstal gifify
secara global dengan:
npm install -g gifify
Video dapat dikonversi ke .GIF dengan:
gifify video.mp4 -o video.gif
Anda juga dapat secara opsional mengatur posisi awal dan akhir dalam video dan menambahkan teks:
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
❗️ Diperlukan beberapa menit agar konversi selesai bahkan dengan video yang lebih kecil.
CATATAN:
ffmpeg
danimagemagick
mungkin perlu dikompilasi dengan beberapa perpustakaan tertentu (yaitu libass dan fontconfig yang sesuai).
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 dijalankan npm install
dan apakah menjalankannya sebagai root atau tidak? Terima kasih!