В помощь видео-любителям ( Обрабатываем видео с помощью ffmpeg )
Содержание
- 1. Информация о видео-файле
- 2. Конвертация видео-форматов
- 3. Преобразование видео в изображения
- 4. Преобразование изображений в gif-файл
- 5. Преобразование изображения в видео
- 6. Преобразование видео (размеры)
- 7. Изменение размеров видео
- 8. Изменение длительности видео
- 9. Сжатие видео
- 10. Обработка звука в видео-файле
- 11. Нарастание и затухание видео
- 12. Объединение видео-файлов в один
- 13. Изменение параметров видео
- 14. Субтитры в видео
- 15. Вращение видео
- 16. Добавление логотипа
- 17. Видео-заставка
Господа аспиранты, сегодня я предлагаю вам отвлечься от работы над своей диссертацией. “Дениза, заниматься много – вредно, очень вредно” – говорил тов. Флоридор. Что косвенно подтверждает и Золушка: “Ведь так и заболеть можно”.
В связи с тем, что “прогресс который год развивается невиданными темпами, опережая в своём развитии всех, кто развивается не такими темпами”, количество фотографов и кинооператоров на Земном шаре превысило уже несколько миллиардов человек. И у аспирантов, как не самых последних обитателей нашей планеты, наверняка скопилось немало видео-шедевров, которые они натюкали своими телефонами или, не дай Бог, видеокамерами.
Как правило, всё это кинематографическое великолепие время от времени “сливается” с телефона или другого гаджета на компьютер в предположении когда-нибудь сесть и, наконец-то, привести этот архив в божеский вид. То есть упорядочить свой “госфильмофонд”. Или сформировать из обрывочно и беспорядочно снятых самобеглых картинок что-то идейно и художественно вразумительное, что захотелось бы пересматривать в глубокой старости в окружении любимых внуков и внучек.
Для достижения этой благородной цели умные люди понапридумывали кучу разнообразного софта. Но лично я в своей работе привык использовать самодельные скрипты, решающие поставленные задачи без особых заморочек. Поэтому при обработке видео я использую, в том числе и в основном, замечательную программу “ffmpeg”1)FFmpeg – это набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах. – “одно из самых мощных и самых простых средств для манипуляций с медиафайлами и, в первую очередь, с видео”. В некоторых bat-файлах используется утилита “convert” из джентльменского набора “ImageMagick”2)ImageMagick – кроссплатформенный консольный редактор изображений, а точнее набор консольных программ..
Особой нужды петь дифирамбы программе “ffmpeg” нет. Поэтому далее я предлагаю заинтересованным лицам опробованный мной на протяжении многих лет набор bat-файлов, с помощью которых можно “провернуть” процентов девяносто всех операций с видео-файлами, необходимых в повседневной практике.
Все операции с использванием семидесяти двух батников разбиты по 17 темам. При этом можно глянуть собственно bat-файл, так и скачать его в виде zip-архива по ссылке. Все необходимые, на мой взгляд, комментарии (@rem) и разъяснения даны в тексте самих файлов. Всё это безошибочно пахало и до сих пор пашет на нескольких моих машинах с “Windows 7 Ultimate” и одной с “Windows XP”. Надобности в других операционных системах я уже не имею3) “Любезный Синичкин, убей Бог мою душу, я уже надобности в женщинах не имею. У меня многие даром служат” (содержатель театра Пустославцев, х/ф “Лев Гурыч Синичкин”), но не вижу причин почему бы всему этому рукоделию не функционировать в более старших версиях “Windows”.
Нетерпеливым господам предлагаю сразу скачать полный zip-архив со всеми 72 bat-файлами.
Желающие могут, не отходя от кассы, скачать архивы с исполняемыми файлами “ffmpeg.exe” и “convert.exe” (вместе с необходимыми xml-файлами в архиве), а также mp3-файл с 60 минутами тишины, необходимый при конвертации статичных картинок в видео-файл.
Процедура обработки какого-либо видео-файла сводится к следующему. В выбранную папку закидываете свой видео-файл, упомянутые “ffmpeg.exe”, “convert.exe” (плюс приложенные в архив xml-файлы) и “silence-3600.mp3”, а также требуемый для конкретной обработки bat-файл из архива. При необходимости открываете bat-файл в текстовом редакторе и заменяете выставленные там значения и параметры на свои. В особенности это относится к темам 6 (“Преобразование видео (размеры)”) и 7 (“Изменение размеров видео”), поскольку в этих батниках прописаны ширина и высота моих видео-файлов. Ваши видео могут иметь другие размеры. Бояться не нужно. Это органы зрения боятся, а верхние конечности делают.
Замечу, что во всех выложенных скриптах обрабатываемый видео-файл называется “input” с соответствующим расширением, а результат обработки – “output”. Поэтому перед проведением манипуляций с видео не забудьте переименовать свой шедевр, например, в “input.avi”. А уж затем запускайте соответствующий батник, тюкнув по нему. Ну, и естественно, после обработки обязательно переименуйте полученный файл, скажем, “output.mp4” в “Как я отдыхал на Мальдивах с Анжелиной Джоли.mp4”.
Другой вариант: если вы не пользовались до сих пор “ffmpeg.exe” и “convert.exe”, то можете скачать необходимые дистрибутивы: здесь и здесь. Затем нужно установить FFmpeg и ImageMagick стандартным образом, прописать в PATH (при необходимости) пути к соответствующим исполняемым файлам, и после этого спокойно запускать нужные батники в папке со своими видео-файлами.
Небольшое замечание: программа “ffmpeg.exe” довольно прожорлива по части ресурсов, поэтому при обработке видео лучше отложить на время все свои дела в сторонку. Пусть ffmpeg порезвится в вашем компьютере в гордом одиночестве.
На этом заканчиваю вводную и приглашаю “к столу” всех желающих обработать свои видео-архивы. Вскипело…
1. Информация о видео-файле
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Получение информации об avi-файле " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.avi" @rem "Выход: info_video-avi.txt" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.avi goto END @rem @rem "Если имеется файл 'info_video-avi.txt', то удаляем его" if exist info_video-avi.txt del /Q info_video-avi.txt @rem ffmpeg -i input.avi -hide_banner -vf showinfo -f mp4 -an -c:v copy -y /dev/null 2>info_video-avi.txt @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Получение информации об mp4-файле " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: info_video-mp4.txt" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'info_video-mp4.txt', то удаляем его" if exist info_video-mp4.txt del /Q info_video-mp4.txt @rem ffmpeg -i input.mp4 -hide_banner -vf showinfo -f mp4 -an -c:v copy -y /dev/null 2>info_video-mp4.txt @rem :END
2. Конвертация видео-форматов
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование avi-файла со звуком в формате AC3 " @rem "в avi-файл со звуком в mp3-формате " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.avi" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.avi goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.avi -acodec libmp3lame -vcodec copy output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование avi-файла с AC3 звуком " @rem "в avi-файл со звуком в формате mp3 и видео в формате xvid" @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.avi" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.avi goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.avi -vcodec copy -vtag xvid -acodec mp3 output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование avi-файла в avi-файл (формат видео xvid) " @rem "Формат звука не меняется " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.avi" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.avi goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.avi -vcodec copy -vtag xvid output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование avi в mp4 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.avi" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.avi goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.avi -c copy -bsf:v h264_mp4toannexb output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование m2ts-файла в mp4-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.m2ts" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.m2ts goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.m2ts -vcodec copy -acodec copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mkv в avi (высокое качество) " @rem "Вариант 1 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mkv" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mkv goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.mkv -f avi -c:v libxvid -b:v 4000k -c:a libmp3lame -b:a 320k output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразования mkv-файла со звуком AC3 " @rem "в avi-файл в формате xvid и mp3-звуком " @rem "Вариант 2 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mkv" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mkv goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.mkv -vcodec copy -acodec copy ztemp1.mp4 ffmpeg -i ztemp1.mp4 -vcodec libxvid -b:v 3000k -acodec libmp3lame -ab 320k output.avi @rem @rem "Удаляем промежуточный файл" if exist ztemp1.mp4 del /Q ztemp1.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mkv-файла в avi-файл (формат divx) " @rem "Вариант 3 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mkv" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mkv goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.mkv -sn -c:a libmp3lame -ar 48000 -ab 256k -ac 2 -c:v libxvid -crf 24 -vtag DIVX -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 30 -vb 1500k output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mkv-файла с AC3 звуком " @rem "в mkv-файл со звуком в формате mp3 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mkv" @rem "Выход: output.mkv" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mkv goto END @rem @rem "Если имеется файл 'output.mkv', то удаляем его" if exist output.mkv del /Q output.mkv @rem ffmpeg -i input.mkv -acodec libmp3lame -vcodec copy output.mkv @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mkv-файла в mp4-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mkv" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mkv goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mkv -vcodec copy -acodec copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла в avi-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.avi" @rem @rem "Битрейт выходного видео 1200 кбит/с;" @rem "Битрейт выходного аудио в формате mp3 256 кбит/с" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.mp4 -vcodec libxvid -b 1200k -acodec libmp3lame -ab 256k output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла в avi-файл (видео в формате divx)" @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.avi" @rem @rem "Битрейт выходного видео в формате DIVX 1500 кбит/с" @rem "Битрейт выходного двухканального аудио в формате mp3 256 кбит/с с частотой выборки 44100 Гц" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.mp4 -vtag DIVX -f avi -vcodec mpeg4 -b:v 1500k -acodec mp3 -ab 256k -ac 2 -ar 44.1k output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла в flv-файл - Вариант 1 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.flv" @rem @rem "Качество flv определяется коэффициентом после '-crf'" @rem "Чем меньше это число, тем больше битрейт" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.flv', то удаляем его" if exist output.flv del /Q output.flv @rem ffmpeg -i input.mp4 -c:v libx264 -crf 19 output.flv @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла в flv-файл - Вариант 2 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.flv" @rem @rem -i; указание входного файла @rem -deinterlace; применить деинтерлейс к видео (устранение видимых строк на видео) @rem -ar; семпл-рейт звукового потока @rem -ab; битрейт звукового потока @rem -acodec; звуковой кодек @rem -r; частота кадров @rem -f; выходной формат (например flv) @rem -b; битрейт видео потока @rem -s; размеры видео на выходе (Ширина X Длина) @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.flv', то удаляем его" if exist output.flv del /Q output.flv @rem ffmpeg -i input.mp4 -ar 44100 -ab 256k -acodec mp3 -ac 2 -r 25 -f flv -b 800k -s 320x180 -aspect 16:9 output.flv @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла в gif-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.gif" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.gif', то удаляем его" if exist output.gif del /Q output.gif @rem @rem "Вырезаем из исходного видео фрагмент длительность 9,1 секунды" @rem "начиная с 0,34 секунды, и приводим его к размеру 480х270" ffmpeg -i input.mp4 -ss 0.34 -t 9.10 -c:v libx264 -vf scale=480:270 -crf 11 -g 1 -c:a copy ztemp1.mp4 @rem @rem "Вырезаем фрагмент размером 270:80 с позиции 170:75" @rem "270 - ширина, 80 - высота" @rem "170 - координата Х, 75 - координата Y в исходном видео" ffmpeg -i ztemp1.mp4 -filter:v "crop=270:80:170:75" ztemp2.mp4 @rem @rem "Если папки 'frames' не было, то создаём её" if not exist frames mkdir frames @rem @rem "Преобразуем видео в набор картинок в папке 'frames'" ffmpeg -i ztemp2.mp4 -vf scale=270:-1:flags=lanczos,fps=10 frames/ffout%%03d.png @rem @rem "Преобразуем набор картинок в папке 'frames' в gif-файл" convert -delay 7 -loop 0 - frames/ffout*.png output.gif @rem @rem "Удаляем промежуточные файлы" if exist ztemp* del /Q ztemp* @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4 в vob - Вариант 1 " @rem "('хорошее качество VOB') " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.vob" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.vob', то удаляем его" if exist output.vob del /Q output.vob @rem ffmpeg -i input.mp4 -c:v mpeg2video -q:v 3 -c:a ac3 -b:a 150k output.vob @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4 в vob - Вариант 2 " @rem "('хорошее качество VOB') " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.vob" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.vob', то удаляем его" if exist output.vob del /Q output.vob @rem ffmpeg -i input.mp4 -target ntsc-dvd output.vob @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4 в vob - Вариант 3 " @rem "(приемлемое качество vob-файла; размер файла увеличен) " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.vob" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.vob', то удаляем его" if exist output.vob del /Q output.vob @rem ffmpeg -i input.mp4 -vcodec mpeg2video -b 1200k -acodec ac3 -ar 48000 -ab 384k -ac 2 -g 12 -top 1 -target ntsc-dvd -aspect 4:3 output.vob @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4 в vob - Вариант 4 " @rem "(приемлемое качество vob-файла; размер файла увеличен) " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.mp4" @rem "Выход: output.vob" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.vob', то удаляем его" if exist output.vob del /Q output.vob @rem ffmpeg -i input.mp4 -vcodec mpeg2video -b 1500k -acodec mp3 -ar 44100 -ab 256k -ac 2 -g 12 -top 1 -target ntsc-dvd -aspect 4:3 output.vob @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование webm-файла в mp4-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход input.webm" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.webm goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.webm -qscale 0 output.mp4 @rem :END
3. Преобразование видео в изображения
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразуем mp4-файл в набор png-изображений " @rem "'image001.png', 'image002.png',... в папке 'frames'. " @rem "Размер изображений 270х203 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4 с размерами, например, 640x480" @rem "Выход: png-файлы размером 270х203 в папке 'frames'" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если папки 'frames' не было, то создаём её" if not exist frames mkdir frames @rem @rem "Если в папке 'frames' имеются файлы, то удаляем их" if exist frames\*.png del /Q frames\*.png @rem @rem "Преобразуем видео в набор картинок в папке 'frames'" ffmpeg -i input.mp4 -vf scale=270:-1:flags=lanczos,fps=10 frames/image%%03d.png @rem :END
4. Преобразование изображений в gif-файл
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразуем набор картинок в папке 'frames' " @rem "'image001.png', 'image002.png',... в gif-файл. " @rem "Интервал между картинками 7 мс " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: png-файлы ОДИНАКОВОГО(!) размера в папке 'frames'" @rem "Выход: output.gif" @rem @rem "Если в папке 'frames' нет png-файлов, заканчиваем обработку" if not exist frames/image*.png goto END @rem @rem "Если имеется файл 'output.gif', то удаляем его" if exist output.gif del /Q output.gif @rem @rem "Преобразуем набор картинок в gif-файл. Интервал между картинками 7 мс" convert -delay 7 -loop 0 - frames/image*.png output.gif @rem :END
5. Преобразование изображения в видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из статичного изображения 'input.png' формируем " @rem "видео-файл длительностью 13 секунд " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.png" @rem "Выход: output.mp4" @rem @rem "Если файл изображения отсутствует, то выходим" if not exist input.png goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Если нужен видео-файл другой длительности, то '13'" @rem "заменяем на другую величину" ffmpeg -loop 1 -i input.png -c:v mpeg4 -t 13 -pix_fmt yuvj420p output.mp4 @rem ^ @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из статичного изображения input.png формируем видео-файл " @rem "длительностью 5 секунд " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.png" @rem "Выход: output.mp4" @rem @rem "Если файл изображения отсутствует, то выходим" if not exist input.png goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Если нужен видео-файл другой длительности, то '5'" @rem "заменяем на другую величину" ffmpeg -loop 1 -i input.png -c:v libx264 -t 5 -pix_fmt yuv420p output.mp4 @rem ^ @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из статичного изображения input.png формируем avi-файл " @rem "длительностью 58 секунд " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.png" @rem "Выход: output.avi" @rem @rem "Частота кадров: 29.97" @rem "Размеры видео: 1920x1080" @rem "Битрейт видео: 2000 кб/с" @rem "Формат видео: xvid" @rem "Битрейт аудио: 320 кб/с" @rem "Формат аудио: mp3" @rem @rem "Если файл изображения отсутствует, то выходим" if not exist input.png goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Если нужен видео-файл другой длительности, то '00:00:58'" @rem "заменяем на другое значение" ffmpeg -loop 1 -i input.png -r 29.97 -s 1920x1080 -aspect 16:9 -t 00:00:58 -vcodec libxvid -b:v 2000k -acodec libmp3lame -ab 320k output.avi @rem ^ @rem :END
6. Преобразование видео (размеры)
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла с размерами 640x480 " @rem "в видео-файл с размерами 320x180 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Обрезаем сбоку (слева и справа) по 10 пикселей." @rem " Получаем видео-файл 620х480" ffmpeg -i input.mp4 -filter:v "crop=620:480:10:00" -c:a copy ztemp1.mp4 @rem @rem "Уменьшаем размеры видео по высоте и ширине в два раза." @rem "Получаем видео-файл 310х240" ffmpeg -i ztemp1.mp4 -vf scale=trunc(oh*a/2)*2:min(240\,iw) ztemp2.mp4 @rem @rem "Добавляем черные полосы по 5 пикселей слева и справа." @rem "Получаем видео-файл 320х240" ffmpeg -i ztemp2.mp4 -vf pad=320:240:5:0 ztemp3.mp4 @rem @rem "Обрезаем видео-файл, получая фрагмент высотой 180 пикселей, отступив сверху 16 пикселей." @rem "Получаем видео-файл 320х180" ffmpeg -i ztemp3.mp4 -filter:v "crop=320:180:00:16" -c:a copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразования mp4-файла с размерами 640x480 " @rem "в видео-файл с размерами 320x180 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Пропорции исходного видео 4:3 сохраняются." @rem "Будут автоматически добавлены черные полосы слева и справа." @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf scale=320:180 output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла с размерами 494x360 " @rem "в файл с размерами 246x180 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf scale=trunc(oh*a/2)*2:min(180\,iw) output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла с размерами 1280x720 " @rem "в видео-файл с меньшей шириной изображения " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4 с размерами 1280x720" @rem "Выход 1: output1.mp4 с размерами 960x540" @rem "Выход 2: output2.mp4 с размерами 480x270" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеются файлы 'output*.mp4', то удаляем их" if exist output*.mp4 del /Q output*.mp4 @rem ffmpeg -i input.mp4 -vf "scale=960:-1" output1.mp4 @rem ffmpeg -i input.mp4 -vf "scale=480:-1" output2.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Видео 'input.mp4' с размерами 640х480 вписываем " @rem "в центр чёрного прямоугольника 720х524 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Добавляем чёрные поля шириной 40 слева и справа; 40 = (720 - 640)/2" @rem "Добавляем чёрные поля высотой 22 сверху и снизу; 22 = (524 - 480)/2" ffmpeg -i input.mp4 -filter_complex "scale=640:480,pad=720:524:40:22" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование mp4-файла с размерами 960x720 " @rem "в mp4-файл с размерами 1280x720 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Добавляем чёрные поля шириной 160 слева и справа; 160 = (1280 - 960)/2" ffmpeg -i input.mp4 -vf scale=960:720,pad=1280:720:160:0 output.mp4 @rem :END
7. Изменение размеров видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из исходного видео-файла вырезаем фрагмент " @rem "с размерами 80x60, начиная с позиции (200, 100)" @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "80 - ширина, 60 - высота вырезаемого видео-фрагмента" @rem "200 - координата X, 100 - координата Y относительно" @rem "левого верхнего угла исходного видео" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -filter:v "crop=80:60:200:100" -c:a copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразования файла 640x480 в файл размером 640x420 " @rem "Сверху и снизу удаляются полосы по 30 пикселей высотой " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Здесь '60' - это 2*30, а '30' - высота обрезаемых полос" @rem "При необходимости обрезать полосы другой высоты заменяем" @rem "'60' на удвоенную высотоц одной полосы" @rem ffmpeg -i input.mp4 -filter:v "crop=in_w:in_h-60" -c:a copy output.mp4 @rem :END
8. Изменение длительности видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вариант 1 " @rem "Вырезаем видео-фрагмент длительностью 14 секунд, " @rem "начиная с 32-ой секунды " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -ss 00:00:32 -t 00:00:14 -async 1 output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вариант 2 " @rem "Вырезаем видео-фрагмент с 19-ой секунды по 34 секунду " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Внимание!" @rem "В данном случае начало и длительность вырезаемого фрагмента" @rem "mp4-файла нужно будет подбирать 'вручную'" @rem "Но лучше использовать 'вариант 1'" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -ss 00:00:19 -to 00:00:34 -c copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Разбиваем исходный видео-файл на части длительностью " @rem "примерно по 28 секунд " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: видео-файлы 'part0001.mp4', 'part0002.mp4',... в папке 'split'" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если папки 'split' не было, то создаём её" if not exist split mkdir split @rem @rem "Если в папке 'split' имеются файлы, то удаляем их" if exist split\*.mp4 del /Q split\*.mp4 @rem @rem "Здесь '28' - это примерная длительность одной части" @rem "Если нужны видео-фрагменты с другой длительностью," @rem "то заменяем '28' на другое значение в секундах" ffmpeg -i input.mp4 -c copy -map 0 -segment_time 28 -f segment -reset_timestamps 1 split\part%%04d.mp4 @rem ^ @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "БЫСТРОЕ удаление начального фрагмента видео в 21.4 секунды" @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "В данном примере общая длительность видео-файла" @rem "была 1 минута 16 секунд" @rem "После удаления 21.4 секунды файл на выходе будет иметь" @rem "примерную длительность 48 секунд" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -ss 00:00:21.4 -i input.mp4 -to 00:01:16 -c copy output.mp4 @rem :END
9. Сжатие видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Сжатие объёма исходного mp4-файла " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход 1: output1.mp4" @rem "Выход 2: output2.mp4" @rem @rem "Внимание!" @rem "Чтобы добиться нужного размера видео," @rem "необходимо подбирать параметр -crf" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output1.mp4', то удаляем его" if exist output1.mp4 del /Q output1.mp4 @rem @rem "Если имеется файл 'output2.mp4', то удаляем его" if exist output2.mp4 del /Q output2.mp4 @rem @rem "Пример 1: большее сжатие (-crf 28)" ffmpeg -i input.mp4 -vcodec libx264 -preset veryslow -crf 28 output1.mp4 @rem ^ @rem @rem "Пример 2: меньшее сжатие (-crf 24)" ffmpeg -i input.mp4 -vcodec libx264 -preset veryslow -crf 24 output2.mp4 @rem ^ @rem :END
10. Обработка звука в видео-файле
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вариант 1 " @rem "Вставляем звуковую дорожку в видео-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход 1: видео-файл 'output.mp4' с ранее удалённым звуковым треком" @rem "Вход 2: аудио-файл 'newtrack.mp3'" @rem "Выход: output2.mp4" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist output.mp4 goto 1 :1 if not exist newtrack.mp3 goto END @rem @rem "Если имеется файл 'output2.mp4', то удаляем его" if exist output2.mp4 del /Q output2.mp4 @rem ffmpeg -i new_sound.mp3 -i output.mp4 output2.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вариант 2 " @rem "Вставляем звуковую дорожку в видео-файл " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход 1: видео-файл 'output.mp4' с ранее удалённым звуковым треком" @rem "Вход 2: аудио-файл 'newsound.wav'" @rem "Выход: output3.mp4" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist output.mp4 goto 1 :1 if not exist newtrack.mp3 goto END @rem @rem "Если имеется файл 'output3.mp4', то удаляем его" if exist output3.mp4 del /Q output3.mp4 @rem ffmpeg -i newsound.wav -i output.mp4 output3.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вырезание фрагмента аудио-файла со 157 секунды " @rem "длительностью 75 секунд " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp3" @rem "Выход: output.mp3" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp3 goto END @rem @rem "Если имеется файл 'output.mp3', то удаляем его" if exist output.mp3 del /Q output.mp3 @rem ffmpeg -i input.mp3 -ss 00:02:37 -t 00:01:15 -c:v libx264 -c:a copy output.mp3 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вариант 1 " @rem "Извлекаем звуковую дорожку из видео-файла в mp3-формате " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp3" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp3', то удаляем его" if exist output.mp3 del /Q output.mp3 @rem ffmpeg -i input.mp4 -vn -ar 44100 -ac 2 -ab 320k -f mp3 output.mp3 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вариант 2 " @rem "Извлекаем звуковую дорожку из видео-файла в mp3-формате " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp3" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp3', то удаляем его" if exist output.mp3 del /Q output.mp3 @rem ffmpeg -i input.mp4 -q:a 0 -map a output.mp3 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразуем wav в mp3 с частотой выборки 44100 Гц " @rem "и битрейтом 320 кб/с " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.wav" @rem "Выход: output.mp3" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.wav goto END @rem @rem "Если имеется файл 'output.mp3', то удаляем его" if exist output.mp3 del /Q output.mp3 @rem ffmpeg -i input.wav -vn -ar 44100 -ac 2 -ab 320k -f mp3 output.mp3 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Удаляем звуковую дорожку из видео-файла в формате avi " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.avi" @rem "Выход: output.avi" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.avi goto END @rem @rem "Если имеется файл 'output.avi', то удаляем его" if exist output.avi del /Q output.avi @rem ffmpeg -i input.avi -c copy -an output.avi @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Удаляем звуковую дорожку из видео-файла в формате mp4 " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -c copy -an output.mp4 @rem :END
11. Нарастание и затухание видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из исходного видео-файла формируем файл " @rem "с 3-секундным нарастанием и 3-секундным затуханием " @rem "видео и аудио " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Внимание!" @rem "В этом случае нужно знать длительность исходного видео" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Пример дан для случая длительности исходного видео T = 76 секунд" @rem "и длительности нарастания/затухания D = 3 секунды" @rem "А число '73' - это разность (T - D)" @rem @rem "Если длительность вашего видео другая, то нужно определить" @rem "длительность видео в секундах 'T'" @rem "например, с помощью команды" @rem ffmpeg -i input.mp4 -hide_banner -vf showinfo -f mp4 -an -c:v copy -y /dev/null 2>video-info.txt @rem "и заменить '76' на 'T' в секундах" @rem @rem "Если нужна другая длительность нарастания/затухания 'D'" @rem "то нужно заменить '3' на 'D' в секундах." @rem "После чего заменить '73' на 'T - D' в секундах" @rem @rem "Например, определили длительность (Duration) видео." @rem "Пусть она равна 00:02:09.68 или 129 секундам." @rem "Тогда при длительности нарастания/затухания 3 секунды '73' заменяем на '126'" @rem @rem "Соответствующие 6 позиций для изменения в командной строке ниже обозначены '^'" ffmpeg -i input.mp4 -filter_complex "fade=in:st=0:d=3, fade=out:st=73:d=3; afade=in:st=0:d=3, afade=out:st=73:d=3" -c:v libx264 -c:a aac output.mp4 @rem ^ ^ ^ ^ ^ ^ @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из исходного видео-файла формируем видео-файл " @rem "с 4-секундным нарастанием/затуханием изображения " @rem "и 2-секундным нарастанием/затуханием аудио " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "В данном случае длительность видео-файла 28 секунд" @rem @rem "В командной строке ниже следующие параметры:" @rem @rem "fade=" @rem "'st=0' - начальный момент нарастания видео в секундах" @rem "'d=4' - длительность нарастания видео в секундах" @rem "'st=24' - начальный момент затухания видео в секундах" @rem "'d=4' - длительность затухания видео в секундах" @rem @rem "afade=" @rem "'st=0' - начальный момент нарастания аудио в секундах" @rem "'d=2' - длительность нарастания аудио в секундах" @rem "'st=26' - начальный момент затухания аудио в секундах" @rem "'d=2' - длительность затухания аудио в секундах" @rem @rem "24 = 28 - 4" @rem "26 = 28 - 2" @rem ffmpeg -i input.mp4 -filter_complex "[0:v]fade=in:st=0:d=4,fade=out:d=4:st=24[v];[0:a]afade=in:st=0:d=2,afade=out:d=2:st=26[a]" -map "[v]" -map "[a]" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из исходного видео-файла формируем видео-файл " @rem "с 5-секундным нарастанием и 5-секундным затуханием " @rem "видео и аудио " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Внимание!" @rem "В этом примере НЕ ТРЕБУЕТСЯ определять длительность видео-файла" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "В данном примере длительность нарастания/затухания задана равной 5 секундам." @rem @rem "Соответствующие позиции для изменения длительности нарастания/затухания" @rem "в командной строке ниже обозначены '^'" @rem @rem "Если нужно установить другую длительность нарастания/затухания," @rem "то число 5 на обозначенных позициях нужно заменить другим". @rem @rem "Параметр '-crf 20' определяет качество изображения и размер выходного файла." @rem "При '-crf 28' качество изображения будет хуже, а размер выходного файла - меньше" @rem ffmpeg -i input.mp4 -sseof -5 -copyts -i input.mp4 -lavfi "[1]fade=out:s=5:d=5[tail];[0][tail]overlay,fade=in:s=0:d=5,scale=iw:ih . ;anullsrc,atrim=0:5[audiotail];[0][audiotail]acrossfade=d=5,afade=d=5 . " -map " . " -map " . " -vsync 2 -c:v libx264 -crf 20 -preset slow -shortest output.mp4 @rem ^ ^ ^ ^ ^ ^ ^ ^ @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Из исходного видео-файла формируем видео-файл " @rem "с 5-секундным нарастанием видео и аудио " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "В данном примере длительность нарастания/затухания задана равной 2 секундам." @rem @rem "Соответствующие позиции для изменения длительности нарастания/затухания" @rem "в командной строке ниже обозначены '^'" @rem @rem "Если нужно установить другую длительность нарастания/затухания," @rem "то число 2 на обозначенных позициях нужно заменить другим". @rem ffmpeg -i input.mp4 -filter_complex "fade=in:st=0:d=3; afade=in:st=0:d=3" -c:v libx264 -c:a aac output.mp4 @rem ^ ^ @rem :END
12. Объединение видео-файлов в один
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "'Склеиваем' видео-файлы рядом, 'бок о бок' " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Внимание!" @rem "'Склеиваемые' видео-файлы должны иметь одинаковую высоту" @rem @rem "Вход 1: input-left.mp4 ('левый')" @rem "Вход 2: input-right.mp4 ('правый')" @rem "Выход: output-LR.mp4" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist input-left.mp4 goto 1 @rem :1 if not exist input-right.mp4 goto END @rem @rem "Если имеется файл 'output-LR.mp4', то удаляем его" if exist output-LR.mp4 del /Q output-LR.mp4 @rem @rem "Из двух видео-файлов - 'левого' ('left') и 'правого' ('right')" @rem "формируем общий видео-файл 'output-LR.mp4'" ffmpeg -i input-left.mp4 -i input-right.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2[v]; [0:a][1:a]amerge[a]" -map "[v]" -map "[a]" -ac 2 output-LR.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Последовательное объединение двух mp4-файлов " @rem "одинакового размера в один файл 'output-all.mp4' " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Внимание!" @rem "Объединять нужно файлы, имеющие звуковую дорожку." @rem "Пусть даже звуковая дорожка представляет собой 'тишину'." @rem @rem "Вход 1: input1.mp4" @rem "Вход 2: input2.mp4" @rem "Выход: output-all.mp4" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist input1.mp4 goto 1 @rem :1 if not exist input2.mp4 goto END @rem @rem "Если имеется файл 'output-all.mp4', то удаляем его" if exist output-all.mp4 del /Q output-all.mp4 @rem ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts @rem ffmpeg -i "concat:intermediate1.ts|intermediate2.ts" -c copy -bsf:a aac_adtstoasc output-all.mp4 @rem @rem "Ниже - пример обработки для случая 4-х входных файлов:" ::ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts ::ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts ::ffmpeg -i input3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate3.ts ::ffmpeg -i input4.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate4.ts ::ffmpeg -i "concat:intermediate1.ts|intermediate2.ts|intermediate3.ts|intermediate4.ts" -c copy -bsf:a aac_adtstoasc output-all.mp4 @rem @rem "Удаляем промежуточные файлы" if exist intermediate*.ts del /Q intermediate*.ts @rem :END
13. Изменение параметров видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразуем цветное видео в черно-белое " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf hue=s=0 -acodec copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Увеличение контраста изображения " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "При необходимости изменяем коэффициент 1.6 в большую или меньшую сторону" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf "eq=contrast=1.6" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Увеличение резкости изображения видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem @rem "Необходимо подбирать параметры фильтра 'unsharp'" ffmpeg -i input.mp4 -filter:v "unsharp=5:5:0.6:5:5:0.0" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Увеличение яркости и насыщенности видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "При необходимости изменяем коэффициенты, отвечающие" @rem "за яркость (0.08) и насыщенность (1.2) в большую или меньшую сторону" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf eq=brightness=0.08:saturation=1.2 -c:a copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Увеличение яркости изображения видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "При необходимости изменяем коэффициент 1.4 в большую или меньшую сторону" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf lutyuv=y=val*1.4 output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Увеличение яркости, насыщенности и контраста видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "При необходимости изменяем коэффициенты, отвечающие" @rem "за яркость (0.04), насыщенность (1.1) и контраст (1.4)" @rem "в большую или меньшую сторону" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf eq=brightness=0.04:saturation=1.1:contrast=1.4 -c:a copy output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Уменьшение параметра 'гамма' изображения видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf lutyuv=y=gammaval(0.6) output.mp4 @rem :END
14. Субтитры в видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Добавление субтитров к видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход 1: input.mp4" @rem "Вход 2: subtitles.ass" @rem "Выход: output.mp4" @rem @rem "Внимание! Субтитры должны быть в формате ass" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist input.mp4 goto 1 @rem :1 if not exist subtitles.ass goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf ass=subtitles.ass output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Преобразование srt-титров в формат ass " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: subtitles.srt" @rem "Выход: subtitles.ass" @rem @rem "Внимание! srt-субтитры должны быть в формате UTF-8" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist subtitles.srt goto END @rem @rem "Если имеется файл 'subtitles.ass', то удаляем его" if exist subtitles.ass del /Q subtitles.ass @rem ffmpeg -i subtitles.srt subtitles.ass @rem :END
15. Вращение видео
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Вертикальное отражение видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf hflip output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Поворот видео на 180 градусов и вертикальное отражение " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf vflip output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Поворот видео на 180 градусов " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf "transpose=2,transpose=2" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Поворот видео на 90 градусов по часовой стрелке " @rem "и вертикальное отражение " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf "transpose=3" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Поворот видео на 90 градусов по часовой стрелке " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf "transpose=1" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Поворот видео на 90 градусов против часовой стрелки " @rem "и вертикальное отражение " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf "transpose=0" output.mp4 @rem :END
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Поворот видео на 90 градусов против часовой стрелки " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход: input.mp4" @rem "Выход: output.mp4" @rem @rem "Если обрабатываемый файл отсутствует, то выходим" if not exist input.mp4 goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -vf "transpose=2" output.mp4 @rem :END
16. Добавление логотипа
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Добавление логотипа на видео " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход 1: input.mp4" @rem "Вход 2: logo.png" (файл изображения с логотипом) @rem "Выход: output.mp4" @rem @rem "380 - это координата верхнего правого угла лого по X" @rem "20 - координата верхнего правого угла лого по Y" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist input.mp4 goto 1 @rem :1 if not exist logo.png goto END @rem @rem "Если имеется файл 'output.mp4', то удаляем его" if exist output.mp4 del /Q output.mp4 @rem ffmpeg -i input.mp4 -i logo.png -filter_complex "overlay=380:20" output.mp4 @rem :END
17. Видео-заставка
@Echo off cls @rem @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem "Формирование видео-заставки из статичного изображения " @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++" @rem @rem "Вход 1: in001.png - файл изображения" @rem "Вход 2: in002.png - картинка с такими же размерами - черный фон" @rem "Вход 3: silence-3600.mp3 - 'тишина' длительностью 60 минут" @rem "Выход: output.mp4 длительностью 5 секунд и частотой кадров 30" @rem @rem "Видео-заставка с нарастанием и затуханием статичной картинки" @rem "Используются два статичных изображения одинаковых размеров" @rem @rem "Если обрабатываемые файлы отсутствуют, то выходим" if not exist in001.png goto 1 @rem :1 if not exist in002.png goto 2 @rem :2 if not exist silence-3600.mp3 goto END @rem @rem "Генерируем промежуточный видео-файл 'ztemp1.mp4'" @rem "здесь '5' - это длительность видео" @rem "здесь '30' - это частота кадров" ffmpeg -r 1/5 -i in%%03d.png -c:v libx264 -r 30 -y -pix_fmt yuv420p ztemp1.mp4 @rem @rem "Формируем 1-секундное (30 фреймов) начальное появление 'fade-in' исходной картинки" ffmpeg -i ztemp1.mp4 -y -vf fade=in:0:30 ztemp2.mp4 @rem @rem "Формируем 1-секундное затухание 'fade-out' исходной картинки" @rem "затухание 30 фреймов (1 секунда) начинается со 120 фрейма (с 4-й секунды)" ffmpeg -i ztemp2.mp4 -y -vf fade=out:120:30 ztemp3.mp4 @rem @rem "Формируем аудио-файл 'тишины' длительностью 5 секунд" ffmpeg -i silence-3600.mp3 -ss 00:00:00 -t 00:00:05 -c:v libx264 -c:a copy ztemp4.mp3 @rem @rem "Добавляем аудио-файл 'тишины' к 'немому' видео-файлу 'ztemp3.mp4'" ffmpeg -i ztemp4.mp3 -i ztemp3.mp4 output.mp4 @rem @rem "Удаляем промежуточные файлы" if exist ztemp*.mp4 del /Q ztemp*.mp4 @rem :END
Сноски
↑1 | FFmpeg – это набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах. |
↑2 | ImageMagick – кроссплатформенный консольный редактор изображений, а точнее набор консольных программ. |
↑3 | “Любезный Синичкин, убей Бог мою душу, я уже надобности в женщинах не имею. У меня многие даром служат” (содержатель театра Пустославцев, х/ф “Лев Гурыч Синичкин”) |