unir - ffmpeg concat: "nombre de archivo inseguro"
ffmpeg unsafe file name (3)
Intentando convertir un montón de archivos mts en un gran archivo 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
¿Alguna idea de lo que sale mal aquí? ¿Qué significa el término "archivo inseguro" en este contexto?
Gracias Stephan
Acerca de la respuesta es totalmente correcta, solo le muestro el comando para que no coloque -safe 0 en ningún otro lugar.
ffmpeg.exe -f concat -safe 0 -i "clips.txt" -c copy "video.mp4"
La respuesta indicada por @Mulvya (¡gracias!) Funciona: "Agregue
-safe 0
antes de
-i
".
Luego apareció otro problema con
find STREAM -name ''*'' -printf "file ''$PWD/%p''/n"
que devuelve la ruta vacía como primera entrada.
Cambió esto por
for f in ./*.wav; do echo "file ''$PWD/$f''"; done
for f in ./*.wav; do echo "file ''$PWD/$f''"; done
for f in ./*.wav; do echo "file ''$PWD/$f''"; done
(ver
https://trac.ffmpeg.org/wiki/Concatenate
) y ahora parece funcionar.
¡Hurra!
Para responder por qué, de https://ffmpeg.org/ffmpeg-all.html#Options-35 :
Este demuxer acepta la siguiente opción:
safe
Si se establece en 1, rechazar rutas de archivos inseguras. Una ruta de archivo se considera segura si no contiene una especificación de protocolo y es relativa y todos los componentes solo contienen caracteres del conjunto de caracteres portátil (letras, dígitos, punto, guión bajo y guión) y no tienen punto al comienzo de un componente.Si se establece en 0, se acepta cualquier nombre de archivo.
El valor predeterminado es 1.
-1 es equivalente a 1 si el formato se sondeó automáticamente y 0 en caso contrario.
Resulta
find .
pone un
./
delante del archivo.
Consulte
¿Cómo eliminar los "./" iniciales en unix "find"?
para soluciones si no desea usar
-safe 0
.