ffmpeg concat ใช้งานไม่ได้กับพา ธ สัมบูรณ์


14

ฉันต้องใช้ concat กับพา ธ สัมบูรณ์ แต่ดูเหมือนจะไม่ทำงาน ในเอกสารมันบอกว่ามันควรจะทำงาน ใครมีความคิดว่าจะทำให้มันทำงานอย่างไร ffmpeg Doc

ไม่ทำงานเนื่องจากดูเหมือนจะผนวกไดเรกทอรีไฟล์ข้อความลงในพา ธ ไฟล์

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

ฉันใช้ Windows 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 ภายใต้ windows ซึ่งเน้นในคำตอบของฉันคือ
Leon

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เพื่อบอกว่าไม่ควรมีการเข้ารหัสอีกครั้งเท่านั้น นอกจากนี้นี่คือdemuxer ที่ต่อกัน สิ่งนี้มีความยืดหยุ่น แต่ไม่ต้องการไฟล์อินพุต 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'

นี่คือสิ่งที่ตรงกันข้าม:
หนึ่งไดรฟ์ภายใน
หนึ่งไดรฟ์ USB ภายนอก
หนึ่งไดรฟ์เครือข่ายหนึ่งในเครื่อง windows อื่นในโดเมนเดียวกัน

การใช้คำสั่งคือ:

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

คุณได้รับข้อผิดพลาดเนื่องจากคำสั่งของคุณผิด ดูคำตอบ
Rajib

1
คำตอบนี้ใช้ได้กับเวอร์ชั่น ffmpeg N-90173, Win10, CMD เฉพาะเมื่อพารามิเตอร์ -i ไม่มีเครื่องหมายคำพูดเดี่ยวและไม่ใช้เครื่องหมายทับ
ซ้ายขวา

2

แจ้งให้ทราบล่วงหน้า; บน Windows, ถ้าคุณกำลังใช้ concat กับ textfile เป็นเส้นทางที่อยู่ในความต้องการ textfile ที่จะเทียบกับเส้นทางออก

เช่น

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
Leon

2

คำตอบของ @ Ericให้คำแนะนำที่สำคัญเพื่อให้เส้นทางแบบเต็มในการป้อนข้อมูล demater concat (คุณต้องให้-safe 0ตัวเลือกเพื่อ ffmpeg) อย่างไรก็ตามภายใต้ Windows, ffmpeg ของ demuxer concat ไม่ถูกต้องจัดการแน่นอน / เส้นทางเต็มรูปแบบที่เริ่มต้นด้วยชื่อดิสก์ แม้ว่ามันจะรับรู้พา ธ เต็มรูปแบบในการตรวจสอบความปลอดภัยได้อย่างถูกต้อง แต่ก็ตีความผิดเส้นทางดังกล่าวเป็นญาติ (เพราะพวกเขาไม่ได้เริ่มต้นด้วยเครื่องหมายทับ) เมื่อเปิดไฟล์ เนื่องจากพา ธ ที่ไม่ใช่แบบสัมบูรณ์สัมพันธ์กับตำแหน่งของสคริปต์อินพุต concat demuxer จึงffmpegเป็นการเตรียมพา ธ ของส่วนหลังไปยังพา ธ ไฟล์ หากอาร์กิวเมนต์บรรทัดคำสั่ง concat script ไม่มีตัวคั่นพา ธ ไฟล์ใด ๆ (เช่นเป็นเพียงชื่อไฟล์) ปัญหาจะถูกปิดบัง

ภาพประกอบ:

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:มันควรจะทำงานได้ฉันคิดว่า

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