답변:
ffmpeg
3.4.4는 우분투 18.04에서 직접 할 수 있습니다
다음과 같은 것을 사용하고 싶을 것입니다.
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
이 게시물에 설명 된 테스트 데이터 생성 절차 .
더 직접적인 :
sudo apt-get install ffmpeg
ffmpeg -i in.mp4 out.gif
또한 작동하지만 비디오 형식은 프레임 전체에서 지능적으로 압축되므로 출력 GIF는 입력 비디오보다 훨씬 큽니다.
인수 분석 :
ulimit -Sv 1000000
: 프로그램의 최대 1Gb 메모리 크기를 설정합니다.
대부분의 명령은 이전의 특정 시도와 같이 무제한 메모리를 사용하지 않도록합니다.
500MB는 ffmpeg가 공유 라이브러리를로드하지 못하도록합니다. RAM을 업그레이드 할 시간입니까?
-ss 00:00:03 -to 00:00:06
: 비디오를 잘라낼 시작 및 종료 시간입니다.
아니요, GIF는 온라인으로 동영상 을 해적판으로 배포 하는 가장 좋은 방법은 아닙니다 .
참조 : https : //.com/questions/18444194/cutting-the-videos-based-on-start-and-end-time-using-ffmpeg
-vf scale=512:-1
: 출력 512
픽셀을 높이로 만들고 가로 세로 비율을 유지하도록 너비를 조정합니다.
이것은 비디오보다 해상도가 훨씬 낮은 웹 이미지의 일반적인 사용 사례입니다.
이 옵션을 제거하면 출력 GIF의 높이는 입력 비디오와 동일합니다.
원 영상 높이로 예를 찾을 수있다 ffprobe
: https://superuser.com/questions/595177/how-to-retrieve-video-file-information-from-command-line-under-linux/1035178#1035178 이고 이 경우 1024 x 1024입니다.
-r 15
: 샘플링 FPS.
그래서 예를 들어, 원래의 동영상, 30 FPS이었다 -r 15
그 수단 ffmpeg
매 2 (1 개 프레임을 선택한다 = 30 / 15
).
인식 된 출력 FPS는 입력과 일치하도록 조정되므로 속도 향상을 느끼지 못하고 세분성 만 향상됩니다.
입력 FPS는로 찾을 ffprobe
수 있으며 https://superuser.com/questions/84631/how-do-i-get-the-number-of-frames에mediainfo
설명 된대로 전체 입력 프레임 수를 찾을 수 있습니다 . -in-a-video-on-the-linux- 명령어 행 / 1044894 # 1044894
비디오 형식은 일반적으로 해상도가 높기 때문에 더 높은 프레임 속도를 갖기 때문에이 옵션을 사용하는 것이 좋습니다. GIF가 작을수록 낮은 프레임 속도가 눈에 띄지 않으므로 일부 프레임을 건너 뛰고 더 작은 GIF를 만들 수 있습니다.
: 사전 18.04 전에 ffmpeg
+ convert
중간 파일이없는 한 줄
ffmpeg
이전에 GIF를 처리 할 수 없었습니다. 내가 가진 가장 좋은 것은 다음과 같습니다.
sudo apt-get install ffmpeg imagemagick
ffmpeg -i input.mp4 -r 10 -f image2pipe -vcodec ppm - | \
convert -delay 5 -loop 0 - output.gif
일부 인수에 대한 설명 :
-loop 0
: Netscape Gif extension Loop count 필드를 출력에 추가하십시오. 0은 무한에 설명 된대로 루프 의미 http://www.vurdalakov.net/misc/gif/netscape-looping-application-extension eog
, firefox
크롬조차없이 기본적으로 무한 모든 루프를, 그래서 잘 모르겠어요 어떻게해야 그 더 이상입니다.
-delay 5
: https://en.wikipedia.org/wiki/GIF#Animated_GIF 바이트 324에 설명 된대로 다음 프레임을 표시하기 전에 대기 시간 (초 단위) : 100
1 FPS를 5
의미 1 / 0.5 == 20FPS
합니다.
"실제"비 GIF 비디오 형식은 프레임에서 압축되는 반면 GIF는 개별 프레임 만 압축하므로 높이와 프레임 속도를 줄이더라도 출력 GIF는 여전히 비디오보다 클 수 있습니다.
직접 :
convert input.mp4 rpi2-bare-metal-blink.gif
작동했지만 메모리 오버플로로 인해 컴퓨터가 거의 죽이고 2s 1Mb 입력 파일에 대해 100 배 더 큰 출력을 생성했습니다. 언젠가 ImageMagick이 따라 잡을 수 있습니다.
우분투 17.10에서 테스트되었습니다.
scale=320:-1
-r 10
하면 GIF가 정상 속도로 돌아옵니다.
두 단계 :
비디오에서 이미지 추출
.mp4
파일 과 같은 디렉토리에 프레임이라는 디렉토리를 작성 하십시오. 사용 명령 :
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
문서 : GIF 옵션 변환
다소 큰 파일로 끝나고 이미지 magick 안내서를 살펴보고 두 번째 단계 명령에 추가하여 작은 파일을 얻을 수있는 옵션에 대한 gif를 최적화 하십시오.
frames
첫 번째 명령이 작동 하려면 폴더가 존재해야합니다.
-layers Optimize
마지막으로 convert
전에, 명령 *.jpg
. 출력을 확인하십시오. 영향을받을 수 있습니다. 나를 위해 그것은 품질의 눈에 띄는 손실없이 GIF 크기를 5MB에서
ffmpeg -i video.mp4 -r 5 'frames/frame-%03d.png'
.
gifify 는 변환을 단순화하는 올인원 노드 기반 유틸리티입니다. 이에 따라 nodejs
, npm
, ffmpeg
, 및 imagemagick
모든 REPOS에서 사용할 수있다.
당신은 일단 npm
설치는 설치 gifify
와 함께 전 세계적으로 :
npm install -g gifify
다음을 사용하여 비디오를 .GIF로 변환 할 수 있습니다.
gifify video.mp4 -o video.gif
비디오에서 시작 및 종료 위치를 선택적으로 설정하고 텍스트 캡션을 추가 할 수도 있습니다.
gifify clip.mp4 -o clip.gif --from 01:48:23.200 --to 01:48:25.300 --text 'we are the knights who say nip!'
❗️ 작은 비디오에서도 변환이 완료 되려면 몇 분이 걸릴 수 있습니다.
참고 :
ffmpeg
및imagemagick
일부 특정 라이브러리 (즉 libass을 따라는 fontconfig) 컴파일해야 할 수도 있습니다.
gifsicle
이지만 또 다른 문제가 발생합니다. github.com/vvo/gifify/issues/95 또한, npm 초보자에게 실행할 디렉토리 npm install
와 루트로 실행할지 여부를 알려주 시겠습니까? 감사!