ฉันจะรับ ffmpeg เพื่อแปลง. mov เป็น. gif ได้อย่างไร


98

ฉันพยายามแปลง. mov เป็น. gif และฉันไม่ประสบความสำเร็จ

นี่คือข้อผิดพลาด:

ffmpeg -pix_fmt rgb24 -i yesbuddy.mov output.gif
ffmpeg version 0.11.1 Copyright (c) 2000-2012 the FFmpeg developers
  built on Jun 12 2012 17:47:34 with clang 2.1 (tags/Apple/clang-163.7.1)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/0.11.1 --enable-shared --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-libfreetype --cc=/usr/bin/clang --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libass --enable-libvo-aacenc --disable-ffplay
  libavutil      51. 54.100 / 51. 54.100
  libavcodec     54. 23.100 / 54. 23.100
  libavformat    54.  6.100 / 54.  6.100
  libavdevice    54.  0.100 / 54.  0.100
  libavfilter     2. 77.100 /  2. 77.100
  libswscale      2.  1.100 /  2.  1.100
  libswresample   0. 15.100 /  0. 15.100
  libpostproc    52.  0.100 / 52.  0.100
Option pixel_format not found.

หากฉันปล่อยส่วน -pix_fmt rgb24 ออกมามันจะบ่น ความคิดเกี่ยวกับวิธีการแก้ไข?


3
FYI มีทางออกที่ดีสำหรับการแปลงที่มีคุณภาพสูงให้เป็นที่นี่
ryanjdillon

คำตอบ:


161

ลำดับของอาร์กิวเมนต์บรรทัดคำสั่งมีความสำคัญ บรรทัดคำสั่งนี้ควรใช้งานได้ แต่จะสร้างไฟล์ขนาดยักษ์:

ffmpeg -i yesbuddy.mov -pix_fmt rgb24 output.gif

โปรดทราบว่าคุณอาจต้องการลดอัตราเฟรมและขนาดเมื่อคุณแปลงเช่นเดียวกับการระบุเวลาเริ่มต้นและระยะเวลา คุณอาจไม่ต้องการแปลงไฟล์ทั้งหมดด้วยความละเอียดและอัตราเฟรมดั้งเดิม

ffmpeg -ss 00:00:00.000 -i yesbuddy.mov -pix_fmt rgb24 -r 10 -s 320x240 -t 00:00:10.000 output.gif

ขนาดไฟล์จะยังคงใหญ่ คุณสามารถใช้เครื่องมือเพิ่มประสิทธิภาพ GIF ของImageMagickเพื่อลดขนาด:

convert -layers Optimize output.gif output_optimized.gif

3
คำตอบที่ยอดเยี่ยมขอบคุณ :) GIF เป็นรูปแบบที่คลั่งไคล้ ... .mov ดั้งเดิมคือ 250k .gif ที่แปลงมาจาก ffmpeg คือ 8mb และconvertรุ่น -optimized คือ 10k ที่น่าประหลาดใจ! ที่น่าประทับใจ!
TooTallNate

19
ffmpeg บ่นเกี่ยวกับรูปแบบพิกเซลและเปลี่ยนจาก rgb24 เป็น pal8; ควรปรับปรุงคำสั่งในคำตอบหรือไม่
user1071136

7
รูปแบบพิกเซลที่ไม่สามารถใช้งานร่วมกันได้ 'rgb24' สำหรับ codec 'gif'
บำรุงรักษาสูง

1
@Andy แก้ไขอัตโนมัติเพื่อ rgb8 ในรุ่น ffmpeg ของฉัน
James Campbell

จะทำอย่างไรใน Android?
Ajay Shrestha

12

หลังจากการแปลง:

ffmpeg -i input.mp4 input.gif 

ลองเพิ่มประสิทธิภาพเฟรม:

convert input.gif -verbose -coalesce -layers OptimizeFrame input_optframe.gif

และใช้gifsicleเพื่อเพิ่มประสิทธิภาพขั้นสุดท้าย:

gifsicle -O2 input_optframe.gif -o optimized.gif

มี GIF 6.8mb จากวิดีโอ 12.2mb ที่มีคุณภาพเกือบเท่ากัน!


3
ใจอธิบายว่าขั้นตอนเหล่านี้ทำงานอย่างไรและกำลังทำอะไรอยู่?
Raystafarian

10

ฉันสร้างเครื่องมือที่รวม FFmpeg, ImageMagick และ giflossy ไว้ในโปรแกรมบรรทัดคำสั่งเดียวที่ใช้งานง่ายซึ่งคุณสามารถติดตั้งในหนึ่งบรรทัด: https://github.com/vvo/gifify

ฉันขอแนะนำให้ทุกคนยินดีที่จะเปลี่ยนวิดีโอ => GIF เพื่อใช้แทนการพยายามใช้เวลามากมายในการดูเว็บไซต์เอกสาร 3 แห่งเพื่อให้เข้าใจถึงวิธีการปรับขนาด GIF หรือเปลี่ยนเวลาเริ่มต้น / สิ้นสุด


1
และถ้าคุณให้นักเทียบท่าทำงานบนเครื่องของคุณให้ทำนามแฝงดังนี้: alias gifify='docker run -it --rm -v $(pwd):/data maxogden/gifify'จากนั้นใช้มันgifify screencast.mkv -o screencast.gif --resize 800:-1
sabbour

2
ffmpeg -y -i input.mp4 -f image2pipe -vcodec ppm - | convert -delay 2 -loop 0 -layers Optimize - gif:- | gifsicle -d 3 -O3 -o optimized.gif

ใช้ ffmpeg เป็นครั้งแรกเพื่อแปลงไฟล์ mp4 เป็นภาพผ่านไพพ์จากนั้นใช้ imagemagick เพื่อบีบอัดไฟล์เป็น gif ในที่สุดเพิ่มประสิทธิภาพด้วย gifsicle

ฉันไม่รู้ว่าทำไมการใช้ gifscicle โดยตรงจึงไม่ทำงาน

หรือคุณสามารถทำให้ gif เล็กลงด้วยสิ่งนี้

convert -dither none -matte -depth 8 -deconstruct -layers optimizePlus -colors 32 in.gif out.gif
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.