Добавление оверлея при выполнении точного вырезания в ffmpeg

809
c97

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

ffmpeg -ss 00:00:20.480 -i "INPUT.mp4" -ss 00:00:10.000 -t 00:11:39.960 -c:a copy -c:v libx264 -filter:v "scale=1280:-1" -preset slow -crf 25 "OUTPUT.mp4" 

Но теперь мне нужно добавить водяной знак. Я попытался использовать оверлейный фильтр (который использует второй входной файл). Я использую формат файла apng для достижения прозрачности:

ffmpeg -ss 00:01:00.680 -i "INPUT.mp4" -ss 00:00:10.000 -t 00:11:39.759 -i overlay.apng -c:a copy -c:v libx264 -filter_complex "crop=in_w-8:in_h-8,overlay,scale=1280:-1" -preset slow -crf 25 "OUTPUT.mp4" 

К сожалению, в этом случае ffmpeg игнорирует второй ключ -ss. Без этого переключателя нет точного среза. Даже если я поставлю правильную метку времени для переключателя first -ss, при воспроизведении первых нескольких секунд видеофайла произойдет остановка кадра.

Я пришел с некрасивым быстрым исправлением, связав два процесса ffmpeg, например так:

ffmpeg -ss 00:00:15.640 -i "INPUT.mp4" -ss 00:00:10.000 -t 00:11:39.800 -c:a copy -c:v huffyuv -f matroska - | ffmpeg -i pipe:0 -i overlay.apng -filter_complex "crop=in_w-8:in_h-8,overlay=y=main_h-overlay_h:x=0,scale=1280:-1" -c:a copy -c:v libx264 -preset slow -crf 25 "OUTPUT.mp4" 

В этом случае общая производительность кодирования падает на 30%.

Моя цель - вырезать и добавить водяной знак в одной команде. Пожалуйста помоги.

0

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

1
Gyan

Вариант заказа имеет значение. См. Https://ffmpeg.org/ffmpeg.html#Description.

использование

ffmpeg -ss 00:01:00.680 -i "INPUT.mp4" -i overlay.apng -ss 00:00:10.000 -t 00:11:39.759 -filter_complex "[0]crop=in_w-8:in_h-8[a];[a][1]overlay,scale=1280:-1" -c:a copy -c:v libx264 -preset slow -crf 25 "OUTPUT.mp4" 

Непонятно, для чего вы хотели применить урожай. Я предполагаю, что это первый ввод, поскольку в настоящее время ffmpeg обрабатывает вашу текущую команду. Если нет, подайте [1]для обрезки и [0][a]наложения.

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