ffmpeg concat không hoạt động với đường dẫn tuyệt đối


14

Tôi cần sử dụng concat với đường dẫn tuyệt đối, nhưng dường như nó không hoạt động. Trong tài liệu nó nói nó nên hoạt động. Bất cứ ai có một ý tưởng làm thế nào để làm cho nó hoạt động? ffmpeg Đốc

Nó không hoạt động vì dường như nối thêm thư mục tệp văn bản vào đường dẫn tệp

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

Tôi sử dụng 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

Câu trả lời:


16

Tôi chỉ chạy vào các thông báo lỗi tương tự. Cuối cùng tôi đã tìm ra nó. Có hai vấn đề.

Vấn đề 1:

Khi làm

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

những path_to_text_filephải sử dụng dấu gạch chéo, không gạch chéo ngược, thậm chí trong Windows. Quy tắc này dường như không áp dụng cho các đường dẫn tệp video trên dòng lệnh - chỉ dành cho đường dẫn tệp văn bản trên dòng lệnh.

Vấn đề 2:

Các đường dẫn được liệt kê trong tệp văn bản của bạn được ffmpeg diễn giải là có liên quan đến vị trí của tệp văn bản của bạn. (Đặc biệt, các đường dẫn được liệt kê không liên quan đến thư mục làm việc hiện tại.)

Do đó, ví dụ: nếu các tệp video bạn đang cố ghép nối với nhau nằm trong cùng thư mục với tệp văn bản của bạn (nhưng khác với thư mục làm việc hiện tại), thì các đường dẫn được liệt kê trong tệp văn bản của bạn chỉ đơn giản là tên tệp video không có bất kỳ thư mục trước.

Mong rằng điều này sẽ giúp ai đó trong tương lai.


Các đường dẫn được liệt kê trong tệp văn bản của bạn được ffmpeg diễn giải là có liên quan đến vị trí của tệp văn bản của bạn. Có một lỗi trong ffmpeg dưới cửa sổ, được nhấn mạnh trong câu trả lời của tôi
Leon

2

Bạn có thể sử dụng tệp văn bản là danh sách các tệp đầu vào như vậy:

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

HOẶC LÀ

Bạn có thể đặt tên rõ ràng cho các tệp như vậy:

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

Lưu ý rằng bạn sử dụng 2 đầu vào lần lượt, sau đó sử dụng -c:v copyđể nói rằng không nên mã hóa lại - chỉ tham gia. Ngoài ra, đây là demuxer concat . Điều này là linh hoạt, nhưng không yêu cầu 2 tệp đầu vào phải có cùng codec.

Nội dung của tệp văn bản là như bạn đã viết:

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

Lưu ý các trích dẫn đơn

Định dạng chung là:

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

Điều đó sẽ áp dụng cho nhiều ổ đĩa và đường dẫn.

Đây là một ví dụ thực tế về một tập tin nối hoạt động:

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'

Đây là trên:
Một ổ đĩa
trong Một ổ USB ngoài
Một ổ đĩa mạng trên một máy tính windows khác trên cùng một miền

Lệnh sử dụng là:

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

Điều này hoạt động như mong đợi mà không có bất kỳ lỗi nào.


1
Tôi cần sử dụng một tập tin vì tôi có thể có rất nhiều video. Và tôi cần đường dẫn tuyệt đối trong tệp
DarkPixel

Tôi không thể, tập tin nằm trên một ổ đĩa mạng và trong nhiều thư mục. Tôi không thể buộc một thư mục cụ thể
DarkPixel

Tôi gặp lỗi này với đường dẫn tuyệt đối: Không thể mở 'C: / temp / ffmpeg / c: /temp/ffmpeg/01.mov'
DarkPixel 17/214

Bạn đang nhận được lỗi vì lệnh của bạn là sai. Xem câu trả lời.
Rajib

1
Câu trả lời này hoạt động trên phiên bản ffmpeg N-90173, nhắc nhở Win10, CMD chỉ khi tham số -i KHÔNG có dấu ngoặc đơn và KHÔNG sử dụng dấu gạch chéo về phía trước: -i C: \ foo \ bar \ filelist.txt
Jay Borseth

2

Để ý; trên Windows, nếu bạn đang sử dụng concat với textfile, các đường dẫn trong textfile cần phải liên quan đến đường dẫn đầu ra .

Ví dụ

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

Nếu các tệp của bạn được đặt trong thư mục, tệp C:\temp\bar.mp4văn bản của bạn trông như thế này:

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

1
Thiếu "nhân vật?
DavidPostill

2

Sử dụng

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

Trong trường hợp của bạn

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

Chìa khóa là- an toàn 0 . Điều đó cho phép bạn đặt đường dẫn tuyệt đối trong tệp txt.


Dưới cửa sổ có một cảnh báo được bao phủ trong câu trả lời của tôi: superuser.com/a/1374679/598963
Leon

2

Câu trả lời của @ Eric cung cấp một hướng dẫn quan trọng để cho phép các đường dẫn đầy đủ trong đầu vào demuxer concat (bạn phải cung cấp -safe 0tùy chọn cho ffmpeg). Tuy nhiên, trong Windows, bộ giải mã concat của ffmpeg không xử lý chính xác các đường dẫn tuyệt đối / đầy đủ bắt đầu bằng tên đĩa . Mặc dù nó nhận ra chính xác các đường dẫn đầy đủ trong kiểm tra bảo mật của nó, nhưng nó hiểu sai các đường dẫn đó là tương đối (vì chúng không bắt đầu bằng dấu gạch chéo) khi mở tệp. Vì các đường dẫn không tuyệt đối có liên quan đến vị trí của tập lệnh đầu vào trình điều khiển concat, ffmpegnên thêm đường dẫn của đường dẫn sau vào đường dẫn tệp. Nếu đối số dòng lệnh tập lệnh concat không chứa bất kỳ dấu tách đường dẫn tệp nào (nghĩa là chỉ là một tên tệp), vấn đề sẽ được che dấu.

Hình minh họa:

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

Mặc dù cmd.exekhông phân biệt chữ hoa chữ thường, nhưng ffmpegkhông (được xây dựng chủ yếu trên linux, nó có xu hướng hướng tới các quy ước vỏ * nix). Nếu bạn thay đổi c:trên mỗi dòng của tệp đầu vào của bạn C:, nó sẽ hoạt động, tôi nghĩ vậy.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.