LINUX.ORG.RU

ffmpeg и прожорливый trim

 


0

1

Есть файл, с котоого выдергивается скрин. Столкнулся с проблемой, при установке trim (или ключа -ss) долго идет обработка. Чем дальше указан trim тем дольше жду результат.

Пример

ffmpeg -y -i Le.Magnifique.1973.720p.BluRay.4xRus.2xFre.HDCLUB.mkv  -filter_complex "[0:0] trim=5:6, colorchannelmixer=.3:.4:.3:0:.3:.4:.3:0:.3:.4:.3  [v1]" -map "[v1]"  -f image2 -vframes 1 1.jpg

Вот такая команда исполняется менее чем за 1 сек. Если trim указать 3600, т.е. выдернуть кадр ближе к концу фильма, то это уже занимает больше минуты.

Сам видео файл:

8 GB
1 hour 33 minutes 57 seconds
Matroska
1196 x 720
H.264
24 frames per second
8746 kbps

Стоит учесть, что для чистоты эксперемента был примонтирован раздел который находится в ОЗУ. С него и ведется чтение видео файла. + 2 процессора Xeon E5-2670 v2. Задействуется в момент обработки все 40 потоков (20 ядер).

Если использовать -ss вместо trim, в данном случае время обработки увеличилось в несколько раз и было задействовано только одно ядро.

В какую сторону мне копать, чтобы увеличить скорость обработки?

P.S. Другие файлы размером 2 гб (mpeg4 xvid) обрабатываются 10 сек.

★★

Последнее исправление: ex3me (всего исправлений: 2)

В какую сторону мне копать, чтобы увеличить скорость обработки?

Не страдать фигнёй, как это делаешь ты.

ffmpeg -i Le.Magnifique.1973.720p.BluRay.4xRus.2xFre.HDCLUB.mkv -an -ss 00:00:03 -an -r 1 -vframes 1 -y test.png
а потом
convert test.png -grayscale rec709luma test_grayscale.png

devl547 ★★★★★
()
Ответ на: комментарий от devl547

То как я примняю эффекты, не имеет разницы. Проблема в выборке скриншота которые глубоко в файле.

Данная команда отрабатывает так же долго.

frame=    1 fps=0.0 q=0.0 Lsize=N/A time=00:00:01.00 bitrate=N/A    
video:1395kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown

real    2m9.118s
user    18m4.871s
sys     0m41.806s
ex3me ★★
() автор топика
Последнее исправление: ex3me (всего исправлений: 1)

Попробуй указать -ss для входного файла, а не выходного. Т.е. перед -i.

anonymous
()
Ответ на: комментарий от anonymous

Так то намного лучше :)

real    0m0.779s
user    0m1.402s
sys     0m0.572s
ex3me ★★
() автор топика
Ответ на: комментарий от ex3me

Но так он получит прыжок в середину файла с точностью до keyframe (хотя не исключено, что ТС это устроит). Чтобы получилось и быстро, и точно на уровне кадров, и не париться с написанием кода, я бы попробовал такой костыль:

ffmpeg -ss ... -t ...(небольшую длительность, порядка 1 GOP)... -i input -an -vcodec copy -f matroska - | ffmpeg -i -ss ... -vframes 1 ...

То есть сначала быстро прыгаем с точностью до keyframe, потом, во втором процессе, уже точно определяем нужный кадр, «пролистывая» вырезанный кусок покадрово и определяя нужный кадр точно по таймштампу. Не элегантно и не универсально, конечно.

(Это был ответ на это ffmpeg и прожорливый trim (комментарий) )

Krieger_Od ★★
()
Последнее исправление: Krieger_Od (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.