ชี้แจงตัวเลือกอินพุต ffmpeg พร้อมไฟล์รูปภาพเป็นอินพุต


34

ฉันมีภาพบางภาพและฉันต้องการทำ gif แบบเคลื่อนไหวด้วย ffmpeg ภาพมีชื่อเป็น:

837_1.png
838_1.png
...

ฉันพยายามที่จะไม่แน่ใจตัวเลือกบรรทัดคำสั่ง-iของ ffmpeg แต่ฉันล้มเหลวกับปัญหาบางอย่าง

หากฉันไม่ได้ระบุอะไรเลยขอให้ฉันแทนที่ไฟล์:

ffmpeg -i * -vcodec libx264 out.mp4

ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  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
Input #0, image2, from '358_1.png':
  Duration: 00:00:00.04, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: png, rgb24, 550x550, 25 tbr, 25 tbn, 25 tbc
File '359_1.png' already exists. Overwrite ? [y/N]

และถ้าฉันพยายามใช้หนึ่งในรูปแบบที่ใช้มากที่สุด (% d) ในอินเทอร์เน็ต .. ffmpeg ไม่พบไฟล์:

fmpeg -i '%3d_1.png' -vcodec libx264 out.mp4

ffmpeg version 1.2.1 Copyright (c) 2000-2013 the FFmpeg developers
  built on Jul 26 2013 20:18:03 with Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/1.2.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample --enable-vda --cc=cc --host-cflags= --host-ldflags= --enable-libx264 --enable-libfaac --enable-libmp3lame --enable-libxvid
  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
[image2 @ 0x7f963a006600] Could find no file with with path '%3d_1.png' and index in the range 0-4
%3d_1.png: No such file or directory

ดังนั้น .. นี่คือคำถามวิธีใช้ตัวเลือกบรรทัดคำสั่ง-iกับ ffmpg?

เพื่อความชัดเจนฉันอยู่ใน Mac OSX 10.8, ffmpeg รุ่น 1.2.1, zsh 4.3.11

คำตอบ:


47

หากไม่มีตัวเลือกเพิ่มเติมimage2demuxer ของ ffmpeg จะค้นหาลำดับที่เริ่มต้นด้วย 0 มันจะตรวจสอบรอบดัชนีนี้ด้วยช่วงเริ่มต้นที่ 5 (นั่นคือสาเหตุที่มันจะบ่นว่าไม่มีดัชนีในช่วง 0-4) ตามเอกสารคุณต้องกำหนดหมายเลขเริ่มต้นหากคุณต้องการเริ่มที่ดัชนีโดยพลการเช่น 837

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 out.mp4

พื้นที่สีในการแปลง PNG ถึง H.264

เนื่องจากไฟล์ PNG ใช้พื้นที่สี RGB เพื่อแทนพิกเซลการแปลงเป็น H.264 จะกลายเป็น YUV 4: 4: 4 ( ไม่ใช่ตัวอย่าง ) วิดีโอที่ได้อาจไม่สามารถเล่นได้กับผู้เล่นทุกคนโดยเฉพาะอย่างยิ่งสิ่งที่ไม่ใช่ FFmpeg ผู้เล่นของคุณจะแสดงเฉพาะเฟรมสีดำหรืออาจผิดพลาด หากต้องการแก้ไขให้เปลี่ยนรูปแบบพิกเซลเป็น YUV 4: 2: 0:

ffmpeg -start_number 837 -i '%3d_1.png' -c:v libx264 -pix_fmt yuv420p out.mp4

เพื่อควบคุมคุณภาพให้ใช้-crfตัวเลือก ดูคู่มือการเข้ารหัส x264สำหรับข้อมูลเพิ่มเติม

ทำไม*glob ไม่ทำงาน

อย่าใช้*ตัวเลือกป้อนข้อมูล เปลือกจะขยายไปยังไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันก่อนที่จะเห็นมันดังนั้นคำสั่งจะขยายตัวออกไปffmpeg ffmpeg -i file1 file2 … filenเนื่องจากไฟล์อินพุตทั้งหมดffmpegต้องการ-iตัวเลือกจึงจะใช้file2 … filenเป็นไฟล์เอาต์พุตแทนและเขียนทับไฟล์เหล่านั้น ไม่ดี.


คำตอบที่สมบูรณ์มาก! และคุณมีคำแนะนำเกี่ยวกับ gif แบบเคลื่อนไหวบ้างไหม
nkint

