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?
-safe 0
antes-i
. Ver ffmpeg.org/ffmpeg-all.html#Options-31Respuestas:
La respuesta de @Mulvya (¡gracias!) Funciona: "Agregar
-safe 0
antes-i
". Luego apareció otro problema con elfind STREAM -name '*' -printf "file '$PWD/%p'\n"
que devuelve la ruta vacía como primera entrada. Cambié esto porfor f in ./*.wav; do echo "file '$PWD/$f'"; done
(ver https://trac.ffmpeg.org/wiki/Concatenate ) y ahora parece funcionar. ¡Viva!fuente
find
subcomando afind STREAM -type f -name '*' -printf "file '$PWD/%p'\n"
(y no olvide agregar el-safe 0
comando ffmpeg).Para responder por qué, necesitamos ver el funcionamiento de los demuxers de ffmpeg, que leen los flujos multimedia desde un archivo de entrada. En este caso, estamos usando "concat", con las siguientes opciones: (documentos archivados)
Resulta que
find .
pone un./
delante del archivo. Consulte ¿Cómo eliminar "./" inicial en "buscar" de Unix? para encontrar soluciones si no desea utilizar-safe 0
.fuente
La respuesta de @sers es totalmente correcta, solo le muestro el comando para que no ponga -safe 0 en ningún otro lugar.
fuente
En mi caso, las comillas dobles provocan el error.
Yo uso el
ffmpeg -f concat -i concat.txt -c copy output.m4a
comando, queconcat.txt
contiene la lista de archivos de entrada para concat.Nombre de archivo inseguro (las comillas dobles se tratan como parte del nombre de archivo,
-safe 0
no se puede arreglar esto):Nombre de archivo seguro (comillas simples):
Nombre de archivo seguro (sin comillas):
Las comillas simples anteriores y sin comillas solo son seguras si solo contienen "letras, dígitos, punto (excepto prefijo), guión bajo y guión" . Entonces, el siguiente nombre de archivo común no funcionará:
Todavía necesitas
-safe 0
esos casos.[Advertencia sobre citar y escapar]
Siempre necesita escapar
'
en la parte del nombre del archivo . la razón es porquefile Im' .avi
se agregará una cotización de cierre automáticamente aIm' .avi'
, que es lo mismo quefile Im' .avi'
. La última cita imparfile Im' .avi''''''
también se convertirá en comillas de cierre agregadasfile Im' .avi'''''''
, por lo que no tieneNo such file or directory
error. Me doy cuenta de este fenómeno porque el espacio ya no necesita escapar\
después del prefijo con comillas simples, sin tener que agregar comillas de cierre.A pesar de más arriba (debe escapar
'
por\
y no escapa con"
), el estilo de escape es similar a la cáscara . Si el nombre del archivo contiene comillas simples, puede escapar con el estiloI\'m\ .m4a
(NO entre comillas simples) o el estilo'I'\''m .m4a'
OR'I'\''m'\ '.m4a'
(entre comillas simples), pero ni de'I\'m\ .m4a'
ni'I'm .m4a'
.Cuando pruebe ffmpeg, tenga en cuenta que el mensaje de error
Impossible to open
de la primera línea puede ser engañoso (el archivo existe), debe verificar la segunda línea, que esNo such file or directory
(el archivo no existe) oInvalid data found when processing input
(archivo multimedia no válido).fuente