ffmpeg concat:"不安全的文件名"

时间:2016-08-17 12:39:52

标签: ffmpeg concat

尝试将一堆mts文件转换为大型mp4文件:

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

这里有什么问题吗?什么术语&#34;不安全的文件&#34;在这种情况下意味着什么?

谢谢, 斯蒂芬

4 个答案:

答案 0 :(得分:53)

@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),现在它似乎有效。乌拉!

答案 1 :(得分:5)

要回答原因,请从https://ffmpeg.org/ffmpeg-all.html#Options-35

  

此解复用器接受以下选项:

     

safe如果设置为1,则拒绝不安全的文件路径。考虑文件路径   如果它不包含协议规范并且是相对的,则为安全   并且所有组件仅包含可移植字符中的字符   设置(字母,数字,句点,下划线和连字符)并且没有   组件开头的句点。

     

如果设置为0,则接受任何文件名。

     

默认值为1。

     如果自动探测格式,

-1等于1,否则等于0。

事实证明,find ../放在文件的前面。如果您不想使用-safe 0,请参见How to strip leading "./" in unix "find"?以获得解决方案。

答案 2 :(得分:3)

关于答案是完全正确的,我只是向您显示命令,所以您不要在其他任何地方放置-safe 0。

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

答案 3 :(得分:2)

就我而言,双引号会导致错误。

我使用pyexcel_sheet1: +------------+---------+ | Vegetables | Fruits | +------------+---------+ | tomato | banana | +------------+---------+ | corn | apple | +------------+---------+ | onion | orange | +------------+---------+ 命令,其中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 包含空格。