Verketten von geteilten Mediendateien mit dem „Concat-Protokoll“

Ich verwende das neueste ffmpeg (3.2.4) unter 64-Bit-Windows 10.

Meine Geräte teilen im Allgemeinen die Dateien auf, die sie auf den SD-Karten speichern, entweder mit einer Dateigrößenbeschränkung von 2G oder 4G.

Vor dem Importieren der Dateien in meine Timeline wäre es sehr praktisch, die logischen Dateien wieder zu einer physischen Datei zu verketten. Auf diese Weise habe ich keine "Teile", die zusammengehalten werden müssen, und das Anwenden von Einstellungen auf einen Clip erfordert nicht, alles in den Fortsetzungssegmenten zu duplizieren.

Natürlich sind Codec und Container stückübergreifend immer identisch.

Ich habe zuerst die WAV-Dateien ausprobiert, die ich vom Zoom H4N-Recorder bekommen habe. Ich habe es versucht:

ffmpeg -i "concat:ste-000.wav|ste-001.wav" -c copy Zoom.wav

und das Ergebnis war wieder nur der erste Teil, ohne Verkettung. Das heißt, die Datei war ca. 2GB groß, aber nicht identisch mit dem ersten Teil. Es kam keine Fehlermeldung. Ich fand es nicht seltsam, dass die Informationen, die zu Beginn des Laufs angezeigt wurden, nur die erste Datei zeigten, da die Teile im Format identisch sein sollen, sodass nur eine erschnüffelt werden muss, um dies herauszufinden.

Die letzten Ausgabezeilen (siehe unten) zeigen, dass die Medienzeit dieselbe ist wie im ersten Teil (1:02).

Also, ich denke, es funktioniert einfach nicht mit WAV. Die Dokumente, die ich gelesen habe, sind ziemlich vage. Aber es gibt auch keinerlei Fehler .

Dann habe ich es mit MOV-Dateien von der Canon-Kamera probiert.

Auch hier gab es keinen Fehler, aber das Ergebnis war nur die (ungefähre) Größe der ersten Datei, die bei diesem Gerät 4 GB beträgt. Und die für die Ausgabedatei angegebene Zeit von etwa 18 Minuten ist nur die des ersten Segments. Es hat sie nicht verkettet!

Stimmt etwas mit der Dokumentation nicht oder ist veraltet? Funktioniert es aus irgendeinem Grund nicht unter Windows (ich würde denken, dass das Einfügen in Anführungszeichen verhindern sollte, dass die Pipe-Zeichen ein Problem darstellen), da es in allen Fällen den Befehl nach der ersten Datei einfach zu ignorieren scheint.


Am Ende habe ich stattdessen den concat-Demuxer verwendet, der gut funktioniert hat, aber nicht so einfach ist, da ich die Dateien nicht einfach auf der Befehlszeile benennen kann.

Warum funktioniert die „einfache“ Form nicht? Genauer gesagt, warum gibt es keinen Fehler, obwohl alle außer der ersten Datei ignoriert werden?


[\\OORT\Media\Video-work\2017\April\29 UNT\original]ffmpeg -i "concat:ste-000.wav|ste-001.wav" -c copy Zoom.wav
ffmpeg Version 3.2.4 Copyright (c) 2000-2017 die FFmpeg-Entwickler
  gebaut mit gcc 6.3.0 (gcc)
  Aufbau:--disable-static --enable-shared --enable-gpl --enable-version3 --enable-d3d11va --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopus - -enable-librtmp --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable- libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-zlib--enable-zlib--enable-zlib
  libavutil 55.34.101 / 55.34.101
  libavcodec 57.64.101 / 57.64.101
  libavformat 57.56.101 / 57.56.101
  libavdevice 57. 1.100 / 57. 1.100
  libavfilter 6.65.100 / 6.65.100
  libswscale 4.2.100 / 4.2.100
  libswresample 2. 3.100 / 2. 3.100
  libpostproc 54. 1.100 / 54. 1.100
Geschätztes Kanallayout für Eingangsstrom Nr. 0.0: Stereo
Eingabe #0, wav, von 'concat:ste-000.wav|ste-001.wav':
  Metadaten:
    encoded_by : ZOOM Handy Recorder H4n
    Datum: 2008-01-01
    Erstellungszeit: 04:46:57
    Zeitbezug: 1652832000
    Codierungsverlauf : A=PCM,F=96000,W=24,M=Stereo,T=ZOOM Handy Recorder H4n
  Dauer: 01:02:06.51, Bitrate: 8696 kb/s
    Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Hz, Stereo, s32 (24 Bit), 4608 kb/s
Ausgabe #0, wav, zu 'Zoom.wav':
  Metadaten:
    ITCH : ZOOM Handy Recorder H4n
    ICRD: 2008-01-01
    Codierungsverlauf : A=PCM,F=96000,W=24,M=Stereo,T=ZOOM Handy Recorder H4n
    Zeitbezug: 1652832000
    ISFT: Lavf57.56.101
    Stream #0:0: Audio: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Hz, Stereo (24 Bit), 4608 kb/s
