如何使用 FFMPEG 提取无损图像序列并将它们传输到 mozjpeg 的 cjpeg?
How to extract sequence of lossless images with FFMPEG and pipe them to mozjpeg's cjpeg?
我知道 imagemagick
可能会失败,但 mozjpeg 生成的图像要小得多,这是可取的。
我想提取视频的所有帧并通过 mozjpeg 转换为 JPEG。
我尝试过的:
$ 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!
cjpeg
接受标准输入管道输入,但似乎一次接受的输入不超过一个。
输出图片然后循环 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
将输出所有帧。
我知道 imagemagick
可能会失败,但 mozjpeg 生成的图像要小得多,这是可取的。
我想提取视频的所有帧并通过 mozjpeg 转换为 JPEG。
我尝试过的:
$ 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!
cjpeg
接受标准输入管道输入,但似乎一次接受的输入不超过一个。
输出图片然后循环 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
将输出所有帧。