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에 버그가 있습니다. 내 대답에
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'    

두 개의 입력을 차례로 사용 -c:v copy하고 다시 인코딩 전용 조인이 필요 없다고 말하는 데 사용하십시오 . 또한 이것은 concat 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 드라이브
와 같은 도메인에있는 다른 윈도우 머신에 하나의 네트워크 드라이브

명령 사용법은 다음과 같습니다.

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
이 답변은 -i 매개 변수에 작은 따옴표가없고 슬래시를 사용하지 않는 경우에만 ffmpeg 버전 N-90173, Win10, CMD 프롬프트에서 작동합니다. -i C : \ foo \ bar \ filelist.txt
Jay Borseth

2

주의; Windows에서 텍스트 파일과 함께 concat을 사용하는 경우 텍스트 파일의 경로 는 출력 경로에 상대적 이어야 합니다 .

예 :

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의 답변 은 concat demuxer 입력에서 전체 경로를 허용하는 중요한 지침을 제공합니다 ( -safe 0ffmpeg에 옵션을 제공해야 함 ). 그러나 Windows에서 ffmpeg의 concat demuxer는 디스크 이름으로 시작하는 절대 / 전체 경로를 올바르게 처리하지 않습니다 . 보안 검사에서 전체 경로를 올바르게 인식하지만 파일을 열 때 경로가 상대 경로 (슬래시로 시작하지 않기 때문에)로 잘못 해석됩니다. 절대 경로가 아닌 경로는 concat demuxer 입력 스크립트의 위치에 상대적이므로 경로 경로가 ffmpeg파일 경로 앞에 추가됩니다. concat 스크립트 명령 행 인수에 파일 경로 구분 기호가 포함되어 있지 않으면 (즉, 파일 이름 일뿐) 문제가 숨겨집니다.

삽화:

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않지만 그렇지 않습니다 (주로 Linux를 기반으로 구축 되었지만 * nix 쉘 규칙을 따르는 경향이 있습니다). c:입력 파일의 각 줄 을로 변경하면 C:작동해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.