Trying to convert a bunch of mts-files into a big mp4-file:
stephan@rechenmonster:/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
Any ideas what goes wrong here? What does the term "unsafe file" mean in this context?
The answer stated by @Mulvya (thank you!) works: "Add -safe 0
before -i
".
Then another problem appeared with find STREAM -name '*' -printf "file '$PWD/%p'\n"
which returns the empty path as first entry. Changed this for for f in ./*.wav; do echo "file '$PWD/$f'"; done
(see https://trac.ffmpeg.org/wiki/Concatenate) and now it seems to work. Hurray!
To answer why, from https://ffmpeg.org/ffmpeg-all.html#Options-35:
This demuxer accepts the following option:
safe
If set to 1, reject unsafe file paths. A file path is considered safe if it does not contain a protocol specification and is relative and all components only contain characters from the portable character set (letters, digits, period, underscore and hyphen) and have no period at the beginning of a component.If set to 0, any file name is accepted.
The default is 1.
-1 is equivalent to 1 if the format was automatically probed and 0 otherwise.
It turns out find .
puts a ./
in front of the file. See How to strip leading "./" in unix "find"? for solutions if you don't want to use -safe 0
.
About answer is totally right i just show you command so you don't put -safe 0 at anywhere else.
ffmpeg.exe -f concat -safe 0 -i "clips.txt" -c copy "video.mp4"
In my case, double quotes causes the error.
I use ffmpeg -f concat -i concat.txt -c copy output.m4a
command, which the concat.txt
contains list of input file to concat.
Unsafe file name (double quotes):
file "song1.m4a"
file "song2.m4a"
Safe file name (single quotes):
file 'song1.m4a'
file 'song2.m4a'
Safe file name (without quotes):
file song1.m4a
file song2.m4a
Note that single quotes and without quotes only works if no space('/' is fine), you still need -safe 0
if the filename/path contains space.
来源:https://stackoverflow.com/questions/38996925/ffmpeg-concat-unsafe-file-name