Объединение разделенных медиафайлов с использованием «протокола объединения»

Я использую последнюю версию ffmpeg (3.2.4) в 64-битной Windows 10.

Мои устройства обычно разделяют файлы, которые они сохраняют на SD-карты, с ограничением размера файла 2G или 4G.

Прежде чем импортировать файлы на мою временную шкалу, было бы очень удобно снова объединить логические файлы в один физический файл. Таким образом, у меня нет «частей», которые нужно хранить вместе, а применение настроек к клипу не требует дублирования всего в сегментах продолжения.

Естественно, кодек и контейнер всегда будут одинаковыми во всех частях.

Сначала я попробовал файлы WAV, полученные с рекордера Zoom H4N. Я попытался:

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

и результат снова был только первой частью, без конкатенации. То есть файл был ок. Размером 2 Гб, но не идентично первой части. Не было сообщения об ошибке. Мне не показалось странным, что информация, отображаемая в начале прогона, показывала только первый файл, так как части должны быть идентичными по формату, поэтому нужно только обнюхать один, чтобы узнать.

Последние строки вывода (показаны ниже) показывают, что время мультимедиа такое же, как и в первой части (1:02).

Так что, я думаю, это просто не работает на WAV. Документы , которые я читал , довольно расплывчаты. Но и ошибки никакой нет .

Затем я попробовал это с файлами MOV с камеры Canon.

Опять же, ошибки не было, но в результате был только (приблизительный) размер первого файла, который в этом устройстве составляет 4 ГБ. И время, указанное для выходного файла, около 18 минут, относится только к первому сегменту. Это не объединило их!

Итак, что-то не так или устарело с документацией? Разве это не работает в Windows по какой-то причине (я думаю, что заключение в кавычки должно предотвратить проблему с символами вертикальной черты), потому что во всех случаях кажется, что команда просто игнорируется после первого файла.


Вместо этого я использовал демультиплексор concat , который работал очень хорошо, но не так просто, поскольку я не могу просто назвать файлы в командной строке.

Почему не работает «простая» форма? Более того, почему нет ошибки, но она игнорирует все, кроме первого файла?


[\\ООРТ\Медиа\Видео-работа\2017\Апрель\29 ЕНТ\оригинал]ffmpeg -i "concat:ste-000.wav|ste-001.wav" -c копировать Zoom.wav
ffmpeg версии 3.2.4 Copyright (c) 2000-2017 разработчики FFmpeg
  построен с помощью gcc 6.3.0 (GCC)
  конфигурация:--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
  либавутил 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
Угаданная схема расположения каналов для входного потока #0.0: стерео
Введите #0, wav, из 'concat:ste-000.wav|ste-001.wav':
  Метаданные:
    encoded_by : ZOOM Handy Recorder H4n
    дата : 2008-01-01
    время создания : 04:46:57
    время_ссылка : 1652832000
    coding_history : A=PCM,F=96000,W=24,M=стерео,T=ZOOM Handy Recorder H4n
  Продолжительность: 01:02:06.51, битрейт: 8696 кб/с
    Поток #0:0: Аудио: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Гц, стерео, s32 (24 бит), 4608 кбит/с
Вывод №0, wav, в «Zoom.wav»:
  Метаданные:
    Зуд : ZOOM Handy Recorder H4n
    МКРР : 01 января 2008 г.
    coding_history : A=PCM,F=96000,W=24,M=стерео,T=ZOOM Handy Recorder H4n
    время_ссылка : 1652832000
    ИСФТ : Лавф57.56.101
    Поток #0:0: Аудио: pcm_s24le ([1][0][0][0] / 0x0001), 96000 Гц, стерео (24 бит), 4608 кбит/с
Отображение потока:
  Поток #0:0 -> #0:0 (копировать)
Нажмите [q], чтобы остановить, [?] для помощи
размер = 2096160 КБ время = 01:02:06,50 битрейт = 4608,0 кбит/с скорость = 15,6x
видео: 0 КБ аудио: 2096160 КБ субтитры: 0 КБ другие потоки: 0 КБ глобальные заголовки: 0 КБ накладные расходы мультиплексирования: 0,000007%
[P:\видео-выход]\\ООРТ\Медиа\Видео-работа\2017\Апрель\29 ЕНТ\оригинал
[\\ООРТ\Медиа\Видео-работа\2017\Апрель\29 ЕНТ\оригинал]ffmpeg -i "concat:MVI_7945.MOV|MVI_7946.MOV" -c копировать p:MVI_7945-6.MOV
ffmpeg версии 3.2.4 Copyright (c) 2000-2017 разработчики FFmpeg
  построено с ⋯
