Essayer de convertir un tas de fichiers mts en un gros fichier 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
Des idées ce qui ne va pas ici? Que signifie le terme "fichier non sécurisé" dans ce contexte?
La réponse indiquée par @Mulvya (merci!) Fonctionne: "Ajouter -safe 0
avant -i
". Puis un autre problème est apparu avec find STREAM -name '*' -printf "file '$PWD/%p'\n"
qui renvoie le chemin vide comme première entrée. Changé cela pour for f in ./*.wav; do echo "file '$PWD/$f'"; done
_ (voir https://trac.ffmpeg.org/wiki/Concatenate ) et maintenant, cela semble fonctionner. Hourra!
Pour répondre pourquoi, de https://ffmpeg.org/ffmpeg-all.html#Options-35 :
Ce démultiplexeur accepte l'option suivante:
safe
Si défini sur 1, refuse les chemins d'accès aux fichiers non sécurisés. Un chemin de fichier est considéré comme sûr s'il ne contient pas de spécification de protocole, qu'il est relatif et que tous les composants ne contiennent que des caractères du jeu de caractères portable (lettres, chiffres, point, trait de soulignement et trait d'union) et n'ont pas de période au début d'un composant.Si défini sur 0, tout nom de fichier est accepté.
La valeur par défaut est 1.
-1 est équivalent à 1 si le format a été automatiquement sondé et à 0 sinon.
Il s'avère find .
met un ./
devant le fichier. Voir Comment éliminer les "./" dans "trouver"? == pour des solutions si vous ne voulez pas utiliser -safe 0
.
À propos de la réponse est tout à fait raison je montre juste votre commande afin de ne pas mettre -safe 0 nulle part ailleurs.
ffmpeg.exe -f concat -safe 0 -i "clips.txt" -c copy "video.mp4"
Dans mon cas, guillemets doubles provoque l'erreur.
J'utilise ffmpeg -f concat -i concat.txt -c copy output.m4a
commande, que le concat.txt
contient la liste des fichiers d’entrée à concaténer.
Nom de fichier non sécurisé (guillemets):
file "song1.m4a"
file "song2.m4a"
Nom du fichier sécurisé (guillemets simples):
file 'song1.m4a'
file 'song2.m4a'
Nom du fichier sécurisé (sans guillemets):
file song1.m4a
file song2.m4a
Notez que guillemets simples et sans guillemets ne fonctionne que s'il n'y a pas d'espace ('/' convient), vous avez toujours besoin de -safe 0
_ si le nom du fichier/chemin contient de l'espace.