Разделить видео MPEG из командной строки?

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

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

Я запускаю хинду Linux с mplayer 1.0-rc2_p20090731 версией (последнее доступное в Перевозке).

У меня есть список времен, которые главы, как предполагается, охватывают (например, 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 (со справкой от этого вопроса), но вопрос стоит.

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

6
задан 20.03.2017, 12:17

2 ответа

FFmpeg сделает это для Вас.

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

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

- t является отрезком времени в hh:mm:ss Вашего нового сегмента.

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

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

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

.

8
ответ дан 07.12.2019, 15:54

Я когда-то взломал это вместе для получения видео 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 переменная принимает значения положения, где переход происходит и затем просто использует dd нарезать файл в части в тех положениях. Результатом являются затем отдельные mpeg файлы для каждой главы, поскольку переход произошел каждый раз, когда запись была остановлена и перезапущена. Получающиеся mpeg файлы, где бесплатный переход и мог затем быть обработан, как обычно.

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

1
ответ дан 07.12.2019, 15:54

Теги

Похожие вопросы