Вырезание видео на основе времени начала и окончания с помощью ffmpeg


Я попытался вырезать видео, используя время начала и окончания видео, используя следующую команду

ffmpeg -ss 00:00:03 -t 00:00:08 -i movie.mp4 -acodec copy -vcodec copy -async 1 cut.mp4

С помощью приведенной выше команды я хочу вырезать видео из 00:00:03 до 00:00:08. Но он не режет видео между этими временами вместо этого он режет видео с первыми 11 секундами. может ли кто-нибудь помочь мне решить эту проблему?

Edit 1:

Я попытался вырезать с помощью следующей команды, которая предлагается by mark4o

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 cut.mp4

но была показана следующая ошибка.

кодер ' aac ' является экспериментальным, но экспериментальные кодеки не включены

Итак, я добавил -strict -2 в команду, т. е.

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -strict -2 cut.mp4

теперь он работает нормально.

4 300

4 ответа:

у вас, вероятно, нет ключевого кадра на отметке 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. чтобы начать в 3s и закончить в 8s использовать -t 5. Если вы используете текущую версию ffmpeg, вы также можете заменить -t С -to в приведенной выше команде до конца по указанное время.

попробуйте использовать эту. Это самый быстрый и лучший ffmpeg-способ, которым я это понял:

 ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4

эта команда обрезает видео в считанные секунды!

Я объяснил это в своем блоге здесь:

Я: это определяет входной файл. В этом случае это (input. mp4).
- ss: используется с -i, это ищет во входном файле (input.mp4) для позиционирования.
00:01:00: Это время, с которого начнется ваше обрезанное видео.
- to: это указывает продолжительность от начала (00: 01:40) до конца (00:02: 12).
00:02:00: это время, когда ваше обрезанное видео закончится.
-C копировать: это опция для обрезки через потоковое копирование. (Прим.: очень быстро)

формат времени: чч:мм:СС

обратите внимание, что текущий сильно поддержанный ответ устарел и обрезка было бы очень медленно. Для получения дополнительной информации, посмотрите на этот официальный ffmpeg статьи.

ffmpeg -i movie.mp4 -ss 00:00:03 -t 00:00:08 -async 1 -c copy cut.mp4 

использовать -C копировать для того чтобы сделать внутри немедленно. В этом случае ffmpeg не будет перекодировать видео, просто вырезать по размеру.

    ffmpeg -i movie.mp4 -vf trim=3:8 cut.mp4

отбросьте все, кроме второго 3 до второго 8.