2

Я создаю кучу jpgs из фильма и хочу, чтобы водяной знак был применен ко всем jpgs. Это хорошо работает для всех кадров, но первый, и я не могу понять, почему.

Это команда, которую я использую

ffmpeg -vframes 16 -ss 00:00:01 -i a.mov -t 00:00:17 -r 1 -s 1280x720 -vf "movie=watermark.png,scale=1280:720 [wm];[in][wm] overlay=0:0 [out]" '/tmp/output%d.jpg'

который даст мне эти файлы:

output1.jpg
output2.jpg
output3.jpg
output4.jpg
output5.jpg
output6.jpg
output7.jpg
output8.jpg
output9.jpg
output10.jpg

где все они, но на output1.jpg нанесен водяной знак.

Я не могу понять, почему ffmpeg не наносит водяной знак на первый.

Я использую ffmpeg 1.2 на Debian

1 ответ1

2

Если вы используете -ss перед -i , он будет искать ключевой кадр. Это быстро, но если в указанное время ключевой кадр отсутствует, то он не является точным, и вы можете получить несколько кадров до времени поиска, что будет иметь отрицательные временные метки. Так как ваше наложение водяного знака начинается в момент времени 0, кадры с отрицательными временными метками не будут иметь водяного знака.

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

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

ffmpeg -ss 00:00:01 -i a.mov -t 00:00:17 -r 1 -s 1280x720 -vf "[in] select=gte(t\,0) [sel];movie=watermark.png,scale=1280:720 [wm];[sel][wm] overlay=0:0 [out]" '/tmp/output%d.jpg'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .