Ответ 1
Похоже, что в последних версиях параметры немного изменились.
Чтобы использовать источники входного сигнала фильтра, вы должны:
- Задайте формат ввода для виртуального устройства libavfilter, используя:
-f lavfi
- Установите источник входного сигнала фильтра, используя флаг
-i
(не-vf
) - Предоставить аргументы как полные пары ключ-значение, например:
color=color=red
Это работает и для ffplay
, чтобы проверить ваш filtergraph: ffplay -f lavfi -i color
Примеры
В этих примерах я добавил -t 30
, чтобы указать, что я хочу только 30 секунд вывода.
Цвет (красный)
ffmpeg -f lavfi -i color=color=red -t 30 red.mp4
^ ^ ^
| | |
filter key value
Ключ может быть сокращен до его сокращенной формы: -i color=c=red
Шаблон цветовых полос SMPTE
ffmpeg -f lavfi -i smptebars -t 30 smpte.mp4
Шаблон тестового источника
ffmpeg -f lavfi -i testsrc -t 30 -pix_fmt yuv420p testsrc.mp4
Для того, чтобы это можно было надежно воспроизвести, вам может потребоваться установить формат пикселей: -pix_fmt yuv420p
По умолчанию ffmpeg будет использовать yuv444p (x264, High 4: 4: 4 Predictive), который некоторые игроки еще не могут декодировать.
Например, созданное видео вызывает сбой VLC 2.0.7 и всего лишь 30 секунд черного цвета в QuickTime Player 10.2 (Mac OS X 10.8.4).
Дополнительная информация о источнике тестирования здесь.
Источник тестирования RGB
ffmpeg -f lavfi -i rgbtestsrc -pix_fmt yuv420p -t 30 rgbtestsrc.mp4
Как и в последнем примере, это может не сработать для вас, если вы не установили формат пикселей на yuv420p, как показано.
Для потомков, здесь версия, которую я использую:
ffmpeg version 1.2.1
libavutil 52. 18.100 / 52. 18.100
libavcodec 54. 92.100 / 54. 92.100
libavformat 54. 63.104 / 54. 63.104
libavdevice 54. 3.103 / 54. 3.103
libavfilter 3. 42.103 / 3. 42.103
libswscale 2. 2.100 / 2. 2.100
libswresample 0. 17.102 / 0. 17.102
libpostproc 52. 2.100 / 52. 2.100