แปลงวิดีโอ OGV เป็นภาพเคลื่อนไหว GIF หรือไม่


40

ฉันสร้างวิดีโอ OGV ด้วยgtk-recordmydesktopโปรแกรม screencasting พยายามจัดการปัญหานี้ที่นี่ด้วย bruteforce มากกว่า X ฉันสามารถดูวิดีโอด้วย VLC ได้

ตอนนี้งานคือการหาวิธีการแปลงวิดีโอ OGV เป็นภาพเคลื่อนไหว GIF เพื่อให้ฉันสามารถแสดงบน SE ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


38

ลองดูที่: https://askubuntu.com/questions/107726/how-to-create-animated-gif-images-of-a-screencast/107735#107735

..... หลังจากDesktop Recorderได้บันทึกสิ่งที่บันทึกไว้ในวิดีโอOGVแล้วMPlayerจะถูกใช้เพื่อจับภาพหน้าจอJPEGและบันทึกลงในไดเรกทอรี'output'

บนเทอร์มินัล:

mplayer -ao null <video file name> -vo jpeg:outdir=output

ใช้ImageMagickเพื่อแปลงภาพหน้าจอเป็นภาพเคลื่อนไหว gif

convert output/* output.gif

คุณสามารถปรับภาพหน้าจอด้วยวิธีนี้:

convert output.gif -fuzz 10% -layers Optimize optimised.gif

1
สำหรับภาพจำนวนมากฉันต้องเพิ่ม-limit map 1การแปลง (ได้ "ฆ่า" อย่างอื่น)
Ax3l

ด้วยวิดีโอ ogv 30 วินาทีคำสั่ง convert ใช้ซีพียูของฉันทั้งหมดและใช้เวลานานกว่า 10 นาทีก่อนที่ฉันจะหยุดมัน การเพิ่ม-limit map 1คำสั่งไม่สามารถแก้ไขได้
สูงสุด

1
ลองใช้วิธีนี้เพื่อแปลงffmpeg -i output/00000%03d.jpg output.gif unix.stackexchange.com/questions/24014/…
Dawid Drozd

มันพูดถึงว่าconvert output/* -fuzz 10% -layers Optimize optimised.gifเป็นไปได้โดยตรงเช่นกันและเร็วกว่าเส้นทางสองคำสั่งอย่างเห็นได้ชัด นอกจากนี้ยังmplayerสร้างpngภาพหน้าจอได้อย่างง่ายดายเช่นกันซึ่งอาจเป็นที่ต้องการสำหรับการจับภาพเว็บไซต์หรือ GUI
Raphael

21

สคริปต์ง่าย ๆ ที่มีคุณภาพดี

สคริปต์:

inputFile=$1

FPS=15
WIDTH=320

#Generate palette for better quality
ffmpeg -i $inputFile -vf fps=$FPS,scale=$WIDTH:-1:flags=lanczos,palettegen tmp_palette.png

#Generate gif using palette
ffmpeg -i $inputFile -i tmp_palette.png -loop 0 -filter_complex "fps=$FPS,scale=$WIDTH:-1:flags=lanczos[x];[x][1:v]paletteuse" output.gif

rm tmp_palette.png

รหัสจาก: https://superuser.com/a/556031/295664

ไม่มีจานสี: (231 KB)

ป้อนคำอธิบายรูปภาพที่นี่

ด้วยจานสี: (573 KB)

ป้อนคำอธิบายรูปภาพที่นี่


4

หนึ่งซับนี้ใช้ได้สำหรับฉัน:

ffmpeg -i video.ogv video.gif

2
สิ่งนี้แตกต่างจากคำตอบเดิมที่ใช้อยู่ffmpegหรือไม่? อย่างไร?
ilkkachu

1
@ilkkachu ฉันกำลังมองหาวิธีแก้ปัญหาที่รวดเร็วเรียบง่ายและจดจำได้ง่าย คำตอบอื่น ๆ มีความซับซ้อนมากขึ้นและไม่สามารถเข้าใจได้อย่างรวดเร็วตั้งแต่แรก (อาจส่งผลให้ได้ผลลัพธ์ที่มีคุณภาพสูงกว่า)
luator

2
ifile=~/test.ogv

echo '# Determine input WxH and FPS' 
eval "$(ffmpeg -i "$ifile" 2>&1 |sed -nr 's/.*Stream.*Video.* ([0-9]+x[0-9]+),.*[^[0-9.]([0-9.]+).*tbr,.*/WxH=\1;FPS=\2/p')"

echo '# Output multiple images from the input video'
ffmpeg -i "$ifile" -r $FPS -s $WxH -f image2 -vframes 100 -y ~/test-%03d.jpg 2>/dev/null

echo '# use ImageMagic "convert" to generate the animated .gif' 
convert -delay 20 ~/test-[0-9][0-9][0-9].jpg  ~/test.gif 

echo '# remove temp image files'    
rm -f  ~/test-[0-9][0-9][0-9].jpg

echo 'Done!'

1
แนะนำให้แปลงเป็น PNG ไม่ใช่ JPEG ที่ใหญ่กว่า แต่ลดการบีบอัดใหม่
ideasman42
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.