Войти

Показать полную графическую версию : FFmpeg - Из нескольких фотографий видеоролик с музыкой, текстами, эффектами


Dahlum
11-09-2016, 22:14
Ищу специалиста по FFmpeg

Ваше потраченное время будет c благодарностью вознаграждено.
Писать на eMail: dahlum@mail.ru

lxa85
11-09-2016, 22:20
Dahlum, "Специалист по FFmpeg" это звучит широко :)
Раскройте пожалуйста задачку пошире, чтобы друзьям и товарищам больше подробностей в личку отдать.

Dahlum
11-09-2016, 23:20
Вот что делаю. Из нескольких фотографий сделать видеоролик с музыкой и текстом.
Эту часть я уже сделал. Теперь надо сделать повеселее - с различными видеоэффектами.
Отсюда 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

DJ Mogarych
12-09-2016, 21:31
Dahlum, вот документация по FFMpeg, фильтров там невероятное количество:
https://ffmpeg.org/ffmpeg-filters.html

bredych
08-06-2017, 14:06
напоролся на какую-то глупейшую ошибку.
склеиваю серию картинок в видео, синтаксис примитивнейший -

ffmpeg -start_number 1068 -framerate 10 -i DSC_%04d.jpg video.mp4

- в результате ффмпег вместо того, чтоб согласно синтаксису подставлять вместо регекспа 4 цифры начиная с указанного старта, подставляет имя батника и собщает, что дескать, картинки с именем DSC_[имя_батника.bat].jpg не существует

Что я делаю не так?

Amigos
08-06-2017, 15:24
Что я делаю не так? » пишите батники, не пройдя урок батаники https://rsdn.org/article/winshell/batanyca.xml

ffmpeg -start_number 1068 -framerate 10 -i DSC_%04d.jpg video.mp4 »

Прежде всего, вспоминаем, что переменная %0 в bat-файле соответствует нулевому аргументу командной строки, т.е. имени самого файла.

bredych
08-06-2017, 17:16
Увы, батаникой занимался очень фрагментарно и давно

Делал по гайду, вывалившемуся с гугла первым:
https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/image_sequence

В других
https://stackoverflow.com/questions/24961127/ffmpeg-create-video-from-images
http://hamelot.io/visualization/using-ffmpeg-to-convert-a-set-of-images-into-a-video/
- тоже в качестве регекспа указывается строка %03d

как тогда синтаксис "бери 4-значный номер начиная от стартового" описать?

кстати, мануал по ффмпегу описывает точно такой же синтаксис.
[начало_имени]%03.jpg как цепочку файлов "начало_имени"+ три цифры.jpg

Если просто %d (типа число без предшествующих нолей) - то знак % игнрирует вовсе, и заявляет, что нет файла пр имени DSC_d.jpg

Busla
08-06-2017, 19:25
bredych, синтаксис верный, только он не предназначен для использования в батниках, у которых свои соглашения по синтаксису

если это одноразовая задача - просто наберите это в консоли
если сложная - стоит написать скрипт на чём-то более вменяемом, хотя бы jscript или powershell

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

bredych
09-06-2017, 00:08
собсно уже подсказали. Решение было на поверхности, но я почему-то думал, что здесь не сработает:
Знак процентов заскринивается вторым им же. Тогда параметр %04d передаётся ффмпегу, а не обрабатывается согласно бат-синтаксису как переменная %0 ака имя исполняемого файла.

зы, если б умел писать на чем-то вменяемом - писал бы :)

meZon
16-06-2017, 09:55
bredych, широко известный в узких кругах Kisa_AG на iXBT делился своим скриптом, в котором создавался промежуточный текстовый - BAT файл, - с нужным синтаксисом ffmpeg, , AviSynth, кодера neaacenc, муксера mp4box... <остальное забыл по-старости>
Просмотрите его в качестве примера "в чём разница".
У разных программ свои тараканы, а для выше упомянутых - больших тараканов. Не всегда очевидное в BAT файле, очевидно для программы, вызываемой оттуда.

bredych
17-12-2017, 02:04
пытаюсь склеить несколько отрезков с фейдин эффектом. Пользуюсь скриптом от https://video.stackexchange.com/questions/23006/how-to-concatenate-multiple-videos-with-fades-from-and-to-black-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
и то, как тестовый прогон, на 2 файлах пробую..
В итоге получаю отлуп:
Output pad "default" with type video of the filter instance "Parsed_fade_1" of fade not connected to any destination
гугл мне ничего не желает сообщать на тему того, что это значит.
В самом коде дефолтов тоже не вижу, и не понимаю, чего даже копать.

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

DJ Mogarych
17-12-2017, 19:19
bredych, пробуйте минимум команд сначала, и два файла.

Вот обсуждение похожей проблемы: https://trac.ffmpeg.org/ticket/5072

Запрос в Гугл: https://www.google.ru/search?q=ffmpeg+not+connected+to+any+destination

bredych
04-03-2020, 17:45
вопрос возник насчет версий.
Использовал до сих пор на старой машине
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


собсно вопрос: это версия глючная? Или есть какие-то нюансы в командах в зависимости от разрядности?

DJ Mogarych
06-03-2020, 19:45
Попробуйте через файл - https://trac.ffmpeg.org/wiki/Concatenate

bredych
08-03-2020, 01:16
Попробуйте через файл »
так я код и так в батнике отдаю. Просто удивило,что внезапно реакция непонятная.
Кстати, сменил найти билд на статик 4.2.2 - и поведение сменилось на ожидаемое, создало ролик примерно сходного качества и размера, за примерно впятеро меньшее время, чем на старой.

bredych
11-08-2021, 15:42
Частая проблема при склейке - несовпадение 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?

DJ Mogarych
12-08-2021, 09:04
Пишут, что можно игнорить (https://stackoverflow.com/questions/50939050/ffmpeg-combining-two-videos-that-are-same-size-but-different-sar-dar), но тогда есть риск получить растянутые или сплюснутые рожи, а ещё вариант использовать фильтр pad (https://video.stackexchange.com/questions/25335/ffmpeg-keep-different-sar-and-dar-in-multiple-videos).

bredych
15-08-2021, 03:08
а ещё вариант использовать фильтр 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:

ffmpeg -i input -vf "scale=w=1280:h=720:force_original_aspect_ratio=1,pad=1280:720- то это я делал.
Форс ориджинал сохраняет оригинальные сары, которые не совпадают от слова совсем.
Пад - это просто добавление краев под размер.
Вся та строка - это стандартные параметры, используемые мной. И это никак не отменяет проблему различных сар-ов.

bredych
02-02-2022, 01:45
где-то еще имел сохраненный скрипт восстановления sar в положение 1:1 - что-то типа sar=iw:ih или что-то в этом роде.. Но затер при переустановке линя и теперь не помню.
Может кто напомнит?

что-то в стиле этого (https://stackoverflow.com/questions/49120799/auto-aspect-on-stream-with-ffmpeg) -
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
но сильно кратче.

bredych
02-02-2022, 02:34
сам нашел

-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
ffmpeg -i test.mp4 -vf scale=w=iw:h=ih/SAR a.mp4
-vf scale=1280:720:flags=bicubic,setsar=1:1
но и первый самый краткий сработал, потому те не потребовались




© OSzone.net 2001-2012