我有一个具有以下属性的 mkv 视频(通过 mediainfo 获得):
Width : 718 pixels
Height : 432 pixels
Display aspect ratio : 2.35:1
Original display aspect ratio : 2.35:1
Run Code Online (Sandbox Code Playgroud)
我想在特定时间截取它的屏幕截图:
ffmpeg -ss 4212 -i filename.mkv -frames:v 1 -q:v 2 out.jpg
Run Code Online (Sandbox Code Playgroud)
这将生成 718x432 jpg 图像,但纵横比错误(图像被水平“挤压”)。AFAIK,输出图像应为 1015*432(宽度=高度 * DAR)。这个计算正确吗?
有没有办法让 ffmpeg 为所有视频输出具有正确尺寸/AR 的图像(即没有“硬编码”值)?我尝试使用 setdar/setsar 过滤器但没有成功。
另外,出于好奇,尝试使用 ffmpeg 获取 SAR 和 DAR 会产生:
Stream #0:0(eng): Video: h264 (High), yuv420p(tv, smpte170m/smpte170m/bt709, progressive),
718x432 [SAR 64:45 DAR 2872:1215], SAR 155:109 DAR 55645:23544, 24.99 fps, 24.99 tbr, 1k tbn, 49.98 tbc (default)
Run Code Online (Sandbox Code Playgroud)
2872/1215 是 2.363,因此与 mediainfo 报告的值略有不同。有人知道为什么吗?
如果不查看文件,无法诊断不同读数的原因,但获得方形像素结果的通用方法是
ffmpeg -ss 4212 -i filename.mkv -vf scale=iw*sar:ih -frames:v 1 -q:v 2 out.jpg
Run Code Online (Sandbox Code Playgroud)