Ffmpeg говорит, что "должен быть указан хотя бы один выходной файл", когда трубопроводы из другого процесса

Чтобы заставить ffmpeg читать, декодировать и масштабировать только один раз, чтобы снизить загрузку процессора, я поместил эти шаги в один процесс ffmpeg и передал результат в другой процесс ffmpeg, который выполнял кодировку.

Это улучшило общее время обработки на 15-20%.

INPUT_STREAM="ffmpeg -i $INPUT_FILE -vf scale=720:-1,crop=720:400 -threads auto -f yuv4mpegpipe -"

$INPUT_STREAM | ffmpeg -y -f yuv4mpegpipe -i - \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 250k -threads auto out-250.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 500k -threads auto out-500.mp4 \
$AUDIO_OPTIONS_P2 $VIDEO_OPTIONS_P2 -b:v 700k -threads auto out-700.mp4

Затем я попробовал синтаксис ниже:

ffmpeg -i c:\sample.mp4 -threads auto -f yuv4mpegpipe - | ffmpeg -y -f yuv4mpegpipe -i -vcodec libx264 -b:v 250k -threads auto c:\out-250.mp4 -vcodec libx264 -b:v 260k -threads auto c:\out-260.mp4

... но эта ошибка появляется:

Необходимо указать хотя бы один выходной файл

Но я указал файл out, который есть: C:\out-260.mp4. Тем не менее он не работает

Что не так?

1 ответ

ffmpeg -y -f yuv4mpegpipe -i -vcodec …

Вы не указали входной файл. Чтобы читать из stdin, используйте -:

ffmpeg -y -f yuv4mpegpipe -i - -vcodec …

licensed under cc by-sa 3.0 with attribution.