สำหรับ GIF แบบเคลื่อนไหวคุณต้องการอัปเดตเป็น ffmpeg เวอร์ชัน 2.0 ขึ้นไปเนื่องจากมีการปรับปรุงคุณภาพภาพอย่างมาก ดาวน์โหลดหน้ามีการเชื่อมโยงบางอย่างเพื่อคงสร้างสำหรับ OS X สำหรับ ffmpeg เก่าดู: วิดีโอแปลง ffmpeg .flv เพื่อ .gif ที่มีคุณภาพอันยิ่งใหญ่
slhck

ในความเป็นจริงมันไม่เพียง แต่ตรวจสอบ + 0..4 แต่ยัง 8,16,32,64 เป็นต้นซึ่งจะเห็นได้ชัดเจนเมื่อใช้ HTTP url's อย่างไรก็ตามimage2ไม่สามารถรับรู้ว่า200 OKเทียบเท่ากับ "พบไฟล์" ดังนั้นจึงไม่หยุดค้นหา
MSalters

1
ฉันได้รับสิ่งเดียวกันแม้หลังจากพยายามใช้คำแนะนำของคุณ ไฟล์ของฉันถูกตั้งชื่อDSCxxxxx.jpgโดยที่xxxxxเป็นหมายเลข 5 หลักเริ่มต้นด้วยศูนย์ (หมายเหตุฉันไม่มีขีดล่าง) ยังหลังจากทำงานffmpeg -r 30 -start_number 04606 -i DSC%d.jpg out.mp4ฉันได้รับข้อผิดพลาดเช่นเดียวกับในโพสต์ต้นฉบับด้านบน
ไม่ประสงค์ออกนาม

@jphollowed คุณใส่รูปแบบชื่อไฟล์ในเครื่องหมายคำพูดหรือไม่?
slhck

29

Globbing สามารถเปิดใช้งานได้โดยการระบุ-pattern_type globตัวเลือก:

ffmpeg -pattern_type glob -i '*.png' -vcodec libx264 out.mp4

2
วิธีที่ดีกว่ามาก :)
กุสตาฟ

3
สิ่งนี้ใช้ได้สำหรับฉันเท่านั้น ไม่มีทางที่จะได้รับนี้xxx%d.png, xxx%3d.png, 'xxx%d.png'หรือ'xxx%3d.png'สิ่งที่ทำงาน
yPhil

ฉันได้รับข้อผิดพลาดเดียวกันหลังจากลองทำสิ่งนี้:[image2 @ 0x2552560] Could find no file with path '*.jpg' and index in the range 0-4 *.jpg: No such file or directory
ไม่ระบุชื่อ

เลือกประเภทรูปแบบ 'glob' แต่ไม่รองรับ globbing ในรูปแบบนี้ libavformat [ใช้ Windows ffmpeg] [oof ควรเลื่อนลงหนึ่งคำตอบ]
Katastic Voyage

7

หมายเหตุ: รูปแบบการวนแบบไม่ทำงานใน Windows (และอาจไม่เกิดจากการขาดการรองรับแบบการหมุนแบบ libavfilter ใน Windows) ดังนั้นหากคุณทำเช่นนี้ใน Windows คุณจะต้องเปลี่ยนชื่อไฟล์เพื่อให้มีหมายเลขตามลำดับ และไม่มีช่องว่าง

คุณสามารถเปลี่ยนชื่อพวกเขาด้วยบรรทัดคำสั่ง Powershell ง่าย ๆ :

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName “Base$x”; $x++ }

นี้จะกลับfile1.jpg file2.jpg... file10.jpgซึ่งถ้าคุณจัดเรียงตามลำดับตัวอักษรจะจบลงfile1.jpg, file10.jpg...file2.jpg
Stib

ไม่ควรที่จะเป็นฐาน $ x.jpg ตามที่เป็นอยู่คุณได้เปลี่ยนชื่อของฉันทั้งหมดและทำลายนามสกุลไฟล์
Katastic Voyage

5

วิธีที่ดีกว่าในการเปลี่ยนชื่อด้วย PowerShell (เก็บรักษาลำดับ):

dir *.jpg | %{$x=0} {Rename-Item $_ -NewName "Base$($x.tostring('000000')).jpg"; $x++ }

ไม่dirเสมอกลับไฟล์เรียงตามตัวอักษร? จะปลอดภัยกว่าหรือไม่หากจะเพิ่มsort-objectการผสมลงไป
stib
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.