Использование ffmpeg для извлечения сегмента в середине длинного видео

мне нужно извлечь 30-секундный интервал из середины видео, при преобразовании его в webm. ffmpeg казался идеальным лайнером:

ffmpeg -i long.mkv -vcodec libvpx -b:v 1M -ss 02:00:00 -t 00:00:30 -threads 4 out.webm

к моему удивлению, он почти сразу проглотил всю доступную память, и вещи начали меняться местами, поэтому я убил его. После того, как я не нашел очевидной ошибки - и имею в виду, что я редко использую ffmpeg - я попробовал avconv. Он ничего не сообщал, и использование памяти (медленно) росло в том же направление.

после нескольких тестов с:

 -ss 02:00:00 -t 00:00:01
 -ss 00:00:01 -t 00:00:01
 -ss 00:01:00 -t 00:00:01

кажется, ffmpeg загружает весь фильм до -ss в памяти, или что-то подобное. Во всяком случае, это не подходит для такой операции. Мой вопрос в том, делаю ли я что-то неправильно, и ffmpeg действительно может выполнить эту операцию с разумным использованием ресурсов? В случае, если ffmpeg не предназначен для этого или просто глупо о том, как это сделать, есть ли какие-либо альтернативы, которые не связаны с перетаскиванием прямоугольники на временной шкале и с помощью маленьких ножниц и полос прокрутки?

debian@pc:~/ ffmpeg -version
ffmpeg version 0.8.16-6:0.8.16-1, Copyright (c) 2000-2014 the Libav developers
  built on Sep 16 2014 23:10:48 with gcc 4.7.2
The ffmpeg program is only provided for script compatibility and will be removed
in a future release. It has been deprecated in the Libav project to allow for
incompatible command line syntax improvements in its replacement called avconv
(see Changelog for details). Please use avconv instead.
ffmpeg 0.8.16-6:0.8.16-1
libavutil    51. 22. 2 / 51. 22. 2
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 1
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0.100

Я также пробовал с последней версией с сайта ffmpeg, и результаты были такими же, как у avconv-не проглатывает мою память сразу, но, похоже, ничего не делает:

frame=    0 fps=0.0 q=-1.0 size=       4kB time=00:00:00.00 bitrate=N/A    

и неуклонно увеличивает использование памяти. Для одного второго клипа Мне кажется, что он должен быть мгновенным и едва использовать память.

15
задан Alex
23.02.2023 11:46 Количество просмотров материала 3211
Распечатать страницу

1 ответ

используя -ss после -i in ffmpeg вечность!

это потому, что вы ищете точку в выход, а не на вход. Per ffmpeg руководство по поиску:

вход ищу

-ss параметр должен быть указан где-то перед -i:

...Входные данные будут проанализированы с помощью кадры, которая составляет очень fast...

по сравнению с:

Выход Ищет

-ss параметр должен быть указан после -i:

...Это будет сделано очень медленно, кадр за кадром...

в своем вопросе вы указали последним. Это будет намного быстрее, если вы используете вход ищу вместо:

ffmpeg -ss 02:00:00 -i long.mkv -vcodec libvpx -b:v 1M -t 00:00:30 -threads 4 out.webm

а если вы абсолютно нужен кадр-точный поиск, вы можете комбинировать оба:

ffmpeg -ss 01:59:30 -i long.mkv -ss 30 -vcodec libvpx -b:v 1M -t 00:00:30 -threads 4 out.webm

(быстрый поиск до 01: 59: 30, затем поиск кадр за кадром до 02:00: 00, что составляет +30)

вы, возможно, уже знаете, но если нет, это должно осветить, что ffmpeg придирчив к размещению опций и переключателей!

6
отвечен bertieb 2023-02-24 19:34

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх