ffmpeg не застосовує водяний знак на першому створеному кадрі (wm застосовується до всіх інших кадрів)


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


Не пов'язаний: можна додати -i watermark.png і усунення movie мультимедійний фільтр джерела, якщо ви використовуєте -filter_complex замість -vf.
llogan

Відповіді:


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'

ах, дуже цікаво! Одне питання "Оскільки ваш водяний фільм накладання фільму починається в момент 0" чи можна сказати ffpmeg, щоб прийняти всі, а також негативні мітки?
JohnSmith

@JohnSmith: Загалом, movie= забезпечує кілька кадрів. Потрібно починати з певного часу. Ви можете використовувати setpts фільтр для зсуву movie= щоб почати раніше, якби ви знали, скільки потрібно перекласти. Але видалення негативних порцій з select краще, оскільки стартовий кадр буде ближче до запитаного.
mark4o
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.