У вас, ймовірно, немає ключового кадру на позначці 3 секунди. Оскільки не-ключові кадри кодують відмінності від інших кадрів, їм потрібні всі дані, починаючи з попереднього ключового кадру.
З контейнером mp4 можна вирізати неметалічний кадр без повторного кодування за допомогою списку редагування. Іншими словами, якщо найближчий ключовий кадр до 3s - це 0s, він скопіює відео, починаючи з 0s, і скористається списком редагування, щоб повідомити гравцеві почати відтворення 3 секунди.
Якщо ви використовуєте останню ffmpeg від git master, це зробить це за допомогою списку редагування, коли викликається за допомогою команди, яку ви надали. Якщо це не працює для вас, ви, ймовірно, або використовуєте старішу версію ffmpeg, або ваш плеєр не підтримує редагування списків. Деякі гравці ігнорують список редагування та завжди відтворюватимуть усі медіафайли у файлі від початку до кінця.
Якщо ви хочете точно вирізати, починаючи з не-ключового кадру, і хочете, щоб він відтворювався, починаючи з потрібної точки на програвачі, який не підтримує редагування списків, або ви хочете переконатися, що вирізана частина фактично не знаходиться у вихідному файлі (наприклад, якщо вона містить конфіденційну інформацію), ви можете це зробити, перекодирувавшись так, що в потрібний час початку буде ключовий кадр. Повторне кодування є типовим, якщо ви не вказуєте copy
. Наприклад:
ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4
Під час повторного кодування ви також можете включити додаткові параметри, що стосуються якості, або певний кодер AAC. Докладніше див. Посібник з кодування відео для ffmpeg x264 для відео та посібник з кодування AAC для аудіо.
Також -t
опція вказує тривалість, а не час закінчення. Вищевказана команда буде кодувати 8s відео, починаючи з 3s. Для початку в 3 і закінчення в 8 секунд -t 5
. Якщо ви використовуєте останню версію FFmpeg можна також замінити -t
з -to
в вищенаведеної команді до кінця в заданий час.