记下特定帧的编号

记下特定帧的编号

我正在使用 ffmpeg 从 IP 摄像头获取 mjpeg 源并将其转换为一系列静态 jpeg 图像。这是我使用的命令:

ffmpeg -i http://xxx:[email protected]/vid.mjpg -f image2 -vcodec mjpeg %05d.jpg

有人知道在使用 ffmpeg 创建静止图像时指定 jpg 压缩级别的方法吗?

答案1

以下是我最终成功的方法:

ffmpeg -i http://xx.xx/mjpg/video.mjpg -q:v 1 %05d.jpg

-q:v 1是票。它设置视频编码器的质量,其中-q表示质量,:v表示视频。值的范围从 1 到 31,值越低表示越好。

答案2

$ ffmpeg -r 1/4 -i %03d.jpg -b 5000 -vcodec mjpeg -qscale 1 5000.avi

或者

$ ffmpeg -r 1/4 -i %03d.jpg -vcodec copy -qscale 1 copy.avi

参考:

r       delay between next jpg, results 4 second
b       bitrate
vcodec  use jpeg encode
qscale  quality ratio

答案3

您可以尝试导出到 PPM 并使用其他工具转换为 JPEG。

我查看了 ffmpeg/libavcodec/mjpeg.c。我相信质量设置为固定值。

另外,您似乎将 MJPEG 视频转换为 JPEG 静态帧。我认为在这种情况下,ffmpeg/libavcodec/mjpeg2jpeg_bsf.c 中的代码会运行,但数据不会被重新编码。因此图像质量无论如何都不会提高。

这是量化表定义,我没有看到任何对*val_?c 的引用,其中的值在使用前被缩放。

/* Set up the standard Huffman tables (cf. JPEG standard section K.3) */
/* IMPORTANT: these are only valid for 8-bit data precision! */
const uint8_t ff_mjpeg_bits_dc_luminance[17] =
{ /* 0-base */ 0, 0, 1, 5, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 };
const uint8_t ff_mjpeg_val_dc[12] =
{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };

const uint8_t ff_mjpeg_bits_dc_chrominance[17] =
{ /* 0-base */ 0, 0, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 };

const uint8_t ff_mjpeg_bits_ac_luminance[17] =
{ /* 0-base */ 0, 0, 2, 1, 3, 3, 2, 4, 3, 5, 5, 4, 4, 0, 0, 1, 0x7d };
const uint8_t ff_mjpeg_val_ac_luminance[] =
{ 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12,

答案4

记下特定帧的编号

mpv --osd-msg1='${estimated-frame-number} / ${estimated-frame-count}' vid1.mp4

将帧号保存在一个文件中,例如 frm.txt,然后运行:

sed -i 's/^/eq(n\\,/' frm.txt; sed -i 's/$/)\+/'  frm.txt; sed -i '$ s/.$//' frm.txt;        #adds eq(n\, #adds )+ at the end of each line #remove + in lastline (last digit)

然后将其提取为 bmp 或 png

frms=$(cat frm.txt); ffmpeg -i vid_1.mp4  -vf "select='$frms'" -fps_mode drop "frames_%03d.bmp"

然后转换为 jpg - 差异是巨大的 350kb(最佳质量的 ffmpeg jpg vs 2MB(bmp 转换为 jpg)!!!!

for pic in *.bmp; do convert  -units PixelsPerInch -density 300 -quality 100  "$pic" "${pic//}_j.jpg"; done

相关内容