ffmpeg कॉनैट पूर्ण पथ के साथ काम नहीं करता है


14

मुझे संपूर्ण पथ के साथ कॉनैट का उपयोग करने की आवश्यकता है, लेकिन यह काम नहीं करता है। डॉक्टर में कहा गया है कि इसे काम करना चाहिए। किसी को भी यह कैसे काम करने के लिए एक विचार है? ffmpeg डॉक्टर

यह काम नहीं करता है क्योंकि यह पाठ फ़ाइल निर्देशिका को फ़ाइल पथ में जोड़ता है

Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'

मैं विंडोज 7 का उपयोग करता हूं।

ffmpegTest.txt:
file 'c:/temp/ffmpeg/01.mov'
file 'c:/temp/ffmpeg/02.mov'

"Y:/Shotgun/bin/ffmpeg/bin/ffmpeg.exe" -f concat -i "C:/temp/ffmpeg/ffmpegTest.txt" -c copy "C:/temp/ffmpeg/test.mov
ffmpeg version N-58949-g0e575c2 Copyright (c) 2000-2013 the FFmpeg developers
  built on Dec  9 2013 22:06:49 with gcc 4.8.2 (GCC)
  configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
  libavutil      52. 58.100 / 52. 58.100
  libavcodec     55. 45.100 / 55. 45.100
  libavformat    55. 22.100 / 55. 22.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     3. 92.100 /  3. 92.100
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
  libpostproc    52.  3.100 / 52.  3.100
[concat @ 0000000000337920] Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'
C:/temp/ffmpeg/ffmpegTest.txt: Invalid argument

जवाबों:


16

मैं बस ऐसे ही त्रुटि संदेशों में भाग गया। मैंने आखिरकार इसका पता लगा लिया। दो मुद्दे थे।

अंक 1:

जब कर रहे हो

ffmpeg -f concat -i <path_to_text_file> ...

path_to_text_file, फ़ॉरवर्ड स्लैश, नहीं बैकस्लैश Windows में भी। यह नियम कमांड लाइन पर वीडियो फ़ाइल पथों के लिए लागू नहीं होता है, हालांकि - केवल कमांड लाइन पर पाठ फ़ाइल पथ के लिए।

अंक 2:

आपकी पाठ फ़ाइल के भीतर सूचीबद्ध पथों की व्याख्या ffmpeg द्वारा आपके पाठ फ़ाइल के स्थान के सापेक्ष की जा रही है। (विशेष रूप से, सूचीबद्ध पथ वर्तमान कार्य निर्देशिका के सापेक्ष नहीं हैं।)

इस प्रकार, उदाहरण के लिए, यदि आप जिन वीडियो फ़ाइलों को एक साथ सम्‍मिलित करने का प्रयास कर रहे हैं, वे आपकी पाठ फ़ाइल (लेकिन वर्तमान कार्यशील निर्देशिका से भिन्न) के समान निर्देशिका में हैं, तो आपकी पाठ फ़ाइल में सूचीबद्ध पथों में केवल वीडियो फ़ाइल नाम होना चाहिए बिना किसी पूर्ववर्ती निर्देशिका के।

आशा है कि यह भविष्य में किसी की मदद करेगा।


आपकी पाठ फ़ाइल के भीतर सूचीबद्ध पथों की व्याख्या ffmpeg द्वारा आपके पाठ फ़ाइल के स्थान के सापेक्ष की जा रही है। खिड़कियों के नीचे ffmpeg में एक बग है, जो मेरे जवाब
लियोन

2

आप या तो एक टेक्स्ट फ़ाइल का उपयोग कर सकते हैं जो इनपुट फ़ाइलों की एक सूची है जैसे:

ffmpeg -f concat -i ffmpegTest.txt -c:v copy output.mov

या

आप फ़ाइलों को स्पष्ट रूप से इस तरह नाम दे सकते हैं:

ffmpeg.exe -f concat -i 'c:/temp/ffmpeg/01.mov' -i 'c:/temp/ffmpeg/02.mov' -c:v copy 'C:/temp/ffmpeg/output.mov'    

ध्यान दें कि आप एक के बाद एक 2 इनपुट का उपयोग करते हैं, और फिर -c:v copyयह कहने के लिए उपयोग करते हैं कि कोई पुन: एन्कोडिंग नहीं होना चाहिए - केवल शामिल होना। इसके अलावा, यह कॉनकैट डिमॉक्सर है । यह लचीला है, लेकिन एक ही कोडेक्स के लिए 2 इनपुट फ़ाइलों की आवश्यकता होती है।

पाठ फ़ाइल की सामग्री जैसा आपने लिखा है:

file 'c:/temp/ffmpeg/01.mov'
file 'c:/temp/ffmpeg/02.mov'

एकल उद्धरण नोट करें

सामान्य प्रारूप है:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

यह कई ड्राइव और रास्तों पर लागू होगा।

यहाँ काम करने वाली फ़ाइल का वास्तविक उदाहरण दिया गया है:

file '/run/media/rnx/New Volume1/PREMIER_OUTPUTEST/Sequence004.mpeg'
file '/home/rnx/Sequence003.mpeg'
file '/run/user/rnx/gvfs/users on edtmchn/Public/Sequence01.mpeg'

