Как извлечь последовательность изображений без потерь с помощью FFMPEG и передать их в cjpeg mozjpeg? - PullRequest
0 голосов
/ 07 ноября 2019

Я знаю, что это может быть меньше imagemagick, но mozjpeg создает намного меньшие изображения, что желательно.

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

Что я пробовал:

$ ind = 1
$ ffmpeg -hide_banner -ss 00:00:10 -i IN.webm -t 00:00:02 -r 24 -c:v bmp -f image2pipe pipe:1 | \
    cjpeg - workDir/$((ind++)).jpeg

Сообщение об ошибке:

av_interleaved_write_frame(): Broken pipe time=00:00:00.00 bitrate=N/A speed=   0x    

Error writing trailer of pipe:1: Broken pipe

frame=    1 fps=0.0 q=-0.0 Lsize=    6075kB time=00:00:00.04 bitrate=1194394.4kbits/s speed=0.0765x    

video:6075kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.000000%

Conversion failed!

1 Ответ

1 голос
/ 07 ноября 2019

cjpeg принимает входные данные канала stdin, но, по-видимому, не принимает более одного входа за раз.

Вывод изображений, а затем цикл с cjpeg:

ffmpeg -ss 00:00:10 -i IN.webm -t 00:00:02 %04d.bmp
for f in *.bmp; do cjpeg -quality 75 -outfile "workDir/${f%.bmp}.jpg" "$f"; done

Нетпотребность в -r 24: использование этого может привести к пропущенным или дублированным кадрам, если вы зададите произвольную частоту кадров, которая не соответствует входным данным. Omit -r и ffmpeg выведут все кадры.

...