Как извлечь последовательность изображений без потерь с помощью FFMPEG и передать их в cjpeg mozjpeg?
Я знаю, что это может быть 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 ответ
Решение
cjpeg
принимает ввод stdin pipe, но, похоже, не принимает более одного ввода за раз.
Выведите изображения, а затем выполните цикл с 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
: использование этого может привести к пропаданию или дублированию кадров, если вы установите произвольную частоту кадров, которая не соответствует вводу. Опустить-r
а также ffmpeg
выведет все кадры.