Я извлекаю сцены из видео, используя vlc
для Linux. Если у вас его нет, используйте
apt-get install vlc
для его установки. После установки вы можете использовать вариант следующей командной строки для извлечения кадра (ов) из вашего видео. Формат изображения по умолчанию - png
, и он подходит для моих целей. Если вы настаиваете на gif
изображениях, я предлагаю установить imagemagick
для преобразования форматов изображений. Вот команда, которая извлекает кадры:
cvlc ${videofile} \
--video-filter=scene \
--vout=dummy \
--start-time=${start-sec} --stop-time=${end-sec} \
--scene-ratio=1 --scene-prefix=${prefix} \
--scene-path=${MyStorePath} \
vlc://quit
где
видеофайл
- видео в формате mp4. Возможны и другие форматы, но не проверял
start-sec
- это то место, где вы хотите, чтобы захват кадра начинался, в секундах от начала
end-sec
- это где вы хотите, чтобы захват кадра закончился в секундах от начала. Должно быть большеstart-sec
prefix
- это префикс имен файлов для захваченных изображений.
MyStorePath
- это путь, по которому вы хотите хранить захваченные изображения.
Эта команда поможет вам определить длину видео:
ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//
вывод находится в формате HH: MM: SS.xx
. чтобы преобразовать это в длину видео в секундах, я использую
l=$(ffmpeg -i ${vidfile} 2>&1 | grep Duration | cut -d ' ' -f 4 | sed s/,//)
h=$(echo $l|cut -d: -f1)
m=$(echo $l|cut -d: -f2)
s=$(echo $l|cut -d: -f3|cut -d"." -f1)
(( hh=$h*3600 ))
(( mm=$m*60 ))
(( LengthSeconds=$hh+$mm+$s ))
, на этом этапе вы можете манипулировать переменной LengthSeconds
, чтобы автоматически определять время начала и окончания. К сожалению, чтобы моя команда vlc
работала, вы должны указать временной интервал, из которого нужно извлекать кадры.
Мои первые тесты с вложенными git-репозиториями не вызвали ни одной из этих трех проблем. Вам не нужно добавлять .git
в gitignore
; содержимое всех каталогов .git
игнорируется автоматически.
Остальные файлы (например, в том же каталоге, что и .git
) могут быть зафиксированы во внешнем репозитории.
Поэтому я подумал, что etckeeper может отслеживать все файлы, в то время как история подкаталогов может записываться более тщательно в конкретных репозиториях. Эти две истории ничего не будут знать друг о друге.
Я заметил проблему только позже. Когда я фиксирую каталог, который является git-репозиторием и содержит коммиты, и я ещё не фиксировал файлы из этого каталога во внешнем репозитории, то он появляется как подпроект
. Содержимое представлено только ID коммита. gitk
, похоже, показывает его как Субмодуль
.
Это звучит так, как будто git действительно хочет распознать их как git-submodule
. Я не особенно понимаю git-submodule
, я просто знаю, что у него репутация немного запутанного.
Я также заметил, что файл .etckeeper
раздувается файлами из каталогов .git
, даже если git использует подмодули.