webentwicklung-frage-antwort-db.com.de

ffmpeg concat: "Unsicherer Dateiname"

Der Versuch, ein paar mts-Dateien in eine große mp4-Datei umzuwandeln:

[email protected]:/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

Irgendwelche Ideen, was hier schief geht? Was bedeutet der Begriff "unsichere Datei" in diesem Zusammenhang?

59
sers

Die Antwort von @Mulvya (danke!) Funktioniert: "Add -safe 0 Vor -i ". Dann erschien ein anderes Problem mit find STREAM -name '*' -printf "file '$PWD/%p'\n", das den leeren Pfad als ersten Eintrag zurückgibt. Geändert für for f in ./*.wav; do echo "file '$PWD/$f'"; done (siehe https://trac.ffmpeg.org/wiki/Concatenate ) und jetzt scheint es zu funktionieren. Hurra!

55
sers

Um zu beantworten, warum, von https://ffmpeg.org/ffmpeg-all.html#Options-35 :

Dieser Demuxer akzeptiert die folgende Option:

safe Wenn auf 1 gesetzt, lehnen Sie unsichere Dateipfade ab. Ein Dateipfad gilt als sicher, wenn er keine Protokollspezifikation enthält und relativ ist. Alle Komponenten enthalten nur Zeichen aus dem portablen Zeichensatz (Buchstaben, Ziffern, Punkte, Unterstriche und Bindestriche) und haben am Anfang einer Komponente keinen Punkt.

Bei 0 wird jeder Dateiname akzeptiert.

Der Standardwert ist 1.

-1 entspricht 1, wenn das Format automatisch geprüft wurde, und 0, wenn nicht.

Es stellte sich heraus, dass find . Ein ./ Vor die Datei stellt. Siehe So entfernen Sie führende "./" in Unix "find"? für Lösungen, wenn Sie -safe 0 Nicht verwenden möchten.

8
qwr

Über Antwort ist völlig richtig, ich zeige Ihnen nur Befehl, damit Sie -safe 0 an keiner anderen Stelle setzen.

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

In meinem Fall verursacht doppelte Anführungszeichen den Fehler.

Ich benutze ffmpeg -f concat -i concat.txt -c copy output.m4a Befehl, den der concat.txt enthält eine Liste der zu überwachenden Eingabedateien.

nsicherer Dateiname (doppelte Anführungszeichen):

file "song1.m4a"
file "song2.m4a"

Sicherer Dateiname (einfache Anführungszeichen):

file 'song1.m4a'
file 'song2.m4a'

sicherer Dateiname (ohne Anführungszeichen):

file song1.m4a
file song2.m4a

Beachten Sie, dass einfache Anführungszeichen und ohne Anführungszeichen nur funktioniert, wenn kein Leerzeichen ('/' ist in Ordnung), Sie brauchen immer noch -safe 0 wenn der Dateiname/Pfad Leerzeichen enthält.

1
林果皞