it-swarm-ko.tech

ffmpeg concat : "안전하지 않은 파일 이름"

많은 mts 파일을 큰 mp4 파일로 변환하려고합니다.

[email protected]:/mnt/backupsystem/archive2/Videos/20151222/PRIVATE/AVCHD/BDMV$ ~/bin/ffmpeg-git-20160817-64bit-static/ffmpeg -v info -f concat -i <(find STREAM -name '*' -printf "file '$PWD/%p'\n") -deinterlace -r 25 -s hd720 -c:v libx264 -crf 23 -acodec copy -strict -2 ~/tmp/Videos/20151222.mp4
ffmpeg version N-81364-gf85842b-static http://johnvansickle.com/ffmpeg/  Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.4.1 (Debian 5.4.1-1) 20160803
  configuration: --enable-gpl --enable-version3 --enable-static --disable-debug --enable-libmp3lame --enable-libx264 --enable-libx265 --enable-libwebp --enable-libspeex --enable-libvorbis --enable-libvpx --enable-libfreetype --enable-fontconfig --enable-libxvid --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvo-amrwbenc --enable-gray --enable-libopenjpeg --enable-libopus --enable-libass --enable-gnutls --enable-libvidstab --enable-libsoxr --enable-frei0r --enable-libfribidi --disable-indev=sndio --disable-outdev=sndio --enable-librtmp --enable-libmfx --enable-libzimg --cc=gcc-5
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 53.100 / 57. 53.100
  libavformat    57. 46.101 / 57. 46.101
  libavdevice    57.  0.102 / 57.  0.102
  libavfilter     6. 51.100 /  6. 51.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
[concat @ 0x56054a0] Unsafe file name '/mnt/backupsystem/archive2/Videos/20151222/PRIVATE/AVCHD/BDMV/STREAM'
/dev/fd/63: Operation not permitted

어떤 아이디어가 여기서 잘못 되었습니까? 이 문맥에서 "안전하지 않은 파일"이라는 용어는 무엇을 의미합니까?

59
sers

@Mulvya (감사합니다!)의 답변은 "-safe 0 앞에 -i 추가"입니다. 그런 다음 빈 경로를 첫 번째 항목으로 반환하는 find STREAM -name '*' -printf "file '$PWD/%p'\n"에 또 다른 문제가 발생했습니다. for f in ./*.wav; do echo "file '$PWD/$f'"; done ( https://trac.ffmpeg.org/wiki/Concatenate 참조)에 대해 이것을 변경했으며 이제는 작동하는 것 같습니다. 만세!

55
sers

이유를 대답하려면 https://ffmpeg.org/ffmpeg-all.html#Options-35 에서 :

이 디먹서는 다음 옵션을 허용합니다.

safe 1로 설정하면 안전하지 않은 파일 경로를 거부하십시오. 파일 경로는 프로토콜 스펙을 포함하지 않고 상대적이며 모든 구성 요소가 휴대용 문자 세트 (문자, 숫자, 마침표, 밑줄 및 하이픈)의 문자 만 포함하며 구성 요소의 시작 부분에 마침표가없는 경우 안전한 것으로 간주됩니다.

0으로 설정하면 모든 파일 이름이 허용됩니다.

기본값은 1입니다.

형식이 자동으로 프로브 된 경우 -1은 1과 같고 그렇지 않으면 0입니다.

find .가 파일 앞에 ./을 넣습니다. -safe 0를 사용하지 않으려면 유닉스 "find"에서 선행 "./"를 제거하는 방법? 을 참조하십시오.

8
qwr

대답에 대해서는 완전히 옳습니다. 명령을 표시하므로 다른 곳에 -safe 0을 넣지 마십시오.

ffmpeg.exe -f concat -safe 0 -i "clips.txt" -c copy "video.mp4"
4
Manthan Patel

제 경우에는 큰 따옴표가 오류를 일으 킵니다.

ffmpeg -f concat -i concat.txt -c copy output.m4a에 연결할 입력 파일 목록이 포함 된 concat.txt 명령을 사용합니다.

안전하지 않은 파일 이름 (큰 따옴표) :

file "song1.m4a"
file "song2.m4a"

안전한 파일 이름 (작은 따옴표) :

file 'song1.m4a'
file 'song2.m4a'

안전한 파일 이름 (따옴표없이) :

file song1.m4a
file song2.m4a

작은 따옴표따옴표없이는 공백이없는 경우에만 작동하고 ( '/'는 괜찮음) 파일 이름/경로에 공백이 있으면 -safe 0가 필요합니다.

1
林果皞