ffmpeg - Hyperthreading вызывает «Преобразование не удалось» с несколькими параллельными экземплярами - PullRequest
0 голосов
/ 06 февраля 2019

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

for video in *.MOV; do
    base=`basename "$video" .MOV`
    ffmpeg -i "$video" -r 0.02 "$base"/out_%02d.png > logs/"$base" 2>&1 &
done

При запуске этого (на 60 видео) я проверяю файлы logs/, и 40 из них вначале вылетали со следующей ошибкой:

Ошибка инициализации выходного потока 0: 0 - Ошибка при открытии энкодера для выходного потока # 0: 0 - возможно, неверные параметры, такие как битовая скорость, скорость, ширина или высота

Преобразование не удалось!

Однако он отлично работает с меньшим количеством видео (около 5, даже с видео, которые раньше не работали).

РЕДАКТИРОВАТЬ : Я попытался отключить гиперпоточность, и теперь она работает нормально.Почему гиперпоточность приводит к сбою ffmpeg?

1 Ответ

0 голосов
/ 06 февраля 2019

Вторичный "гипер" поток, вероятно, обычно застревает в состоянии готовности к выполнению, потому что обработка потока выполняющегося потока не должна приостанавливаться, чтобы ждать поступления новых данных. Без отключения гиперпоточности добавляем -threads 1 вашей команде ffmpeg может помочь параллельное использование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...