Допустим, у нас есть каталог VOB файлов с видеодиска, из которых хочется получить один файл, например, для удобства просмотра на смарт-ТВ по сети.
- Убираем с дороги файлы других расширений и VOB-файлы очень маленькой длины (единицы килобайт) - это какая-то магия видеодисков, нам они не нужны. В случае сомнений, посмотрите, что в них, с помощью видеоплеера - скорее всего, они не играются или там просто чёрный кадр. Если там короткое видео с какой-нибудь заставкой - можно оставить.
- Выявляем разрезанные по размеру последовательности файлов. Допустим, для VTS_01 есть: VTS_01_0.VOB, VTS_01_1.VOB, VTS_01_2.VOB и мы видим, что файлы с номерами 0 и 1 имеют длину ровно 1024М, а номер 2 какой-то более короткий. Это значит, что их надо склеить:
cat VTS_01_0.VOB VTS_01_1.VOB VTS_01_2.VOB > VTS_01.VOB.
Примечание: этот шаг может быть не обязателен, но иногда ffmpeg на таких нарезках на следующем шаге падает.
Исходные файлы после склейки убираем с дороги, оставляем склеенный.
- Конвертируем VOB-ы в mp4:
for X in *.VOB ; do ffmpeg -i $X -c copy $X.mp4 ; done
VOB-файлы больше не нужны, убираем в другой каталог.
- Создаём список файлов для склейки окончательного файла, вида:
file VTS_01.VOB.mp4
file VTS_02_0.VOB.mp4
file VTS_02_1.VOB.mp4
file VTS_03_1.VOB.mp4
file VTS_04_1.VOB.mp4
Можно это сделать так:
(for X in *.mp4 ; do echo "file $X"; done) > list.txt
Убедитесь, что список получился в правильном порядке, при необходимости отредактируйте.
- Склеим файлы по списку в одно видео:
ffmpeg -safe 0 -f concat -i list.txt -c copy output.mp4
Готово!
Примечание: необходимость шага 3 не проверял, обоснование не знаю