Saya mengkonversi FLV
film ke GIF
file dengan ffmpeg.
ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
Ini berfungsi dengan baik, tetapi file keluaran gif memiliki kualitas yang sangat rendah.
Ada ide bagaimana saya bisa meningkatkan kualitas gif yang dikonversi?
Output dari perintah:
ffmpeg -i input.flv -ss 00:00:00.000 -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif
ffmpeg version 0.8.5-6:0.8.5-0ubuntu0.12.10.1, Copyright (c) 2000-2012 the Libav developers
built on Jan 24 2013 14:52:53 with gcc 4.7.2
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'input.flv':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-14 04:00:07
Duration: 00:00:18.85, start: 0.000000, bitrate: 3098 kb/s
Stream #0.0(und): Video: h264 (High), yuv420p, 1280x720, 2905 kb/s, 25 fps, 25 tbr, 50 tbn, 50 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 192 kb/s
Metadata:
creation_time : 2013-02-14 04:00:07
[buffer @ 0x92a8ea0] w:1280 h:720 pixfmt:yuv420p
[scale @ 0x9215100] w:1280 h:720 fmt:yuv420p -> w:320 h:240 fmt:rgb24 flags:0x4
Output #0, gif, to 'output.gif':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-02-14 04:00:07
encoder : Lavf53.21.1
Stream #0.0(und): Video: rawvideo, rgb24, 320x240, q=2-31, 200 kb/s, 90k tbn, 10 tbc
Metadata:
creation_time : 1970-01-01 00:00:00
Stream mapping:
Stream #0.0 -> #0.0
Press ctrl-c to stop encoding
frame= 101 fps= 32 q=0.0 Lsize= 8686kB time=10.10 bitrate=7045.0kbits/s dup=0 drop=149
video:22725kB audio:0kB global headers:0kB muxing overhead -61.778676%
Terima kasih.
Jawaban:
ffmpeg
contoh183rb
ffmpeg
dapat menghasilkan GIF berkualitas tinggi. Selalu disarankan untuk menggunakan versi terbaru: unduh atau kompilasi .-ss 30
) dari input dan membuat output 3 detik (-t 3
).-loop
opsi keluaran. Nilai dari0
adalah perulangan tak terbatas.Lihat GIF berkualitas tinggi dengan FFmpeg untuk lebih banyak contoh dan opsi.
convert
Contoh Imagagagick227rb
Metode baris perintah lainnya adalah menyalurkan dari
ffmpeg
keconvert
(ataumagick
) dari ImageMagick.Mengatur kecepatan bingkai
Setel kecepatan bingkai dengan kombinasi
fps
filter masukffmpeg
dan-delay
masukconvert
. Ini bisa menjadi rumit karenaconvert
hanya mendapatkan aliran gambar mentah sehingga tidak ada fps yang dipertahankan. Kedua,-delay
nilai dalamconvert
adalah dalam kutu (ada 100 kutu per detik), bukan dalam bingkai per detik. Misalnya, denganfps=12.5
= 100 / 12.5 = 8 =-delay 8
.convert
membulatkan-delay
nilai menjadi bilangan bulat, jadi 8,4 menghasilkan 8 dan 8,5 hasil dalam 9. Ini secara efektif berarti bahwa hanya beberapa frame rate yang didukung ketika mengatur penundaan seragam pada semua frame (penundaan tertentu dapat diatur per frame tetapi itu di luar jawaban ini).-delay
tampaknya diabaikan jika digunakan sebagai opsi keluaran, jadi itu harus digunakan sebelumnya-
seperti yang ditunjukkan dalam contoh.Terakhir, peramban dan pemirsa gambar mungkin menerapkan penundaan minimum, jadi Anda
-delay
mungkin tetap akan diabaikan.Video milik Pusat Pelatihan Konservasi Nasional Layanan Ikan & Margasatwa AS.
sumber
-vf scale=320:-1,format=rgb8,format=rgb24
convert
perintah untuk mengkonversi dari frame PNG akhirnya saya gunakanconvert -delay 5 -loop 0 -dither None -colors 80 "frames/ffout*.png" -fuzz "40%" -layers OptimizeFrame "output.gif"
, yang mengurangi ukuran file keseluruhan cukup sedikitscale=0:-1
, jadi ketika Anda mengatur skala0
, ia akan mengambil skala dari video.Jika Anda memilih untuk menghindari file gambar perantara, perintah yang disediakan oleh LordNeckBeard dapat disalurkan antara
ffmpeg
dan ImageMagickconvert
sehingga tidak ada file menengah yang diperlukan:Ia
-f image2pipe
memberitahu ffmpeg untuk membagi video menjadi gambar dan membuatnya cocok untuk disalurkan, dan-vcodec ppm
menentukan format output menjadi ppm (untuk beberapa alasan jika formatnya adalah png,convert
apakah tidak membaca semua gambar dari pipa, atau ffmpeg tidak tidak menampilkan semuanya). Untuk-
kedua perintah menentukan bahwa pipa akan digunakan untuk output dan input masing-masing.Untuk mengoptimalkan hasil tanpa menyimpan file, Anda dapat mengirim output dari
convert
keconvert
perintah kedua :Ia
gif:-
memberitahuconvert
untuk memipakan outputnya sebagai data yang diformat gif dan-layers Optimize
memberitahu yang keduaconvert
untuk melakukanoptimize-frame
danoptimize-transparancy
metode (lihat Pengantar ImageMagick untuk Optimasi Animasi ). Perhatikan bahwa output dari the-layers Optimize
tidak selalu memberikan ukuran file yang lebih kecil, jadi Anda mungkin ingin mencoba mengonversi ke gif tanpa optimasi terlebih dahulu untuk memastikan.Ingatlah bahwa selama seluruh proses ini semuanya ada dalam memori sehingga Anda mungkin perlu memori yang cukup jika gambarnya cukup besar.
sumber
avconv
convert -delay 5 -loop 0 -layers Optimize - output.gif
split
filter di ffmpeg. Tidak perluffmpeg -ss 30 -t 3 -i "input.flv fps=10,scale=320:-1:flags=lanczos,split[x][z];[z]palettegen[y];[x][y]paletteuse" output.gif
Pada ffmpeg 2.6, kita bisa melakukan yang lebih baik:
HT
sumber
Saya membuat versi skrip saya sendiri, yang parameter juga resolusi resolusi dan frame rate.
Menjalankan
./gifenc.sh input.mov output.gif 720 10
akan menghasilkan 720p lebar 10fps GIF dari film yang Anda berikan. Anda mungkin perlu melakukannyachmod +x gifenc.sh
untuk file tersebut.Anda dapat membaca detailnya di Github saya
Asumsi: ffmpeg diinstal, dan skrip berada di folder yang sama dengan file lainnya.
sumber
Jawaban dari @Stephane sangat bagus. Tapi itu akan mendapatkan peringatan seperti
Buffer queue overflow, dropping.
untuk beberapa video, dangif
beberapa frame yang dihasilkan turun.Ini adalah versi yang lebih baik dengan
fifo
filter yang harus dihindariBuffer queue overflow
saat menggunakanpaletteuse
filter. Dengan menggunakansplit
filter untuk menghindari pembuatan file PNG palet menengah.sumber
fifo
operasi filter antarao2
dano3
? Untuk menghindariBuffer queue overflow
peringatan.membuat skrip, diuji, dan berfungsi.
pemakaian:
PUNYA SENANG :)
vim avi2gif.sh
btw: vokoscreen adalah alat ScreenCapturing yang SANGAT BAIK untuk Linux :)
Terima kasih banyak Michael Kohaupt :) Rock mantap.
beberapa statistik ukuran file:
5.3M = vokoscreen-2015-04-28_15-43-17.avi -> vokoscreen-2015-05-28_12-41-56.avi.gif = 1013K
lihat hasilnya di sini.
sumber
The
ffmpeg
dengan palet metode dapat dijalankan dalam satu perintah, tanpa perantara.png
berkas.Ini bisa dilakukan berkat
split
filter.sumber
Linux / Unix / macOS
Mengikuti pendekatan @LordNeckbeard dengan
ffmpeg
perintah, silakan temukan fungsi Bash berguna berikut yang dapat ditambahkan ke~/.bash_profile
file Anda :Setelah fungsi dimuat (secara manual atau dari
. ~/.bash_profile
), Anda harus memilikivideo2gif
perintah baru .Contoh penggunaan:
atau:
Skala hingga 320 lebar dengan 10 bingkai per detik.
Anda juga dapat menentukan format video yang berbeda (seperti mp4).
macOS
Anda dapat mencoba aplikasi GIF Brewery yang dapat membuat GIF dari file video.
Atau ada beberapa situs web yang melakukan konversi online gratis.
sumber
Jawaban yang dipilih mengasumsikan Anda ingin skala video sumber dan mengubah fps di gif yang dihasilkan. Jika Anda tidak perlu melakukan ini, berikut ini berfungsi:
Ini sangat berguna ketika saya menginginkan gif yang dengan setia menciptakan kembali video sumber yang saya gunakan.
sumber
Untuk pengguna windows:
buat
video2gif.bat
file di direktori windows dengan konten ini:Dan kemudian di mana saja Anda dapat menggunakannya seperti contoh ini:
Maka Anda miliki
myvideo.gif
di direktori saat ini.Jika
myvideo.gif
ada, tanyakan dari Anda untuk menimpanya.SUNTING:
Saya sarankan gunakan skrip batch ini: https://github.com/NabiKAZ/video2gif
sumber
fps=10
danscale=-1:-1
). Jawaban Sun sudah memberi kami file batch, dan yang itu (seperti skrip shell dalam jawaban pje dan jawaban thevangelist ) memiliki keuntungan karena ia memberikan daftar filter ke variabel ( sekali ), ... (Lanjutkan)fps=10,scale=-1:-1
)? (Lihat jawaban nyata untuk contoh penjelasan bagian-bagian dari suatu perintah.)Di bawah ini adalah file batch untuk pengguna Windows:
gifenc.bat:
Sumber: GIF berkualitas tinggi dengan FFmpeg: Mengekstrak hanya sampel
Jika Anda hanya ingin menggunakan satu variabel input dan memiliki nama output hanya memiliki ekstensi GIF (diucapkan JIF), maka gunakan ini sebagai gantinya:
sumber
Bagaimana cara menambahkan entri menu konteks windows 7/10 "klik kanan" untuk mengonversi file video Anda menjadi gif
Beberapa jawaban lain menyebutkan skrip video2gif , yang saya gunakan. Tapi, Anda bisa menggunakan skrip apa pun.
Untuk membuat opsi menu konteks, Anda perlu mengedit registri Anda. Buka prompt perintah powershell, jalankan dengan admin privs. Jalankan perintah ini:
Sekarang ketika Anda mengklik kanan file Anda akan memiliki opsi "Jalankan Video2Gif"!
btw saya menginstal ffmpeg ke
C:\dev\ffmpeg\ffmpeg-3.4.2-win64-static\
dan menempatkanvideo2gif.bat
skrip di direktori bin tepat di sebelahffmpeg.exe
. Saya juga menambahkanC:\dev\ffmpeg\ffmpeg-3.4.2-win64-static\bin
ke windows sayaPATH
, tapi saya rasa Anda tidak perlu melakukannya.Jika Anda ingin opsi untuk dapat menyediakan beberapa flag / args baris perintah tambahan ke skrip, kemudian buat file baru dengan nama
video2gif-prompt.bat
, dan minta registri untuk merujuknya alih-alihvideo2gif.bat
:Anda masih bisa menekan enter untuk mendapatkan default dengan cepat.
sumber