การใช้ ffmpeg เพื่อสร้างภาพยนตร์จากไฟล์ png


11

ฉันมีไฟล์ 277 800x600 png พร้อมชื่อไฟล์ที่มีรูปแบบ island_sizes-CSH (II) - ###. png โดยที่ ### เป็นหมายเลขที่ขึ้นต้นด้วย 084 และสิ้นสุดที่ 360

ฉันกำลังทำ

ffmpeg -i island_sizes-CSH\(II\)-*.png output.mpg -y

แต่มันไม่ทำงาน:

ffmpeg -f image2 -i island_sizes-CSH \ (II \) - *. png video.mpg -y
ffmpeg เวอร์ชัน 1.2.1 ลิขสิทธิ์ (c) 2000-2013 นักพัฒนา FFmpeg
  สร้างเมื่อวันที่ 10 พฤษภาคม 2013 15:14:14 ด้วย gcc 4.4.6 (GCC) 20120305 (Red Hat 4.4.6-4)
  การกำหนดค่า: --prefix = / usr --libdir = / usr / lib64 --shlibdir = / usr / lib64 --mandir = / usr / share / man --enable-shared --enable-runtime-cpudetect --enable- gpl --enable-version3 --enable-postproc --enable-avfilter --enable-pthreads --enable-x11grab --enable-vdpau - adable-avisynth --enable-libopencv --enable-libopencv libdc1394 --enable-libgsm --enable-libmp3lame --enable-libnut --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librtmp --enable-librtmp --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --extra-cflags = '- O2 -g -pipe -Wall -Wp, -D_FORTIFY_SOURCE 2 fstack-protector --param = ssp-buffer-size = 4 -m64 -mtune = ทั่วไป -fPIC '- ปิดการใช้งานการลอก
  libavutil 52. 18.100 / 52. 18.100
  libavcodec 54. 92.100 / 54. 92.100
  libavformat 54. 63.104 / 54. 63.104
  libavdevice 54 3.103 / 54 3.103
  libavfilter 3. 42.103 / 3. 42.103
  libswscale 2. 2.100 / 2. 2.100
  libswresample 0. 17.102 / 0. 17.102
  libpostproc 52 2.100 / 52 2.100
อินพุต # 0, image2, จาก 'island_sizes-CSH (II) -084.png':
  ระยะเวลา: 00: 00: 00.04, เริ่มต้น: 0.000000, อัตราบิต: N / A
    สตรีม # 0: 0: วิดีโอ: png, rgba, 800x600 [SAR 3937: 3937 DAR 4: 3], 25 tbr, 25 tbn, 25 tbc
[png @ 0x1468c20] ff_frame_thread_encoder_init ล้มเหลว
เอาต์พุต # 0, image2, ถึง 'island_sizes-CSH (II) -085.png':
    สตรีม # 0: 0: วิดีโอ: png, rgba, 800x600 [SAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 90k tbn, 25 tbc
เอาต์พุต # 1, image2, ถึง 'island_sizes-CSH (II) -086.png':
    สตรีม # 1: 0: วิดีโอ: png, rgba, 800x600 [SAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 90k tbn, 25 tbc
...
เอาต์พุต # 274, image2 ถึง 'island_sizes-CSH (II) -359.png':
    สตรีม # 274: 0: วิดีโอ: ไม่มี, rgba, 800x600 [SAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 90k tbn, 25 tbc
เอาต์พุต # 275, image2, ถึง 'island_sizes-CSH (II) -360.png':
    สตรีม # 275: 0: วิดีโอ: ไม่มี, rgba, 800x600 [SAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 90k tbn, 25 tbc
เอาท์พุท # 276, mpeg, ถึง 'video.mpg':
    สตรีม # 276: 0: วิดีโอ: ไม่มี, yuv420p, 800x600 [SAR 1: 1 DAR 4: 3], q = 2-31, 200 kb / s, 90k tbn, 25 tbc
สตรีมแมป:
  สตรีม # 0: 0 -> # 0: 0 (png -> png)
  สตรีม # 0: 0 -> # 1: 0 (png -> png)
...
  สตรีม # 0: 0 -> # 274: 0 (png -> png)
  สตรีม # 0: 0 -> # 275: 0 (png -> png)
  สตรีม # 0: 0 -> # 276: 0 (png -> mpeg1video)
เกิดข้อผิดพลาดขณะเปิด encoder สำหรับเอาต์พุตสตรีม # 218: 0 - อาจเป็นพารามิเตอร์ที่ไม่ถูกต้องเช่น bit_rate, อัตรา, ความกว้างหรือความสูง

จากman mencoder: mencoder "mf://*.jpg" -mf fps=25 -o output.avi -ovc lavc -lavcopts vcodec=mpeg4, คล้ายกับ ffmpeg
Eddy_Em

1
@Eddy_Em มันไม่เหมือนกับffmpeg- mencoderมีไวยากรณ์ที่แตกต่างกันโดยสิ้นเชิงขออภัย
slhck

1
mencoder ทำงานให้ฉัน! ขอบคุณ ฉันไม่สนใจว่าฉันจะใช้โปรแกรมใด - โดยที่ฉันได้รับภาพยนตร์
rhombidodecahedron

คำตอบ:


23

นี่คือไวยากรณ์ที่ไม่ถูกต้องสำหรับการส่งผ่านภาพหลายภาพเป็น input ffmpegเพื่อ โปรดดูที่คู่มือ FFmpeg วิกิพีเดียในการสร้างสไลด์โชว์วิดีโอและตัวเลือกimage2 demuxer

คุณต้องบอกให้ใช้ตัวเลขสามหลักสำหรับหมายเลขลำดับและเริ่มต้นที่ 84 เช่น

ffmpeg -start_number 84 -i island_sizes-CSH\(II\)-%03d.png output.mpg

เคล็ดลับเพิ่มเติมบางอย่าง:

  • MPEG-1 เป็นตัวแปลงสัญญาณวิดีโอน้อยกว่าที่ดีที่สุดและให้คุณภาพไม่ดีที่ขนาดไฟล์สูง นอกจากว่าคุณต้องการความเข้ากันได้กับอุปกรณ์หรือคอมพิวเตอร์เก่า (หรือ Windows XP ที่ไม่มีตัวแปลงสัญญาณ) ให้ลบและใช้ตัวเข้ารหัส MPEG-4 ส่วนที่ 10 (H.264) เช่นlibx264:

    ffmpeg -i … -c:v libx264 out.mp4
    

    สำหรับการกวดวิชาเกี่ยวกับตัวเลือก x264 (วิธีการเปลี่ยนคุณภาพ ฯลฯ ) ตรวจสอบคู่มือการเข้ารหัส x264

  • ไฟล์ PNG ใช้รูปแบบพิกเซล RGB ซึ่งไม่รองรับตัวแปลงสัญญาณวิดีโอปกติ ด้วย MPEG-1 มันไม่สำคัญ แต่ด้วยตัวแปลงสัญญาณ MPEG-4 เนื่องจากมันจะffmpegแปลงรูปแบบพิกเซลเป็น YUV แบบไม่สุ่มตัวอย่างโดยอัตโนมัติ ในกรณีดังกล่าวคุณต้องแปลสิ่งนี้เป็นรูปแบบ Chroma-Subampledเช่น YUV 4: 2: 0 มิฉะนั้นวิดีโอของคุณอาจไม่เล่นในแอปพลิเคชันส่วนใหญ่:

    ffmpeg -i … -c:v libx264 -pix_fmt yuv420p out.mp4
    

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