Domanda:
Software per convertire MP4 in GIF animate
AmirHosein Sadeghimanesh
2016-04-10 16:26:36 UTC
view on stackexchange narkive permalink

Esistono molti software per convertire i video in GIF animate, ma voglio sapere quale ha la dimensione di file minore per l'output di uno stesso video con MP4 e con la stessa frequenza di fotogrammi, dimensione in pixel.

Sto usando Windows 7.

Supponi di avere un file MP4 e vuoi convertirlo in un file GIF. Ad esempio, un file MP4 di 14 secondi con una dimensione di 2,53 Mb. Se uso 200 × 350 pixel e 4 fotogrammi al secondo, con "Any GIF Animator" l'output ha una dimensione di 1,5 Mb ma la qualità è pessima. Se aumento la frequenza dei fotogrammi a 30 fotogrammi al secondo, l'output è superiore a 700 Mb!

Esiste un software che converte un video in GIF di buona qualità ma di dimensioni ridotte? In caso contrario, quale software offre il miglior output in termini di qualità e dimensioni?

Una risposta:
#1
+8
Vi.
2016-04-13 04:20:22 UTC
view on stackexchange narkive permalink

ffmpeg

Può convertire da mp4 a gif. Puoi applicare alcuni effetti o ridimensionare il video per bilanciare la qualità e la dimensione del file.

Non hai pubblicato il tuo campione mp4, quindi sto usando il mio proprio.

Conversione normale

  ffmpeg -i sample.mkv -y sample.gif  

Risultato 12 M (Nota: non sarà ospitato foverer qui):

sample.gif

Conversione più complicata

Secondo questo articolo.

  filters = scale = 854x480: sws_dither = ed: sws_flags = lanczosffmpeg -v warning -i sample.mkv -vf $ filters, palettegen -y sample.d.pngffmpeg - v avviso -i sample.mkv -i sample.d.png -lavfi $ filtri '[x]; [x] [1: v] paletteuse '-y sample.d.gif  

Il risultato ha metà risoluzione, ha un aspetto migliore, ma comunque 12 M .

sample.d.gif

Proviamo a scambiare la qualità con la piccolezza

Riduci FPS a 15 e elimina il dithering

  filters = fps = 15, scale = 425x240: sws_dither = ed: sws_flags = lanczosffmpeg -v warning -i sample.mkv -vf $ filters, palettegen -y sample.m.pngffmpeg -v warning -i sample.mkv - i sample.m.png -lavfi $ filtri '[x]; [x] [1: v] paletteuse = dither = none '-y sample.m.gif  

Risultato: 3.7M”

sample.m.gif

Tentativo di inserire 2 MiB per allegare qui come immagine

12 FPS, 320 x 180, nessun dithering, 1,8 M

sample.mm.gif

Windows

Puoi anche usare FFmpeg dalla riga di comando in Windows.

Non ho provato, ma qualcosa del genere dovrebbe funzionare:

 set F = fps =  15 , scale =  400x240 : sws_dither = ed: sws_flags = lanczosffmpeg.exe -i  input.mp4  -vf% F%, palettegen -y palette.pngffmpeg.exe -i  input.mp4  -i palette. png -lavfi% F% "[x]; [x] [1: v] paletteuse = dither = none" -y output.gif

Non ho Windows a portata di mano e non posso controllare se tutto è a posto. Se non funziona, scrivi un commento.

File batch

Probabilmente non è conveniente modificare e incollare manualmente quei comandi ogni volta che è necessario eseguire la conversione. Ecco un file batch (non testato):

  set SOURCE = input.mp4set DESTINATION = output.gifset FPS = 12set SIZE = 256x144set DITHER = noneset F = fps =% FPS%, scale =% SIZE%: sws_dither = ed: sws_flags = lanczosffmpeg.exe -v warning -i% SOURCE% -vf% F%, palettegen -y palette.pngffmpeg.exe -v warning -i% SOURCE% -i palette.png -lavfi% F% "[x]; [x] [1: v] paletteuse = dither ="% DITHER% -y% DESTINATION% pause  

Puoi giocare con dimensioni di output e FPS, come così come con il dithering (possono essere numeri da 0 a 5 invece di nessuno ).

Forse prova a evitare percorsi completi come `C: \ FFMPEG`. Copia sia `ffmpeg.exe` che` zz123.mp4` in `C: \ FFMPEG` quindi` cd / D` in `C: \ FFMPEG` e usa un nome file più semplice.
Anche qui dovrebbe essere la fine del secondo comando e l'inizio del terzo: `-y palette.png ffmpeg.exe`. `palette.png` è l'ultimo argomento del secondo comando e` ffmpeg.exe` è l'inizio del terzo comando. Esiste già una piccola immagine `palette.png` in` C: \ FFMPEG \ bin`?
Dopo il successo, puoi creare un file bat per fare di nuovo la conversione più semplice.
Potresti anche voler modificare la riga F: per la modalità di alta qualità, prova `set F = fps = 25, scale = 512x288: sws_dither = ed: sws_flags = lanczos` (essenzialmente entrambi i filtri no-op), per una modalità più compatta, prova `set F = fps = 12, scale = 256x144: sws_dither = ed: sws_flags = lanczos`. Si basa sulle dimensioni del video e sugli FPS su quello screenshot.
Wow! Ho digitato le righe della parte ** File batch ** sostituendo input e output con i miei nomi di file (destinazione) e ha funzionato ^ _ ^ Solo, ha avvertito che `AVStream.codecpar` è usato al posto di` AVStream.codec`. L'output con la dimensione dei pixel e il numero di fotogrammi per secondo da te determinati ha una dimensione di 1,31 Mb ma il software Any GIF Animator con le stesse impostazioni era di 2,83 Mb. Grazie davvero ^ _ ^
Quindi, il problema è stato risolto? Se crei quel file batch nella directory FFMPEG / bin, avrai un "banco di conversione" per farlo di nuovo con altri file. FFmpeg può fare molte cose con il video: può anche estrarre parte del video, fare picture-in-picture, ritagliare il frame, regolare il contrasto della luminosità e così via.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...