Ich muss concat mit absolutem Pfad verwenden, aber es scheint nicht zu funktionieren. In der Dokumentation heißt es, dass es funktionieren sollte. Hat jemand eine Idee, wie es funktioniert? ffmpeg Doc
Es funktioniert nicht, weil es das Textdateiverzeichnis an den Dateipfad anzuhängen scheint
Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'
Ich benutze Windows 7.
ffmpegTest.txt:
file 'c:/temp/ffmpeg/01.mov'
file 'c:/temp/ffmpeg/02.mov'
"Y:/Shotgun/bin/ffmpeg/bin/ffmpeg.exe" -f concat -i "C:/temp/ffmpeg/ffmpegTest.txt" -c copy "C:/temp/ffmpeg/test.mov
ffmpeg version N-58949-g0e575c2 Copyright (c) 2000-2013 the FFmpeg developers
built on Dec 9 2013 22:06:49 with gcc 4.8.2 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetype --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 52. 58.100 / 52. 58.100
libavcodec 55. 45.100 / 55. 45.100
libavformat 55. 22.100 / 55. 22.100
libavdevice 55. 5.102 / 55. 5.102
libavfilter 3. 92.100 / 3. 92.100
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
[concat @ 0000000000337920] Impossible to open 'C:/temp/ffmpeg/c:/temp/ffmpeg/01.mov'
C:/temp/ffmpeg/ffmpegTest.txt: Invalid argument
Sie können entweder eine Textdatei verwenden, die eine Liste von Eingabedateien enthält, wie folgt:
ODER
Sie können die Dateien explizit wie folgt benennen:
Beachten Sie, dass Sie 2 Eingänge nacheinander verwenden und dann verwenden, um
-c:v copy
zu sagen, dass keine Neukodierung erfolgen soll - nur das Verknüpfen. Dies ist auch der Concat Demuxer . Dies ist flexibel, erfordert jedoch, dass die beiden Eingabedateien dieselben Codecs haben.Der Inhalt der Textdatei ist wie Sie geschrieben haben:
Beachten Sie die einfachen Anführungszeichen
Das generische Format ist:
Dies würde für mehrere Laufwerke und Pfade gelten.
Hier ist ein echtes Beispiel für eine Verkettungsdatei, die funktioniert:
Dies gilt für:
Ein internes Laufwerk
Ein externes USB-Laufwerk
Ein Netzwerklaufwerk auf einem anderen Windows-Computer in derselben Domäne
Der Befehl verwendet wird:
Dies funktioniert wie erwartet ohne Fehler.
quelle
Beachten; Wenn Sie unter Windows Concat mit einer Textdatei verwenden, müssen die Pfade in der Textdatei relativ zum Ausgabepfad sein .
Z.B
Wenn sich Ihre Dateien im Verzeichnis
C:\temp\bar.mp4
befinden, sieht Ihre Textdatei folgendermaßen aus:quelle
"
Charakter?Benutzen
In Ihrem Fall
Der Schlüssel ist -safe 0 . Auf diese Weise können Sie absolute Pfade in die txt-Datei einfügen.
quelle
Die Antwort von @ Eric enthält eine wichtige Anweisung, um vollständige Pfade im Concat-Demuxer-Eingang zuzulassen (Sie müssen die
-safe 0
Option für ffmpeg bereitstellen ). Unter Windows verarbeitet der concat-Demuxer von ffmpeg jedoch absolute / vollständige Pfade, die mit dem Datenträgernamen beginnen, nicht korrekt . Obwohl es bei seinen Sicherheitsüberprüfungen vollständige Pfade korrekt erkennt, interpretiert es solche Pfade beim Öffnen der Datei falsch als relativ (da sie nicht mit einem Schrägstrich beginnen). Da sich nicht absolute Pfade relativ zum Speicherort des Concat-Demuxer-Eingabeskripts befinden,ffmpeg
wird dessen Pfad dem Dateipfad vorangestellt . Wenn das Befehlszeilenargument des concat-Skripts keine Dateipfadtrennzeichen enthält (dh nur ein Dateiname ist), wird das Problem maskiert.Illustration:
quelle
Es
cmd.exe
wird zwar nicht zwischen Groß- und Kleinschreibung unterschieden,ffmpeg
aber nicht (hauptsächlich unter Linux erstellt, tendiert es zu * nix-Shell-Konventionen). Wenn Sie dasc:
in jeder Zeile Ihrer Eingabedatei in ändernC:
, sollte es funktionieren, denke ich.quelle