Хорошо, я пытаюсь отредактировать кучу коротких и очень длинных видео. Цель состоит в том, чтобы отключить 1-минутную часть в каждом видео и наложить эту небольшую часть изображением PNG на всю продолжительность.
Поскольку все это нужно делать как можно быстрее, я подумал, что это будет Лучшая идея - разделить каждое видео на 3 части, затем отключить звук и добавить оверлей к части 2 и снова собрать все 3 части.
Первая проблема, с которой я столкнулся, заключалась в том, что части 2 и 3 всегда начинались с 1-2-секундным зависанием видео, в то время как со звуком все в порядке.
Я обнаружил, что это было вызвано тем, что я вырезал ключевые кадры и игнорировал неключевые кадры в начале.
Я исправил это, добавив параметр -copyinkf
, чтобы также скопировать все неключевые кадры, например:
ffmpeg -i "in.mp4" \
-to 0:04:00 -c:v copy -c:a copy -copyinkf "p1.mp4" \
-ss 0:04:00 -to 0:05:00 -c:v copy -c:a copy -copyinkf "p2.mp4" \
-ss 0:05:00 -c:v copy -c:a copy -copyinkf "p3.mp4"
Итак, я продолжил и отключил часть 2, например:
ffmpeg -i "p2.mp4" -af "volume=0" -c:v copy -copyinkf "p2_muted.mp4"
Все в порядке до этого момента, и ЕСЛИ Я собираю части обратно прямо сейчас, это тоже будет быстро и точно, вот так:
--parts.txt
file 'p1.mp4'
file 'p2_muted.mp4'
file 'p3.mp4'
ffmpeg -f concat -safe 0 -i parts.txt -c copy "out.mp4"
Но теперь возникает проблема:
Так как мне нужно перекодировать p art # 2, чтобы наложить изображение PNG, я снова получаю 1-2-секундную проблему со стоп-кадром в начале, и я не могу, хоть убей, вычислить «эквивалент» -copyinkf
для перекодирования видео.
Прямо сейчас я накладываю изображение PNG следующим образом:
ffmpeg -i "p2_muted.mp4" -i "../banner.png" -filter_complex "[1][0]scale2ref[i][v];[v][i]overlay" -c:a copy "p2_edited.mp4"
Итак, мой вопрос, что будет эквивалентом -copyinkf
, или в случае, если есть лучший способ чем мой, что бы это было для достижения моей задачи.