6

У меня есть самодельный DVD, который я эффективно пытаюсь вставить и перегруппировать - первоначальный автор записал его как одну длинную главу, и я хотел бы разорвать его на более мелкие части и перекодировать в новый DVD. Я скопировал DVD с помощью следующей команды:

mplayer dvd:// -dvd-device /dev/sr2 -dumpstream -dumpfile raw.vob

Я использую Gentoo Linux с версией mplayer 1.0-rc2_p20090731 (последняя версия доступна в Portage).

У меня есть список случаев, когда главы должны охватывать (например, 30:11-33:25), поэтому моей первой мыслью было разорвать весь DVD и использовать mpgtx, чтобы вырезать определенные фрагменты файла. Моя проблема заключается в том, что при запуске mpgtx -i в файле сообщается о нескольких скачках отметки времени:

Time stamps jumped from 59.753789 to 0.001622 at position 1d29800
Time stamps jumped from 204963823030450.343750 to 31.165900 at position 2d4f800
Time stamps jumped from 60.077878 to 0.001622 at position 43cc000 
Time stamps jumped from 60.024233 to 0.001622 at position 65c5000
Time stamps jumped from 204963823068631.718750 to 52.549244 at position 7fd1000

Я пытался исправить индексы, используя:

mencoder raw.vob -oac copy -ovc copy -forceidx -o fixed.vob -of mpeg

Но mpgtx по-прежнему будет сообщать о проблемах с отметкой времени. Мой непосредственный вопрос: есть ли способ взять разорванный фильм, который у меня есть, и исправить его метки времени, чтобы я мог вырезать его с помощью mpgtx? Если я смогу устранить эту проблему, создание остальной части DVD будет плавным.

Если невозможно исправить временные метки в этом файле: есть ли лучший способ скопировать небольшие фрагменты DVD-диска в отдельные файлы для последующей перекомпиляции? Мне бы очень хотелось, чтобы это было сделано в Linux, и было бы еще лучше, если бы я мог как-нибудь это написать (указать список начальных и конечных позиций, время начала и продолжительность, а также получить серию разорванных строк). файлы). При необходимости у меня также есть Mac OS X, но нет Windows.

Изменить: я нашел другое решение с участием HandBrake и ffmpeg (с помощью этого вопроса), но вопрос остается.

Редактирование еще раз: оказывается, мое другое решение не совсем сработало - звук десинхронизировался примерно на пять секунд, примерно в половине моих обрезанных миль на галлон - так что я вернулся к исходной точке. Кто-нибудь?

2 ответа2

8

FFmpeg сделает это за вас.

Ваша команда может выглядеть примерно так:

Код: ffmpeg -i input.mpg -ss 00:00:10 -t 00:00:30 out1.mpg -ss - это начальная точка в формате чч: мм: сс с начала вашего видеофайла.

-t это отрезок времени в чч: мм: сс вашего нового сегмента.

Итак, в приведенном выше примере вы начинаете через 10 секунд с начала исходного файла и заканчиваете через 30 секунд.

Если вы хотите создать несколько деталей за один проход, то должно работать следующее:

Код: ffmpeg -i input.mpg -ss 00:00:10 -t 00:00:30 out1.mpg -ss 00:00:35 -t 00:00:30 out2.mpg В этом примере первый сегмент так же, как в первом примере, но вы также создаете второй файл, начинающийся с 35 секунд и продолжительностью 30 секунд.

,

1

Однажды я взломал это вместе для получения видео с DVD-RAM:

#! /usr/bin/ruby -w

a = [0, 0x37f9800, 0xf3e1800]

filename = "input.vob"

a.each_with_index{|seq_start, i|
  if seq_start % 1024 != 0 then
    puts "Error: Blocksize doesn't match 1024"
  end

  seq_end = a[i+1]

  if seq_end then
    puts "dd if=#{filename} of=chapter#{i+1}.mpeg bs=1024 skip=#{seq_start/1024} count=#{(seq_end - seq_start)/1024}"
  else
    puts "dd if=#{filename} of=chapter#{i+1}.mpeg bs=1024 skip=#{seq_start/1024}"
  end
}

Переменная принимает значения позиции , где происходит скачок , а затем просто использует a разрезать файл на части в этих положениях. Результатом являются отдельные файлы mpeg для каждой главы, так как переход происходил всякий раз, когда запись была остановлена и перезапущена. Получающиеся в результате файлы mpeg освобождаются и могут затем обрабатываться как обычно.

Сам скрипт фактически не вызывает dd , он просто выводит команды dd необходимые для разбиения файла на части.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .