저자의 메모
저는 더 이상 이 프로젝트를 사용하거나 이에 대한 지원을 제공하지 않습니다. 이 프로젝트를 유지하려면 [email protected]으로 저에게 핑을 보내주세요.
이 프로젝트는 4년 전에 만들어졌습니다. 이제 비디오를 GIF로 변환하는 더 좋은 방법이 있을 수 있습니다. Google을 사용하세요!
/작가의 메모
모든 비디오 파일을 최적화된 애니메이션 GIF로 변환하세요. 전체 길이이거나 일부만 가능합니다.
이 스크린캐스트는 lolilolicon/FFcast로 녹화된 후 다음을 사용하여 GIF로 변환되었습니다.
gifify screencast.mkv -o screencast.gif --resize 800:-1
stdin
및 stdout
지원GIFify를 사용하기 전에 다음을 설치하세요:
$ brew install node
)$ brew install ffmpeg
)$ brew install imagemagick
)$ brew install giflossy
)설치된 모든 항목과 함께 제공되는 gifify Docker 이미지를 사용할 수도 있습니다.
npm install -g gifify
> gifify -h
Usage: gifify [options] [file]
Options:
-h, --help output usage information
-V, --version output the version number
--colors < n > Number of colors, up to 255, defaults to 80
--compress < n > Compression (quality) level, from 0 (no compression) to 100, defaults to 40
--from < position > Start position, hh:mm:ss or seconds, defaults to 0
--fps < n > Frames Per Second, defaults to 10
-o, --output < file > Output file, defaults to stdout
--resize < W:H > Resize output, use -1 when specifying only width or height. ` 350:100 ` , ` 400:-1 ` , ` -1:200 `
--reverse Reverses movie
--speed < n > Movie speed, defaults to 1
--subtitles < filepath > Subtitle filepath to burn to the GIF
--text < string > Add some text at the bottom of the movie
--to < position > End position, hh:mm:ss or seconds, defaults to end of movie
--no-loop Will show every frame once without looping
예를 참조하세요.
var fs = require ( 'fs' ) ;
var gifify = require ( 'gifify' ) ;
var path = require ( 'path' ) ;
var input = path . join ( __dirname , 'movie.mp4' ) ;
var output = path . join ( __dirname , 'movie.gif' ) ;
var gif = fs . createWriteStream ( output ) ;
var options = {
resize : '200:-1' ,
from : 30 ,
to : 35
} ;
gifify ( input , options ) . pipe ( gif ) ;
읽을 수 있는 스트림을 gifify(stream, opts)
에 전달할 수도 있습니다.
Gifify는 명령줄( cat movie.mp4 | gifify -o out.gif
)과 프로그래밍 API( gifify(readableStream, opts).pipe(writableStream)
) 모두에서 스트림을 지원합니다.
어떤 경우에는 매우 유용하지만 이미 디스크에 파일이 있는 경우 gifify movie.mp4 -o out.gif
또는 gifify(filePath, opts).pipe(writableStream)
사용하는 것이 좋습니다.
왜? 40:20에서 40:22로 줄이려고 할 때 3.4GB를 파이핑하면 여전히 시간이 많이 걸리고 성능상의 이점을 제공하지 않기 때문입니다.
FFmpeg는 0GB -> $START_BYTE_40:20부터 읽어야 하며 이를 삭제해야 합니다. 그러나 모든 것은 당신의 기억 속에 흐릅니다.
명령줄에서 직접 파일 입력을 사용할 때 -i filename
옵션을 FFmpeg에 전달하면 속도가 매우 빨라집니다!
|piping
때 주의하십시오.
간단한 텍스트를 GIF에 구울 수 있습니다.
gifify back.mp4 -o back.gif --from 01:48:23.200 --to 01:48:25.300 --text " What?..What?What? "
결과:
자막을 GIF로 구울 수 있습니다. 정말 쉽습니다.
gifify 22.mkv -o movie.gif --subtitles 22.ass --from 1995 --to 2002 --resize 600:-1
새 자막 파일을 만들어야 합니다. 전체 영화의 타임코드는 5초 GIF에는 작동하지 않습니다.
aegisub를 사용하여 자막을 만들고 글꼴 크기를 늘려서 멋진 효과를 얻으세요!
다음은 aegisub로 생성된 이전 명령의 22.ass
입니다.
[Script Info]
; Script generated by Aegisub 3.2.1
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None
[Aegisub Project Garbage]
[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:02.50,0:00:03.97,Default,,0,0,0,,{fnLiberation Sansfs40}Okay, okay.
Dialogue: 0,0:00:05.00,0:00:06.90,Default,,0,0,0,,{fnLiberation Sansfs40}Okay. Okay.
22 Jump Street에서 GIF를 추출한 결과:
On modern hardware GIF is the slowest and most expensive video codec. Can we please allow it to be obsoleted?
https://pornel.net/efficient-gifs#sec44
욜로!
Giflossy는 gifsicle의 포크이며, gifsicle 작성자는 현재 gifsicle에 손실이 있는 부분을 통합하는 작업을 진행하고 있습니다.
따라서 곧 우리는 gifsicle과 gifiscle 패키지를 직접 사용할 수 있게 될 것입니다.
jclem/gifify는 훌륭한 영감의 원천이었습니다.