इनपुट के रूप में छवि फ़ाइलों के साथ ffmpeg इनपुट विकल्प के लिए स्पष्टीकरण


27

मेरे पास कुछ चित्र हैं और मैं ffmpeg के साथ एक एनिमेटेड GIF बनाना चाहूंगा छवियों के नाम इस प्रकार हैं:

837_1.png
838_1.png
...

मैं समझने की कोशिश कर रहा हूं -मैं 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

तो .. यहाँ सवाल है, कैसे उपयोग करने के लिए -मैं कमांड लाइन विकल्प ffmpeg के साथ?

स्पष्टता के लिए, मैं मैक OSX 10.8, ffmpeg संस्करण 1.2.1, zsh 4.3.11 पर हूं

जवाबों:


44

किसी भी आगे के विकल्प के बिना, ffmpeg है image2 demuxer 0. के साथ शुरू होने वाले अनुक्रम की तलाश करेगा। यह 5 के डिफ़ॉल्ट सीमा के साथ, इस सूचकांक के आसपास भी जांच करेगा (यही कारण है कि यह 0–4 श्रेणी में कोई सूचकांक के बारे में शिकायत नहीं करेगा)। प्रति दस्तावेज़ीकरण , अगर आप 837 की तरह, एक अनियंत्रित सूचकांक में शुरू करना चाहते हैं, तो आपको स्टार्ट नंबर सेट करना होगा।

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

PNG से H.264 रूपांतरण में रंग स्थान

चूंकि पीएनजी फाइलें पिक्सल का प्रतिनिधित्व करने के लिए RGB रंग स्थान का उपयोग करती हैं, H.264 में रूपांतरण YUV 4: 4: 4 (4) होगा गैर subsampled )। परिणामस्वरूप वीडियो सभी खिलाड़ियों पर उल्लेखनीय नहीं हो सकता है, विशेष रूप से गैर-एफएफएमईजी-आधारित कुछ भी नहीं। आपका खिलाड़ी केवल काले फ्रेम दिखाएगा, या संभवतः क्रैश हो जाएगा। इसे ठीक करने के लिए, पिक्सेल प्रारूप को YUV 4: 2: 0 में बदलें:

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

गुणवत्ता को नियंत्रित करने के लिए, का उपयोग करें -crf विकल्प। देखें x264 एन्कोडिंग गाइड अधिक जानकारी के लिए।

क्यों * ग्लोब काम नहीं करता है

का उपयोग न करें * एक इनपुट विकल्प के रूप में। शेल मौजूदा निर्देशिका में सभी फ़ाइलों से पहले इसका विस्तार करेगा 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 आदि का भी उपयोग करता है। हालाँकि, image2 पहचानने में विफल रहता है 200 OK यह "फ़ाइल मिली" के बराबर है, इसलिए यह खोजना बंद नहीं करता है
MSalters

आपके सुझावों को लागू करने की कोशिश करने के बाद भी मुझे वही बात मिल रही है। मेरी फाइलें नाम की हैं DSCxxxxx.jpg कहा पे xxxxx 5-अंकीय संख्या है जो शून्य से शुरू होती है (ध्यान दें मेरे पास कोई अंडरस्कोर नहीं है) फिर भी, दौड़ने के बाद ffmpeg -r 30 -start_number 04606 -i DSC%d.jpg out.mp4 मुझे उपरोक्त पोस्ट की तरह ही त्रुटि मिलती है
Anonymous

@jphollowed क्या आपने फ़ाइल नाम पैटर्न को उद्धरणों में रखा है?
slhck

25

ग्लोबिंग को निर्दिष्ट करके सक्षम किया जा सकता है -pattern_type glob विकल्प:

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

1
बहुत बेहतर तरीका :)
Gustav

2
केवल इसने मेरे लिए काम किया। इसे पाने का कोई तरीका नहीं 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
Anonymous

7

नोट: पैटर्न ग्लोबिंग विंडोज के तहत काम नहीं करता है (और विंडोज के तहत लाइबावेटर में ग्लोबिंग के लिए समर्थन की कमी के कारण कभी नहीं हो सकता है।) इसलिए, यदि आपका विंडोज के तहत ऐसा कर रहा है, तो आपको फ़ाइलों का नाम बदलना होगा ताकि वे क्रमबद्ध रूप से गिने जाएं और अंतराल के बिना।

आप एक साधारण पॉवर्सशेल कमांड लाइन के साथ उनका नाम बदल सकते हैं:

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

यह वापस आ जाएगी file1.jpg file2.jpg ... file10.jpg जो अगर आप वर्णानुक्रम में क्रमबद्ध करते हैं तो समाप्त हो जाएगा file1.jpg, file10.jpg ... file2.jpg
stib

5

पावरशेल के साथ नाम बदलने का बेहतर तरीका (ऑर्डर को संरक्षित करें):

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

कर देता है dir हमेशा वर्णानुक्रम में सॉर्ट की गई फ़ाइलों को वापस करें क्या इसे जोड़ना सुरक्षित होगा sort-object मिश्रण में?
stib
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.