FFMPEG 用于下载时视频中的缩略图失真
FFMPEG for thumbnail from video distorted when downloaded
我正在从 mp4 中抓取缩略图。
当我使用 -c:v mjpeg
时,缩略图在浏览器中显示正常,但在 Mac 上预览时完全变形。如果我使用 -c:v jpeg2000
,图像在我的 Mac 上看起来不错,但在浏览器中不显示。
完整命令:
ffmpeg -ss 3 -i https://some_site/some_video.mp4 -vf thumbnail,scale=480:480 -q:v 2 -frames:v 1 -f image2 -c:v jpeg2000 -r 1 -vframes 1 tmp/my_thumbnail.jpg
-对-
ffmpeg -ss 3 -i https://some_site/some_video.mp4 -vf thumbnail,scale=480:480 -q:v 2 -frames:v 1 -f image2 -c:v mjpeg -r 1 -vframes 1 tmp/my_thumbnail.jpg
我需要使用什么编码才能使生成的缩略图既可以在浏览器中查看,又可以在 Mac 上预览?
这是扭曲图像的样子:
我开始认为这是一个 macOS 问题,但即使是,我也想知道 FFMPEG 是否有解决方案,以便即使是有 buggy 的用户 OS可以正常预览图片
输出:
ffmpeg version 4.1.5 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8.3.0 (Alpine 8.3.0)
configuration: --prefix=/usr --enable-avresample --enable-avfilter --enable-gnutls --enable-gpl --enable-libass --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --enable-libtheora --enable-libv4l2 --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-libxcb --disable-stripping --disable-static --disable-librtmp --enable-vaapi --enable-vdpau --enable-libopus --disable-debug
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://some_site/some_video.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1mp42
creation_time : 2020-02-28T16:46:30.000000Z
Duration: 00:00:06.23, start: 0.000000, bitrate: 2004 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 1951 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc (default)
Metadata:
creation_time : 2020-02-28T16:46:29.000000Z
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 48 kb/s (default)
Metadata:
creation_time : 2020-02-28T16:46:29.000000Z
File 'tmp/my_thumbnail.jpg' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x55acb21fbb00] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'tmp/my_thumbnail.jpg':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1mp42
encoder : Lavf58.20.100
Stream #0:0(und): Video: mjpeg, yuvj444p(pc), 480x480 [SAR 1:1 DAR 1:1], q=2-31, 200 kb/s, 1 fps, 1 tbn, 1 tbc (default)
Metadata:
creation_time : 2020-02-28T16:46:29.000000Z
encoder : Lavc58.35.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
[Parsed_thumbnail_0 @ 0x55acb21e35c0] frame id #58 (pts_time=1.933333) selected from a set of 97 images
frame= 1 fps=0.0 q=2.0 Lsize=N/A time=00:00:01.00 bitrate=N/A dup=1 drop=1 speed=2.04x
video:39kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
它可能不喜欢日志 (yuvj444p) 中显示的 4:4:4 子采样。
在 ffmpeg
中,这被命名为 像素格式 。编码器 mjpeg 支持 yuvj420p、yuvj422p 和 yuvj444p,如 支持的像素格式 下的 ffmpeg -h encoder=mjpeg
所示。默认情况下 ffmpeg
会自动尝试选择破坏性最小的像素格式,但蹩脚的解码器可能不支持更复杂的格式。
您可以使用 format filter 或旧版 -pix_fmt
输出选项输出特定像素格式:
ffmpeg -ss 3 -i https://some_site/some_video.mp4 -vf "thumbnail,scale=480:480,format=yuvj420p" -q:v 2 -frames:v 1 tmp/my_thumbnail.jpg
4:2:0 (yuvj420p) 将得到最广泛的支持,但请先尝试 4:2:2 (yuvj422p),因为它看起来可能稍微好一些。
其他工具也可以处理这个问题,例如 GIMP(文件 → 导出为 → 导出 → 高级选项 → 子采样)。
我正在从 mp4 中抓取缩略图。
当我使用 -c:v mjpeg
时,缩略图在浏览器中显示正常,但在 Mac 上预览时完全变形。如果我使用 -c:v jpeg2000
,图像在我的 Mac 上看起来不错,但在浏览器中不显示。
完整命令:
ffmpeg -ss 3 -i https://some_site/some_video.mp4 -vf thumbnail,scale=480:480 -q:v 2 -frames:v 1 -f image2 -c:v jpeg2000 -r 1 -vframes 1 tmp/my_thumbnail.jpg
-对-
ffmpeg -ss 3 -i https://some_site/some_video.mp4 -vf thumbnail,scale=480:480 -q:v 2 -frames:v 1 -f image2 -c:v mjpeg -r 1 -vframes 1 tmp/my_thumbnail.jpg
我需要使用什么编码才能使生成的缩略图既可以在浏览器中查看,又可以在 Mac 上预览?
这是扭曲图像的样子:
我开始认为这是一个 macOS 问题,但即使是,我也想知道 FFMPEG 是否有解决方案,以便即使是有 buggy 的用户 OS可以正常预览图片
输出:
ffmpeg version 4.1.5 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8.3.0 (Alpine 8.3.0)
configuration: --prefix=/usr --enable-avresample --enable-avfilter --enable-gnutls --enable-gpl --enable-libass --enable-libmp3lame --enable-libvorbis --enable-libvpx --enable-libxvid --enable-libx264 --enable-libx265 --enable-libtheora --enable-libv4l2 --enable-postproc --enable-pic --enable-pthreads --enable-shared --enable-libxcb --disable-stripping --disable-static --disable-librtmp --enable-vaapi --enable-vdpau --enable-libopus --disable-debug
libavutil 56. 22.100 / 56. 22.100
libavcodec 58. 35.100 / 58. 35.100
libavformat 58. 20.100 / 58. 20.100
libavdevice 58. 5.100 / 58. 5.100
libavfilter 7. 40.101 / 7. 40.101
libavresample 4. 0. 0 / 4. 0. 0
libswscale 5. 3.100 / 5. 3.100
libswresample 3. 3.100 / 3. 3.100
libpostproc 55. 3.100 / 55. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'https://some_site/some_video.mp4':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1mp42
creation_time : 2020-02-28T16:46:30.000000Z
Duration: 00:00:06.23, start: 0.000000, bitrate: 2004 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 480x480 [SAR 1:1 DAR 1:1], 1951 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc (default)
Metadata:
creation_time : 2020-02-28T16:46:29.000000Z
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 48 kb/s (default)
Metadata:
creation_time : 2020-02-28T16:46:29.000000Z
File 'tmp/my_thumbnail.jpg' already exists. Overwrite ? [y/N] y
Stream mapping:
Stream #0:0 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x55acb21fbb00] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'tmp/my_thumbnail.jpg':
Metadata:
major_brand : isom
minor_version : 1
compatible_brands: isomavc1mp42
encoder : Lavf58.20.100
Stream #0:0(und): Video: mjpeg, yuvj444p(pc), 480x480 [SAR 1:1 DAR 1:1], q=2-31, 200 kb/s, 1 fps, 1 tbn, 1 tbc (default)
Metadata:
creation_time : 2020-02-28T16:46:29.000000Z
encoder : Lavc58.35.100 mjpeg
Side data:
cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
[Parsed_thumbnail_0 @ 0x55acb21e35c0] frame id #58 (pts_time=1.933333) selected from a set of 97 images
frame= 1 fps=0.0 q=2.0 Lsize=N/A time=00:00:01.00 bitrate=N/A dup=1 drop=1 speed=2.04x
video:39kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
它可能不喜欢日志 (yuvj444p) 中显示的 4:4:4 子采样。
在 ffmpeg
中,这被命名为 像素格式 。编码器 mjpeg 支持 yuvj420p、yuvj422p 和 yuvj444p,如 支持的像素格式 下的 ffmpeg -h encoder=mjpeg
所示。默认情况下 ffmpeg
会自动尝试选择破坏性最小的像素格式,但蹩脚的解码器可能不支持更复杂的格式。
您可以使用 format filter 或旧版 -pix_fmt
输出选项输出特定像素格式:
ffmpeg -ss 3 -i https://some_site/some_video.mp4 -vf "thumbnail,scale=480:480,format=yuvj420p" -q:v 2 -frames:v 1 tmp/my_thumbnail.jpg
4:2:0 (yuvj420p) 将得到最广泛的支持,但请先尝试 4:2:2 (yuvj422p),因为它看起来可能稍微好一些。
其他工具也可以处理这个问题,例如 GIMP(文件 → 导出为 → 导出 → 高级选项 → 子采样)。