Однажды я написал скрипт на Ruby, который делает именно это. Вам нужен Ruby ≥1.9.2 (например, через RVM) и установлена последняя версия FFmpeg (см. Здесь, как установить из исходного кода).
Мой скрипт доступен здесь: video-extract.rb
Вам нужно заполнить его CSV-списком правок, наиболее важно содержащим следующие столбцы:
- префикс (может быть пустым)
- идентификатор видео (некоторый порядковый номер)
- имя входного файла
- начальная точка в
HH:MM:SS.ms
или секундах
- продолжительность редактирования в
HH:MM:SS.ms
или секундах
Например (обратите внимание, что столбец Out
не используется):
Затем настройте переменные в заголовке скрипта. Самое главное, измените COPY
на true
если вы хотите копировать битовый поток и не перекодировать. Также измените индекс столбцов CSV и разделитель CSV.
Не стесняйтесь улучшать сценарий или предлагать изменения (особенно если вы уже знаете Ruby). Я использовал этот сценарий очень часто и еще не сталкивался с проблемами. Единственное, чего не хватает, так это правильной поддержки звука - он просто скопирует аудиопоток, который может или не может работать в вашем случае. В случае возникновения проблем сообщите.
Если вам нужно вычислить разницу между входом и выходом, вы можете сделать это с помощью этого небольшого сценария Ruby, основанного на следующих вопросах и ответах о переполнении стека:
require "Time"
def time_diff(time1_str, time2_str)
t = Time.at( Time.parse(time2_str) - Time.parse(time1_str) )
(t - t.gmt_offset).strftime("%H:%M:%S.%L")
end
ins, outs, diffs = File.open("ins.txt"), File.open("outs.txt"), File.new("diffs.txt", "w")
inlines, outlines = [], []
ins.each { |l| inlines << l }
outs.each { |l| outlines << l }
inlines.zip(outlines).each { |ins, outs| diffs.puts time_diff(ins, outs) }
diffs.close
Вы просто создаете файл с ins.txt
и outs.txt
где каждая строка соответствует входной и выходной точке (см. Скриншот выше). Разница будет записана в diffs.txt
. Просто как тот.