Как создать чисто белое фоновое видео с помощью ffmpeg?

1757
cdlvcdlv

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

Чтобы создать видео 3s 640x480 (по умолчанию 25 кадров в секунду):

ffmpeg -f lavfi -i color=white:640x480:d=3 -f matroska - | ffplay -autoexit - 

Это небольшой прямоугольник вывода на странице суперпользователя (который в моем браузере отображается белым цветом).

Первый вывод на страницу суперпользователя

Ища ответ, я пришел к этому вопросу . Объяснение предоставлено Mulvya:

Заполнение - RGB 235, который является верхним пределом в обычном видео. Итак, видеоплеер расширится до 235, чтобы показать белый цвет. - Mulvya 23 октября 15 в 17:44

Но я не нашел ни одного игрока, который показывал бы его белым . Я пробовал с ffplay, MPC-HC и VLC и пайпинг, и создание промежуточного файла.

С изображениями, как в вопросе, решение, кажется, добавляет -format rgb32опцию. Но я получаю тот же результат с

ffmpeg -f lavfi -i color=white:640x480:d=3 -format rgb32 -f matroska - | ffplay -autoexit - 

-pixel_formatОпция не работает.

Итак ... как создать чистое белое фоновое видео с помощью ffmpeg ?

0
С вашей первой командой я получаю чистый белый цвет (#FF), что подтверждается Photoshop. Я также становлюсь белым, когда выхожу на webm и играю в Firefox. Попробуйте добавить `-color_range 1` непосредственно перед` -f matroska`. Кроме того, обновите свой ffmpeg, если вы используете старую версию. Gyan 7 лет назад 1
Мои `ffplay` и` ffmpeg` - это `N-81308-g369ed11`, которые я скомпилировал в августе. Может быть, эта проблема была исправлена? `-color_range 1` ничего не меняет. cdlvcdlv 7 лет назад 0
Как насчет `ffplay -f lavfi -i color = white: 640x480: d = 3` Gyan 7 лет назад 1
Нада. То же самое. cdlvcdlv 7 лет назад 0
Какая это ОС? Gyan 7 лет назад 1
Windows XP x64, но работа `ffmpeg` должна быть такой же, как мне кажется. Я скомпилировал это изначально. cdlvcdlv 7 лет назад 0
Я также использую скомпилированную версию. В любом случае, попробуйте это со сборкой Zeranoe. Gyan 7 лет назад 1
Мне понадобится W7 или более поздняя версия, чтобы попробовать (сборки Zeranoe несовместимы с XP уже несколько месяцев). В то же время, другие идеи приветствуются. cdlvcdlv 7 лет назад 0
Выход в PNG. И попробуйте сборки [здесь] (https://sourceforge.net/projects/mplayer-win32/files/FFmpeg/git-N-82759-g1f5630a/). Gyan 7 лет назад 1
Действительно, эти сборки работают в XP. Так как им не хватает `ffplay`, я создал avi с` ffmpeg -f lavfi -i color = white: 640x480: d = 3 -color_range 1 -format rgb32 -c: v huffyuv ohavi` и проиграл позже, но результат остается 235/255. Сгенерированный PNG настоящий белый, но мне нужно исходное видео переменной длительности, потому что моя идея заключается в добавлении некоторых других входных данных в команду и использовании нескольких фильтров для добавления содержимого на заднем плане для создания выходного видео. Но я никогда не думал, что не смогу сделать этот первый шаг. Я думал, что это будет тривиально. cdlvcdlv 7 лет назад 0
Это тривиально. Не знаю, почему это не работает для вас :( Вы можете вывести на PNG в MOV, чтобы получить видео, например: `ffmpeg -f lavfi -i color = white: 640x480: d = 3 -color_range 2 -c: v png video.mov` Gyan 7 лет назад 1
Кстати, если идея заключается в том, чтобы добавить контент сверху. Вам не нужно сохранять белый холст в файл. Просто подайте его прямо на фильтры. Gyan 7 лет назад 1
Именно так. Мое намерение состоит не в том, чтобы сохранить белое видео (длительность 3 с произвольно, просто для тестирования), а использовать его в качестве исходного фона для некоторого другого контента и создать окончательное видео x264, все в одной команде. Я не включил дополнительные фильтры, которые собираюсь использовать, просто чтобы изолировать проблему. cdlvcdlv 7 лет назад 0
Какую видеокарту вы используете? Gyan 7 лет назад 1
Nvidia GeForce FX 5200 Bios 4.34.20.80.02 cdlvcdlv 7 лет назад 0
Хорошо, я помню в Панели управления Nvidia, там есть «Настроить настройку цвета видео». Что, если вы разрешите Nvidia управлять вместо видеоплеера, позволит вам установить диапазон ввода. Посмотрите, что это говорит. Gyan 7 лет назад 1
Я возился с управлением NCP, но не видел разницы ни в одном игроке. Мне удалось протестировать последнюю сборку Zeranoe в W7 с теми же результатами, что и в XP. Я думаю, что сделаю это с _avisynth_, потому что я обнаружил несколько проблем с моей исходной командой, использующей `ffmpeg`. Во-первых, кажется, вы не можете установить «pixel_format» в исходном фильтре «color» - это всегда «yuv420p». Во-вторых, `ffplay` всегда конвертируется в` color_range 1` ([или `2` в зависимости от документации] (https://trac.ffmpeg.org/ticket/3409#comment:7)). cdlvcdlv 7 лет назад 0
Для тестирования я создал скрипт avisynth со следующей строкой: `BlankClip (длина = 75, ширина = 640, высота = 480, fps = 25, цвет = $ FFFFFF, pixel_type =" RGB24 "). KillAudio`," ffplayed " оно и стало серым (`color_range` здесь ничего не делает, неважно, до` -i` или после него). И MPC-HC, и VLC (через [AVFS] (http://turtlewar.org/avfs/)) воспроизводят его как белые. Поэтому я думаю, что мой источник будет _.avs_ и будет сжимать конечный продукт с _ffmpeg_ (будучи очень осторожным и дважды проверяя). cdlvcdlv 7 лет назад 0
* кажется, вы не можете установить pixel_format в фильтре источника цвета * -> вы добавляете фильтр формата позже. `-f lavfi -i color = white: 640x480: d = 3, format = rgb24` Gyan 7 лет назад 1
Это сработало! Я нашел параметр `format`, но подумал, что должен использовать двоеточие, а не запятую, в качестве разделителя и получил ошибку. Вы не можете использовать _ffplay_, чтобы проверить результат, хотя; независимо от того, какой вариант вы используете, _ffplay_ всегда показывает серый цвет. Но я могу использовать _MPC-HC_ следующим образом: `ffmpeg -hide_banner -f lavfi -i color = white: 640x480: d = 3, format = rgb24 -c: v rawvideo -f nut - | mpc-hc.exe -`. ** Это ** правильный ответ на мой вопрос, поэтому, если вы напишите его как ответ, я приму его. cdlvcdlv 7 лет назад 0

1 ответ на вопрос

1
Gyan

Как подробно описано в комментариях, преобразование в формат RGB обеспечивает полный диапазон вывода.

-f lavfi -i color=white:640x480:d=3,format=rgb24 

Для других читателей, я должен отметить, что я получаю чистый белый дисплей при запуске оригинальной команды OP. Я не могу диагностировать то, что происходит при настройке OP, но не должно быть никаких специальных шагов, необходимых для генерации чистого белого вывода из ffmpeg, кроме color=white.

Похожие вопросы