
У меня много клипов h265, все по шесть секунд. Теперь я хочу объединить их вместе с помощью ffmpeg (предпочтительно без перекодирования), но использовать только части со второй по четвертую секунду каждого клипа. Я делаю это с помощью демультиплексора concat, но как только я указываю точку входа и длительность, мои результаты становятся довольно случайными. Он не выдает никаких ошибок и создает новые клипы, но длина и точки входа совершенно неверны.
Поскольку мои клипы h265 и довольно короткие, моим первым подозрением было, что просто нет ключевых кадров, которые он мог бы редактировать, поэтому я попробовал то же самое с клипами Quicktime Prores (внутрикадровое кодирование) – что дало мне такие же странные результаты. Поэтому мне интересно, может ли проблема быть в чем-то другом?
Вот мой код (вызов из Python):
subprocess.call(['ffmpeg', '-f', 'concat', '-safe', '0', '-i', 'concatlist.txt', '-c', 'copy', '-hide_banner', '-loglevel', 'error', output])
Это пример моего (автоматически сгенерированного) текстового файла:
file videos_squares/vt_5Hn8lze0G8A.mp4
inpoint 2.0
duration 2.0
file videos_squares/vt_J8DuC93hLq0.mp4
inpoint 2.0
duration 2.0
file videos_squares/vt_u8twUOpagZs_seg3.mp4
inpoint 2.0
duration 2.0
решение1
Чтобы ограничить длительность с помощью демультиплексора concat, установите outpoint
(со значением inpoint + предполагаемая длительность).
Ключевое duration
слово неудачно названо и по сути устанавливает смещение для начальной временной метки следующего клипа относительно начальной временной метки текущего клипа. Но оно не ограничивает вывод текущего клипа.