1

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

Теперь вместо того, чтобы вырезать все это вручную, я хочу написать скрипт, который сделает это для меня. Я знаком со сценариями оболочки, python и ruby.

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

3 ответа3

2

Однажды я написал скрипт на Ruby, который делает именно это. Вам нужен Ruby ≥1.9.2 (например, через RVM) и установлена последняя версия FFmpeg (см. Здесь, как установить из исходного кода).

  1. Мой скрипт доступен здесь: video-extract.rb

  2. Вам нужно заполнить его CSV-списком правок, наиболее важно содержащим следующие столбцы:

    • префикс (может быть пустым)
    • идентификатор видео (некоторый порядковый номер)
    • имя входного файла
    • начальная точка в HH:MM:SS.ms или секундах
    • продолжительность редактирования в HH:MM:SS.ms или секундах

    Например (обратите внимание, что столбец Out не используется):

  3. Затем настройте переменные в заголовке скрипта. Самое главное, измените 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 . Просто как тот.

0

MEncoder твой друг здесь. Это отличный инструмент для сценариев операций с видео. Я часто использую его для создания видеофайлов из отдельных кадров.

Я нашел этот сценарий Perl, который может делать именно то, что вы хотите: Video Cutter V2: вырезка видео с помощью Mencoder

0

Попробуйте ffmpeg.

Например:

ffmpeg -i original.mpg -ss 20 -t 30 newmovie.mpg

Откроет исходный видеофайл (-i original.mpg), пропустит первые 20 секунд (-ss 20) и затем сохранит 30 секунд (-t 30) в новый фильм под названием newmovie.mpg

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