FFmpeg - Из нескольких фотографий видеоролик с музыкой, текстами, эффектами
Ищу специалиста по FFmpeg
Ваше потраченное время будет c благодарностью вознаграждено. Писать на eMail: dahlum@mail.ru |
Dahlum, "Специалист по FFmpeg" это звучит широко :)
Раскройте пожалуйста задачку пошире, чтобы друзьям и товарищам больше подробностей в личку отдать. |
Вот что делаю. Из нескольких фотографий сделать видеоролик с музыкой и текстом.
Эту часть я уже сделал. Теперь надо сделать повеселее - с различными видеоэффектами. Отсюда 1-й вопрос : Какие из эффектов что в списке ниже, можно реализовать с помощью FFmpeg? Appear/Disappear я так полагаю это можно и уже сделано в первой части - поставил + , а вот можно ли сделать остальные? Fotos: 01 + Appear/Disappear 02 ? Ken Burns effect in/out 03 ? Fade in/out 04 ? Crossfade 05 ? Rotate in/out 06 ? Zoom in/out 07 ? Scroll in/out from top, bottom, left, right 08 ? Curtain open/close vertical, horizontal 09 ? Furl/unfurl 10 ? Increase/decrease centered, radial 11 ? Spindle left, right 12 ? Pixelate in/out Music: 13 + Start/stop 14 ? Fade in/out 15 ? Crossfade Text: 16 + Appear/Disappear 17 ? Ken Burns effect in/out 18 ? Fade in/out 19 ? Crossfade 20 ? Rotate in/out 21 ? Zoom in/out 22 ? Scroll in/out from top, bottom, left, right 23 ? Curtain open/close vertical, horizontal 24 ? Furl/unfurl 25 ? Increase/decrease centered, radial 26 ? Spindle left, right 27 ? Pixelate in/out 28 ? Star Wars opener in/out |
Dahlum, вот документация по FFMpeg, фильтров там невероятное количество:
https://ffmpeg.org/ffmpeg-filters.html |
напоролся на какую-то глупейшую ошибку.
склеиваю серию картинок в видео, синтаксис примитивнейший - ffmpeg -start_number 1068 -framerate 10 -i DSC_%04d.jpg video.mp4 - в результате ффмпег вместо того, чтоб согласно синтаксису подставлять вместо регекспа 4 цифры начиная с указанного старта, подставляет имя батника и собщает, что дескать, картинки с именем DSC_[имя_батника.bat].jpg не существует Что я делаю не так? |
Цитата:
Цитата:
Цитата:
|
Увы, батаникой занимался очень фрагментарно и давно
Делал по гайду, вывалившемуся с гугла первым: https://en.wikibooks.org/wiki/FFMPEG...image_sequence В других https://stackoverflow.com/questions/...eo-from-images http://hamelot.io/visualization/usin...-into-a-video/ - тоже в качестве регекспа указывается строка %03d как тогда синтаксис "бери 4-значный номер начиная от стартового" описать? кстати, мануал по ффмпегу описывает точно такой же синтаксис. [начало_имени]%03.jpg как цепочку файлов "начало_имени"+ три цифры.jpg Если просто %d (типа число без предшествующих нолей) - то знак % игнрирует вовсе, и заявляет, что нет файла пр имени DSC_d.jpg |
bredych, синтаксис верный, только он не предназначен для использования в батниках, у которых свои соглашения по синтаксису
если это одноразовая задача - просто наберите это в консоли если сложная - стоит написать скрипт на чём-то более вменяемом, хотя бы jscript или powershell либо можете каждый раз обходить частные случаи - изобретать другие регулярки, экранировать символы и т.п. |
собсно уже подсказали. Решение было на поверхности, но я почему-то думал, что здесь не сработает:
Знак процентов заскринивается вторым им же. Тогда параметр %04d передаётся ффмпегу, а не обрабатывается согласно бат-синтаксису как переменная %0 ака имя исполняемого файла. зы, если б умел писать на чем-то вменяемом - писал бы :) |
bredych, широко известный в узких кругах Kisa_AG на iXBT делился своим скриптом, в котором создавался промежуточный текстовый - BAT файл, - с нужным синтаксисом ffmpeg, , AviSynth, кодера neaacenc, муксера mp4box... <остальное забыл по-старости>
Просмотрите его в качестве примера "в чём разница". У разных программ свои тараканы, а для выше упомянутых - больших тараканов. Не всегда очевидное в BAT файле, очевидно для программы, вызываемой оттуда. |
пытаюсь склеить несколько отрезков с фейдин эффектом. Пользуюсь скриптом от https://video.stackexchange.com/ques...ack-in-between
Правда слегка допиленным, Код:
ffmpeg -i pol.mp4 -i fol.mp4 -i pol.mp4 -i fol.mp4 -filter_complex "[0:v] fade=t=in:st=0:d=1, fade=t=out:st=3:d=1 [0v]; [0:a] afade=t=in:st=0:d=1, afade=t=out:st=3:d=1 [0a]; [1:v] fade=t=in:st=0:d=1, fade=t=out:st=55:d=1 [1v]; [1:a] afade=t=in:st=0:d=1, afade=t=out:st=55:d=1 [1a]; [2:v] fade=t=in:st=0:d=1, fade=t=out:st=3:d=1 [2v]; [2:a] afade=t=in:st=0:d=1, afade=t=out:st=3:d=1 [2a]; [3:v] fade=t=in:st=0:d=1, fade=t=out:st=55:d=1 [3v]; [3:a] afade=t=in:st=0:d=1, afade=t=out:st=55:d=1 [3a]; [0:v] [0:a] [1v] [1a] [2:v] [2:a] [3v] [3a] concat=n=4:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" -c:v libx264 -c:a aac test.mp4 В итоге получаю отлуп: Код:
Output pad "default" with type video of the filter instance "Parsed_fade_1" of fade not connected to any destination В самом коде дефолтов тоже не вижу, и не понимаю, чего даже копать. зы, может существует более человеческий способ это делать, не правя код под каждый набор файлов отдельно и не ища длительность каждого ролика для ввода значений фейдаута? |
bredych, пробуйте минимум команд сначала, и два файла.
Вот обсуждение похожей проблемы: https://trac.ffmpeg.org/ticket/5072 Запрос в Гугл: https://www.google.ru/search?q=ffmpe...ny+destination |
вопрос возник насчет версий.
Использовал до сих пор на старой машине ffmpeg-20190711-2601eef-win32-static поставил на новой мощной (под вин10/64) - ffmpeg-20200227-9и22254-win64-static итог - то, что на старой кодировалось где-то минут 40 и выдало в результате 345МВ ролик, на новой кодировалось почти сутки и выдало 15ГВ ролик, который к тому же не играло. Код - тот же самый, примитивно склейка нескольких фрагментов в 1280*720, набор файлов тот же самый, запустил на обеих чисто для опыта - сравнить скорость. Скрытый текст
ffmpeg -i 00.mp4 -i 01.mp4 -i 02.mp4 -i 03.mp4 -i 04.mp4 -i 05.mp4 -i 07.mp4 -i 08.mp4 -i 09.mp4 -i 10.mp4 -i 11.mp4 -i 12.mp4 -i 13.mp4 -i 14.mp4 -i 15.mp4 -i 16.mp4 -i 17.mp4 -i 18.mp4 -i 19.mp4 -i 20.mp4 -i 21.mp4 -i 22.mp4 -i 23.mp4 -i 24.mp4 -i 25.mp4 -i 26.mp4 -i 27.mp4 -i 28.mp4 -i 29.mp4 -i 30.mp4 -i 31.mp4 -filter_complex "[0:v:0] [0:a:0] [1:v:0] [1:a:0] concat=n=30:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" output.mp4
собсно вопрос: это версия глючная? Или есть какие-то нюансы в командах в зависимости от разрядности? |
Попробуйте через файл - https://trac.ffmpeg.org/wiki/Concatenate
|
Цитата:
Кстати, сменил найти билд на статик 4.2.2 - и поведение сменилось на ожидаемое, создало ролик примерно сходного качества и размера, за примерно впятеро меньшее время, чем на старой. |
Частая проблема при склейке - несовпадение sar.
пишет. что sar фрагмента к примеру 5 (4185:4186) не совпадает с sar фрагмента 0 Отдельно перекодируя через -vf "setsar=sar=1/1,setdar=dar=16/9" - всё отлично. Но это лишняя перекодировка, что отражается на качестве. А вместе с ресайзом - -vf "scale=-1:720:force_original_aspect_ratio=1,setsar=sar=1/1,setdar=dar=16/9, и т.д. - этот сар меняет, но на очередное непредсказуемое значение. Не 1/1 Собсно вопрос: Как убедить в пределах одной перекодировки нормально выставлять 1/1? |
Пишут, что можно игнорить, но тогда есть риск получить растянутые или сплюснутые рожи, а ещё вариант использовать фильтр pad.
|
Цитата:
Код:
A more generic command that will work for all input file aspect ratios will use force_original_aspect_ratio=1 as an option to scale: Форс ориджинал сохраняет оригинальные сары, которые не совпадают от слова совсем. Пад - это просто добавление краев под размер. Вся та строка - это стандартные параметры, используемые мной. И это никак не отменяет проблему различных сар-ов. |
где-то еще имел сохраненный скрипт восстановления sar в положение 1:1 - что-то типа sar=iw:ih или что-то в этом роде.. Но затер при переустановке линя и теперь не помню.
Может кто напомнит? что-то в стиле этого - Код:
ffmpeg -i udp://localhost:1234 -vf "scale=iw*sar:ih:eval=frame,setsar=1,pad=max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2:eval=frame" -aspect 16:9 -update 1 img.jpg |
сам нашел
-vf "setsar=sar=1/1,setdar=dar=16/9" Еще есть варианты Код:
ffmpeg -i file.mp4 -vf "scale=iw*sar:ih , pad=max(iw\,ih*(16/9)):ow/(16/9):(ow-iw)/2:(oh-ih)/2" -aspect 16:9 file.mp4 |
Время: 06:43. |
Время: 06:43.
© OSzone.net 2001-