Stream-Mapping:
  Stream #0:0 -> #0:0 (Kopie)
Drücken Sie [q] zum Stoppen, [?] für Hilfe
Größe = 2096160 kB Zeit = 01:02:06,50 Bitrate = 4608,0 kbit/s Geschwindigkeit = 15,6x
Video:0kB Audio:2096160kB Untertitel:0kB andere Streams:0kB globale Header:0kB Muxing-Overhead: 0,000007%
[P:\video-out]\\OORT\Media\Video-work\2017\April\29 UNT\original
[\\OORT\Media\Video-work\2017\April\29 UNT\original]ffmpeg -i "concat:MVI_7945.MOV|MVI_7946.MOV" -c copy p:MVI_7945-6.MOV
ffmpeg Version 3.2.4 Copyright (c) 2000-2017 die FFmpeg-Entwickler
  gebaut mit ⋯
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000256cae0] Doppeltes MOOV-Atom gefunden. Übersprungen
Eingabe #0, mov,mp4,m4a,3gp,3g2,mj2, aus 'concat:MVI_7945.MOV|MVI_7946.MOV':
  Metadaten:
    Erstellungszeit: 2017-04-28T20:08:24.000000Z
    Hauptmarke : qt
    Unterversion: 537331968
    com.apple.quicktime.make: Canon
    com.apple.quicktime.model: Canon EOS 70D
    com.apple.quicktime.rating.user: 0.000000
    com.apple.quicktime.Autor: John Dlugosz
    kompatible_Marken: qt CAEP
  Dauer: 00:18:25.10, Start: 0.000000, Bitrate: 35549 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 29460 kb/s, 23,98 fps, 23,98 tbr , 24.000 TB, 48.000 TB (Standard)
    Metadaten:
      Erstellungszeit: 2017-04-28T20:08:24.000000Z
      Zeitcode: 22:39:33:15
    Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, Stereo, s16, 1536 kb/s (Standard)
    Metadaten:
      Erstellungszeit: 2017-04-28T20:08:24.000000Z
      Zeitcode: 22:39:33:15
    Stream #0:2(eng): Daten: keine (tmcd / 0x64636D74), 0 kb/s (Standard)
    Metadaten:
      Erstellungszeit: 2017-04-28T20:08:24.000000Z
      Zeitcode: 22:39:33:15
Ausgabe #0, mov, zu 'p:MVI_7945-6.MOV':
  Metadaten:
    kompatible_Marken: qt CAEP
    Hauptmarke : qt
    Unterversion: 537331968
    com.apple.quicktime.make: Canon
    com.apple.quicktime.model: Canon EOS 70D
    com.apple.quicktime.rating.user: 0.000000
    com.apple.quicktime.Autor: John Dlugosz
    Encoder: Lavf57.56.101
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 29460 kb/s , 23,98 fps, 23,98 tbr, 24k tbn, 24k tbc (Standard)
    Metadaten:
      Erstellungszeit: 2017-04-28T20:08:24.000000Z
      Zeitcode: 22:39:33:15
    Stream #0:1(eng): Audio: pcm_s16le (sowt / 0x74776F73), 48000 Hz, Stereo, 1536 kb/s (Standard)
    Metadaten:
      Erstellungszeit: 2017-04-28T20:08:24.000000Z
      Zeitcode: 22:39:33:15
Stream-Mapping:
  Stream #0:0 -> #0:0 (Kopie)
  Stream #0:1 -> #0:1 (Kopie)
Drücken Sie [q] zum Stoppen, [?] für Hilfe
Frame=26496 fps=519 q=-1.0 Lsize= 4181879kB time=00:18:25.08 bitrate=31000.3kbits/s speed=21.6x
Video:3974174kB Audio:207207kB Untertitel:0kB andere Streams:0kB globale Header:0kB Muxing-Overhead: 0,011905%

Antworten (1)

Das concat-Protokoll ist für die meisten Dateiformate die falsche Wahl. Transportströme wie MPEG-TS sind eines der wenigen Formate, die auf diese Weise verkettet werden können. Alles, was diese Methode tut, ist eine grobe Anhängung jeder Eingabe an die vorherige Eingabe. Daher kann jedes Format, das ein Metadatenelement enthält, nicht auf diese Weise verkettet werden, da sich die Metadaten der anderen Dateien in der Mitte der Ausgabedatei befinden und nicht durch die Metadaten am Anfang der Datei referenziert werden.

Sie sollten stattdessen den concat-Demuxer verwenden. Erstellen Sie eine Textdatei, dh

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

und dann

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output
Ja, ich weiß, wie man das benutzt, es befindet sich auf derselben Seite, auf die ich verlinkt habe.
Wenn Sie die Dokumente erneut lesen, ist dies nach Ihrer Erklärung sinnvoll. Es ist jedoch seltsam, dass es einen anderen Effekt als „Stream Copy“ haben würde, und am meisten beunruhigend, dass es keinen Fehler gibt, aber anscheinend weiß, dass es das nicht kann, und stattdessen den Befehl stillschweigend in eine nutzlose Kopie der ersten Datei ändert .