使用 ffmpeg 和 force_original_aspect_ratio 从视频创建 PNG - 生成的 PNG 被压缩为 sample_aspect_ratio(而不是 display_aspect_ratio)
Create PNG from video with ffmpeg and force_original_aspect_ratio - resulting PNG is squashed to sample_aspect_ratio (instead of display_aspect_ratio)
我有一个通用流程,其目的是拍摄任意纵横比的视频并从其中一帧生成 PNG。这个框架应该:
- 尽可能大,但不要大于 720x405 (16:9)
- 保持视频的纵横比
- 没有信箱
ffmpeg -y -nostats -ss 10 -i ./video.mp4 -max_muxing_queue_size 6400 -an -frames:v 1 -r 24/1 -vf "scale=w=720:h=405:force_original_aspect_ratio=decrease" -f image2 ./frame.png
当我给这个命令一个 sample_aspect_ratio (SAR) 为 4:3 和 display_aspect_ratio (DAR) 为 16:9 的视频时,我最终得到一个540x405 (4:3) PNG,其中图像被水平压缩。大概 force_original_aspect_ratio 正在查看 sample_aspect_ratio 而不是 display_aspect_ratio.
如何确保生成的图像与视频保持相同的宽高比(显示给用户)?
插入缩放过滤器以将帧转换为方形像素。
-vf "scale=iw*sar:ih,setsar=1,scale=w=720:h=405:force_original_aspect_ratio=decrease"
我有一个通用流程,其目的是拍摄任意纵横比的视频并从其中一帧生成 PNG。这个框架应该:
- 尽可能大,但不要大于 720x405 (16:9)
- 保持视频的纵横比
- 没有信箱
ffmpeg -y -nostats -ss 10 -i ./video.mp4 -max_muxing_queue_size 6400 -an -frames:v 1 -r 24/1 -vf "scale=w=720:h=405:force_original_aspect_ratio=decrease" -f image2 ./frame.png
当我给这个命令一个 sample_aspect_ratio (SAR) 为 4:3 和 display_aspect_ratio (DAR) 为 16:9 的视频时,我最终得到一个540x405 (4:3) PNG,其中图像被水平压缩。大概 force_original_aspect_ratio 正在查看 sample_aspect_ratio 而不是 display_aspect_ratio.
如何确保生成的图像与视频保持相同的宽高比(显示给用户)?
插入缩放过滤器以将帧转换为方形像素。
-vf "scale=iw*sar:ih,setsar=1,scale=w=720:h=405:force_original_aspect_ratio=decrease"