[mov,mp4,m4a,3gp,3g2,mj2 @ 000000000256cae0] Найден дубликат MOOV Atom. Пропустил это
Введите #0, mov,mp4,m4a,3gp,3g2,mj2, из 'concat:MVI_7945.MOV|MVI_7946.MOV':
  Метаданные:
    время создания : 2017-04-28T20:08:24.000000Z
    major_brand : qt
    минорная_версия : 537331968
    com.apple.quicktime.make: Canon
    com.apple.quicktime.модель: Canon EOS 70D
    com.apple.quicktime.rating.user: 0.000000
    com.apple.quicktime.author: Джон Длугош
    совместимые_бренды: qt CAEP
  Продолжительность: 00:18:25.10, начало: 0.000000, битрейт: 35549 кбит/с
    Поток #0:0(eng): Видео: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 29460 кбит/с, 23,98 кадр/с, 23,98 tbr , 24 тыс. ТБ, 48 тыс. ТБ (по умолчанию)
    Метаданные:
      время создания : 2017-04-28T20:08:24.000000Z
      временной код: 22:39:33:15
    Поток #0:1(eng): Аудио: pcm_s16le (sowt / 0x74776F73), 48000 Гц, стерео, s16, 1536 кбит/с (по умолчанию)
    Метаданные:
      время создания : 2017-04-28T20:08:24.000000Z
      временной код: 22:39:33:15
    Поток #0:2(eng): Данные: нет (tmcd / 0x64636D74), 0 кбит/с (по умолчанию)
    Метаданные:
      время создания : 2017-04-28T20:08:24.000000Z
      временной код: 22:39:33:15
Вывод #0, mov, в 'p:MVI_7945-6.MOV':
  Метаданные:
    совместимые_бренды: qt CAEP
    major_brand : qt
    минорная_версия : 537331968
    com.apple.quicktime.make: Canon
    com.apple.quicktime.модель: Canon EOS 70D
    com.apple.quicktime.rating.user: 0.000000
    com.apple.quicktime.author: Джон Длугош
    кодировщик: Lavf57.56.101
    Поток #0:0(eng): Видео: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 29460 кбит/с , 23,98 кадров в секунду, 23,98 tbr, 24k tbn, 24k tbc (по умолчанию)
    Метаданные:
      время создания : 2017-04-28T20:08:24.000000Z
      временной код: 22:39:33:15
    Поток #0:1(eng): Аудио: pcm_s16le (sowt / 0x74776F73), 48000 Гц, стерео, 1536 кбит/с (по умолчанию)
    Метаданные:
      время создания : 2017-04-28T20:08:24.000000Z
      временной код: 22:39:33:15
Отображение потока:
  Поток #0:0 -> #0:0 (копировать)
  Поток #0:1 -> #0:1 (копия)
Нажмите [q], чтобы остановить, [?] для помощи
кадр = 26496 кадров в секунду = 519 q = -1,0 Lsize = 4181879 КБ время = 00:18:25,08 битрейт = 31000,3 кбит/с скорость = 21,6x
видео: 3974174 КБ аудио: 207207 КБ субтитры: 0 КБ другие потоки: 0 КБ глобальные заголовки: 0 КБ накладные расходы мультиплексирования: 0,011905%

Ответы (1)

Протокол concat — неправильный выбор для большинства форматов файлов. Транспортные потоки, такие как MPEG-TS, являются одним из немногих форматов, которые можно объединять таким образом. Все, что делает этот метод, — это грубое добавление каждого ввода к предыдущему вводу. Таким образом, любой формат, который имеет элемент метаданных, не может быть объединен таким образом, так как метаданные других файлов будут находиться в середине выходного файла и на них не будут ссылаться метаданные в начале файла.

Вместо этого вы должны использовать демультиплексор concat. Создайте текстовый файл, т.е.

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

а потом

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output
Да, я знаю, как это использовать, это на той же странице, на которую я дал ссылку.
Перечитывая документы, это имеет смысл после вашего объяснения. Странно, однако, что это будет иметь другой эффект, чем «потоковое копирование», и больше всего беспокоит то, что оно не выдает никаких ошибок, хотя, по-видимому, знает, что не может этого сделать, вместо этого молча изменяя команду на бесполезную копию первого файла. .