Der Versuch, eine Reihe von MTS-Dateien in eine große MP4-Datei zu konvertieren:
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
Irgendwelche Ideen, was hier schief geht? Was bedeutet der Begriff "unsichere Datei" in diesem Zusammenhang?
-safe 0
Vorher hinzufügen-i
. Siehe ffmpeg.org/ffmpeg-all.html#Options-31Antworten:
Die Antwort von @Mulvya (danke!) Lautet: "
-safe 0
Vorher hinzufügen-i
". Dann trat ein anderes Problem auf, beifind STREAM -name '*' -printf "file '$PWD/%p'\n"
dem der leere Pfad als erster Eintrag zurückgegeben wird. Dies wurde geändert fürfor f in ./*.wav; do echo "file '$PWD/$f'"; done
(siehe https://trac.ffmpeg.org/wiki/Concatenate ) und jetzt scheint es zu funktionieren. Hurra!quelle
find
Unterbefehl in ändernfind STREAM -type f -name '*' -printf "file '$PWD/%p'\n"
(und vergessen Sie nicht-safe 0
, den Befehl zum Befehl ffmpeg hinzuzufügen ).Um zu beantworten, warum, müssen wir die Funktionsweise der ffmpeg-Demuxer sehen, die die Multimedia-Streams aus einer Eingabedatei lesen. In diesem Fall verwenden wir "concat" mit den folgenden Optionen: (archivierte Dokumente)
Es stellt sich heraus, dass
find .
ein./
vor die Datei gestellt wird. Siehe Wie man führende "./" in Unix "find" entfernt? für Lösungen, wenn Sie nicht verwenden möchten-safe 0
.quelle
@sers Antwort ist völlig richtig Ich zeige Ihnen nur Befehl, damit Sie -safe 0 nirgendwo anders setzen.
quelle
In meinem Fall verursachen doppelte Anführungszeichen den Fehler.
Ich benutze
ffmpeg -f concat -i concat.txt -c copy output.m4a
Befehl, der dieconcat.txt
Liste der Eingabedateien enthält, um zu konkatieren.Unsicherer Dateiname (doppelte Anführungszeichen werden als Teil des Dateinamens behandelt,
-safe 0
können dies nicht beheben):Sicherer Dateiname (einfache Anführungszeichen):
Sicherer Dateiname (ohne Anführungszeichen):
Die obigen einfachen Anführungszeichen und ohne Anführungszeichen sind nur dann sicher, wenn sie nur "Buchstaben, Ziffern, Punkt (außer Präfix), Unterstrich und Bindestrich" enthalten . Der folgende allgemeine Dateiname funktioniert also nicht:
Sie brauchen noch
-safe 0
für diese Fälle.[Vorbehalt zum Zitieren und Entkommen]
Sie müssen immer
'
im Teil des Dateinamens entkommen . Der Grund dafür ist, dassfile Im' .avi
das Abschlussangebot automatisch hinzugefügt wirdIm' .avi'
, was dasselbe ist wiefile Im' .avi'
. Das letzte ungerade Anführungszeichen infile Im' .avi''''''
fügt auch schließende Anführungszeichen hinzufile Im' .avi'''''''
, so dass es keinenNo such file or directory
Fehler gibt. Ich finde dieses Phänomen heraus, weil der Platz\
nach dem Präfix mit einem einfachen Anführungszeichennicht mehrdurchgehen muss, ohne ein abschließendes Anführungszeichen hinzufügen zu müssen.Trotz oberhalb von (muss entweichen
'
durch\
und nicht zu entkommen mit"
), ist die Flucht Stil ähnlich zu schälen . Wenn der Dateiname einfache Anführungszeichen enthält, können Sie ihn entweder mit demI\'m\ .m4a
Stil (NICHT mit einfachen Anführungszeichen umgeben) oder mit dem Stil'I'\''m .m4a'
OR'I'\''m'\ '.m4a'
(umgeben mit einfachen Anführungszeichen) maskieren, jedoch weder mit'I\'m\ .m4a'
noch'I'm .m4a'
.Wenn Sie ffmpeg testen, beachten Sie, dass die Fehlermeldung in
Impossible to open
der ersten Zeile möglicherweise irreführend ist (die Datei ist vorhanden). Überprüfen Sie die zweite Zeile, die entwederNo such file or directory
(Datei nicht vorhanden) oderInvalid data found when processing input
(ungültige Mediendatei) ist.quelle