यह भर में है:
एक आंतरिक ड्राइव
वन एक्सटर्नल यूएसबी ड्राइव
वन नेटवर्क ड्राइव एक ही डोमेन पर दूसरी विंडो मशीन पर

कमांड का उपयोग है:

ffmpeg -f concat -i conc.txt -c:v copy -strict -2 output.mpeg

यह बिना किसी त्रुटि के अपेक्षित रूप से काम करता है।


1
मुझे एक फ़ाइल का उपयोग करने की आवश्यकता है क्योंकि मेरे पास बहुत सारे वीडियो हो सकते हैं। और मुझे फ़ाइल में पूर्ण पथ की आवश्यकता है
DarkPixel

मैं नहीं कर सकता, फ़ाइल एक नेटवर्क ड्राइव पर और कई फ़ोल्डर में है। मैं एक विशिष्ट निर्देशिका
DarkPixel

मेरे पास पूर्ण पथ के साथ यह त्रुटि है: 'C: / temp / ffmpeg / c: /temp/ffmpeg/01.mov' को खोलना असंभव है
DarkPixel

आपको त्रुटि मिल रही है क्योंकि आप आदेश गलत हैं। उत्तर देखें।
राजीब

1
यह उत्तर ffmpeg वर्जन N-90173, Win10, CMD प्रॉम्प्ट पर तभी काम करता है, जब -i पैरामीटर में सिंगल कोट्स न हों और फॉरवर्ड स्लैश का उपयोग न करें: -i C: \ foo \ bar \ filelist.txt
जे बोर्सेथ

2

सूचना; विंडोज पर, यदि आप टेक्स्टफाइल के साथ कॉनैट का उपयोग कर रहे हैं, तो टेक्स्टफाइल में पथ आउटपुट पथ के सापेक्ष होना चाहिए ।

उदाहरण के लिए

ffmpeg -f concat -i file.txt "C:\foo\file.mp4"

यदि आपकी फ़ाइलें निर्देशिका में स्थित हैं तो C:\temp\bar.mp4आपका टेक्स्टफ़ाइल इस तरह दिखता है:

file ..\temp\bar.mp4
...

1
गायब "चरित्र?
DavidPostill

2

उपयोग

ffmpeg.exe" -f concat -safe 0 -i fileWithAbsoluePaths.txt -c copy out.mov

आपके मामले में

"Y:/Shotgun/bin/ffmpeg/bin/ffmpeg.exe" -f concat -safe 0 -i "C:/temp/ffmpeg/ffmpegTest.txt" -c copy "C:/temp/ffmpeg/test.mov

कुंजी है -safe 0 । यह आपको txt फ़ाइल में निरपेक्ष पथ डालने की अनुमति देता है।


खिड़कियों के नीचे एक कैवेट है जो मेरे उत्तर में कवर किया गया है: superuser.com/a/1374679/598963
लियोन

2

@ एरिक का जवाब एक महत्वपूर्ण निर्देश प्रदान करता है ताकि कॉनकैट डेमूक्सर इनपुट में पूर्ण पथ की अनुमति दी जा सके (आपको ffcpeg पर -safe 0विकल्प प्रदान करना होगा )। हालाँकि, Windows के तहत, ffmpeg का कॉनैट डिमॉक्सर डिस्क के नाम से शुरू होने वाले पूर्ण / पूर्ण पथ को सही ढंग से नहीं संभालता है । हालाँकि यह अपनी सुरक्षा जाँच में पूर्ण पथ को सही तरीके से पहचानता है, यह फ़ाइल को खोलते समय ऐसे पथों को सापेक्ष के रूप में गलत व्याख्या करता है (क्योंकि वे स्लैश से शुरू नहीं होते हैं)। चूंकि गैर-निरपेक्ष पथ अवतल डिमांस्टर इनपुट स्क्रिप्ट के स्थान के सापेक्ष हैं, ffmpegउत्तरार्द्ध के पथ को फ़ाइल पथ पर प्रीपेन्ड करता है। यदि अवतरण स्क्रिप्ट कमांड लाइन तर्क में कोई फ़ाइल पथ विभाजक नहीं है (यानी एक फ़ाइल नाम है) समस्या का सामना करना पड़ता है।

उदाहरण:

concat.txt:
file 'c:/videos/01.flv'
file 'c:/videos/02.flv'


ffmpeg -f concat -safe 0 -i "C:/temp/concat.txt" -c copy "C:/temp/test.flv"
...
[concat @ 0000000000abcdef] Impossible to open 'C:/temp/c:/videos/01.flv'
C:/temp/concat.txt: Invalid argument


cd C:\temp
ffmpeg -f concat -safe 0 -i "./concat.txt" -c copy "C:/temp/test.flv"
...
[concat @ 0000000000abcdef] Impossible to open './c:/videos/01.flv'
./concat.txt: Invalid argument


ffmpeg -f concat -safe 0 -i "concat.txt" -c copy "C:/temp/test.flv"
# Works successfully!

-1

हालांकि cmd.exeमामला असंवेदनशील है, ffmpeg(मुख्य रूप से लिनक्स पर बनाया जा रहा है, यह * निक्स शैल सम्मेलनों की ओर जाता है)। यदि आप c:अपनी इनपुट फ़ाइल की प्रत्येक पंक्ति को बदलते हैं C:, तो यह काम करना चाहिए, मुझे लगता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.