Скрипты для видео

фото и видео в посте — собственные

Чтобы не потерялось и чтобы не искать долго.

Часть работы с видео можно пройти вообще без монтажной программы. Достаточно лишь немножко бесплатного софта.
Сразу скажу, что не касаюсь здесь avisynth, в котором, кажется, можно сделать вообще всё, но я в него лезу обычно от безысходности.

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

Сначала простое, хардкор оставим напоследок.


Перекодировать видео, чтобы и размер небольшой, и качество смотрибельное, чтобы не стыдно было:

Скачиваем ffmpeg — универсальный перекодировщик, больше пока ничего не надо. (Еще лучше его самому скомпилировать, потому что по соображениям патентной чистоты из скачиваемых версий убраны самые интересные/качественные библиотеки. Про компиляцию — ниже в «хардкоре»)

ffmpeg.exe -i входной_файл.avi выходной_файл.mp4

(Можно сунуть вообще в командную строку). На входе любой видеофайл, на выходе — перекодированный в приемлемое (по умолчанию) качество… тоже любой видеофайл. Если заменить, например, .mp4 на .mov, закодирует в формате Quicktime и так далее. Допустимые кодеки выбираются в зависимости от расширения, но можно выбрать и самому. По умолчанию нынче это стандарт: видео в h264 и звук в aac.

Но чтобы руками каждый раз имена не набирать, можно сделать командный файл:

cd %~dp0mkdir convertedFOR %%A IN (%*) DO "h:\media-autobuild_suite-master\local64\bin-video\ffmpeg.exe" -i %%A "converted/%%~nxA" pause

Скопировать и сохранить в виде файла, скажем, convert.bat
Важно — прописать путь, где у вас лежит ffmpeg (у меня h:\media-autobuild_suite-master\local64\bin-video), а дальше можно сохранить его, например, на рабочий стол и кидать в него видеофайлы мышкой, причем можно сразу много (есть ограничения на длину командной строки, если ничего не происходит, загребите мышкой файлов поменьше)
В папке, где видеофайлы, создает папку "converted" и кидает туда перекодированные.

Вот такая версия дописывает к имени файла еще "conv", чтобы не путать с исходником (следите за руками):

cd %~dp0mkdir convertedFOR %%A IN (%*) DO "h:\media-autobuild_suite-master\local64\bin-video\ffmpeg.exe" -i %%A "converted/%%~nAconv%%~xA" pause

Качеством можно манипулировать:

ffmpeg.exe -i входной_файл.avi -c:v libx264 -c:a libfdk_aac выходной_файл.mp4

-c:v показывает, каким кодеком жать видео, а -c:a — аудио. В данном случае лучшим из h264 — x264, а звук — в лучший из AAC-кодеков fdk_aac (но его может не оказаться в вашей версии ffmpeg, так что будьте внимательны. Об ошибках ffmpeg обычно внятно пишет.)

ffmpeg.exe -i входной_файл.avi -c:v libx264 -preset veryslow -crf 18 выходной_файл.mp4

…закодирует видео с «архивным» качеством и тщательно: -preset указывает на глубину анализа видео и, соответственно, скорость кодирования (линейка такая: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo. По умолчанию скорость средняя: medium. Левее быстрее, но гаже, правее медленнее, но качественнее. Про placebo понятно, что будет супермедленно, суперкачественно и визуально не отличаться от slower или veryslow). Для обычного «просмотрового» видео medium достаточно, поэтому его можно не указывать, оно по умолчанию.
-crf указывает на метод и силу сжатия видео: Constant Rate Factor (-crf) позволяет делать качество каждого кадра одинаковым (то есть при просмотре не полезут неожиданно квадраты и пятна), но поскольку оно зависит от сложности картинки (и количества шума в ней), то размерр файла немножко непредсказуем. По умолчанию -crf 23 (можно не указывать, картинка на стопкадре видно, что чуть портится, но в движении не заметно), для архивации выше -crf 18 лучше не задирать, а то размер становится конским. -crf 1 дает видео без сжатия: удобно для монтажа, но просто чудовищный размер файла. -crf 49 дает ужасающее качество.
Качеством видео можно манипулировать и по другому, чтобы оно помещалось в нужный размер, но сейчас в эти дебри лезть не стоит.

ffmpeg.exe -i входной_файл.avi -c:a libfdk_aac -cutoff 18000 -b:a 192k выходной_файл.mp4

…закодирует звук в AAC с приличным качеством: 192 килобита вместо 128 по умолчанию (хорошо для концертов, скажем) и полосой среза не в 12000 герц, а в «аудиофильские» 18000.

Ну и разумеется все это можно замешивать в батник, например:

cd %~dp0mkdir convertedFOR %%A IN (%*) DO "h:\media-autobuild_suite-master\local64\bin-video\ffmpeg.exe" -i %%A -c:v libx264 -preset veryslow -crf 18 -c:a libfdk_aac -cutoff 18000 -b:a 192k "converted/%%~nAconv%%~xA" pause


Про звук. Спустя два с половиной года после покупки аудиорекордера Tascam DR-05 Алекс догадался, почему все длинные видео приходится досихронизировать руками: это не мистические скачки/пропадания в длинных звуковых файлах, а тупо кварц в рекордере чуть быстрее, чем надо, и поэтому каждый час звук торопится на пару секунд.

Открыл монтажку, взял длинный (больше часа) видеоролик, снятый камерой одним планом, нашел звук, записанный рекордером в этом же месте, совместил начала и посмотрел, насколько разбежалось в конце.
Получилась простая математика:

372361 кадр исходник видео (в монтажке показывается количество кадров)
372325.6 кадров до этого же места в звуке
Поделил одно число на другое, получил коэффициент замедления:
1,000095078071451

Скачал sox — это такой ffmeg для звука, конвертит любое аудио в любое и позволяет им манипулировать.

Команда получилась вот такая:

sox.exe входной_звук.wav выходной_звук.wav tempo 1.000095078071451

И вот такой bat-файл (очень похожий на предыдущие):

cd %~dp0mkdir convertedFOR %%A IN (%*) DO "h:\media-autobuild_suite-master\local64\bin-audio\sox.exe" %%A "converted/%%~nAconv%%~xA" tempo 1.000095078071451pause

Кинул файлы из рекордера, получил перекодированные в папке converted. Синхронизироваться стало на ура.


Смешное применение ffmpeg: создание цейтраферного видео. (Интересно, что киношники и люди, пришедшие из видео, говорят «цейтрафер», когда хотят козырнуть знаниями, а фотографы говорят «таймлапс»)

Скажем, скачали вы вот такое крутое железнодорожное видео:

А смотреть-то его и некогда, оно ж в реальном времени. На помощь приходит ffmpeg:

ffmpeg.exe -i входное_видео.mp4 -filter:v "setpts=0.1*PTS" -filter:a "atempo=2.0,atempo=2.0,atempo=2.0,atempo=1.25" выходное_видео.mp4

…оно ускоряет все события (и не уводит звук в писк) в десять раз.
(сразу в виде батника:)

cd %~dp0mkdir convertedFOR %%A IN (%*) DO "h:\media-autobuild_suite-master\local64\bin-video\ffmpeg.exe" -i %%A -filter:v "setpts=0.1*PTS" -filter:a "atempo=2.0,atempo=2.0,atempo=2.0,atempo=1.25" "converted/%%~nxA" pause

Поскольку кино становится в десять раз короче, трех часовое видео (180 минут) превращается в достаточно разумные 18.
А 2 минуты 46 секунд превращаются в 17 секунд: