пятница, 22 августа 2014 г.

Как склеить несколько видео с помощью FFMpeg

  Понадобилось мне соединить несколько видео файлов в один. Точнее говоря есть DVD-диск, в котором видео разделено на несколько VOB-файлов. А мне захотелось сделать это одним файлом.
  Сделать используя ffmpeg.

Решение

  В итоге решением этого вопроса оказалась командная строка
ffmpeg -i concat:"vts_01_1.vob|vts_01_2.vob|vts_01_3.vob" -c copy films.avi
  В которой три файлика с расширением vob сливаются в один films.avi.
  Хочу заметить, что я так и не понял, можно ли такие трюки проводить с разнородными видеофайлами или они должны быть однотипными, как в этом примере.

Работа над ошибками

  И еще один странный момент. В конце получившегося видео звук немного несовпадает с видеорядом. Примерно на секунду. Начало прекрасное, а в конце получился такой ляп.
  Возможно видео надо как-то "готовить" к слиянию. Допустим в документации на ffmpeg в разделе Concatenating using the concat protocol (file level) проведен более расширенный пример

ffmpeg -i input1.avi -qscale:v 1 intermediate1.mpg
ffmpeg -i input2.avi -qscale:v 1 intermediate2.mpg
ffmpeg -i concat:"intermediate1.mpg|intermediate2.mpg" -c copy intermediate_all.mpg
ffmpeg -i intermediate_all.mpg -qscale:v 2 output.avi

  Здесь сначала две avi-шки преобразовали в два mpg-файла. В третьей строке эти два файлика слили в один, а в четвертой вернули его в avi