无需重新编码视频文件即可校正纵横比

for*_*rin 31 ffmpeg

我有一个具有以下属性的视频流:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc
Run Code Online (Sandbox Code Playgroud)

当我在 VLC 中运行它时,我必须按“A”将纵横比更改为“4:3”,以使视频以正确的纵横比显示。

查看视频事实,错误是 a) 实际视频在像素数据中被错误拉伸,还是 b) 只是某些元数据值设置不正确?

如果是前者,我知道我可以重新编码视频并更改宽度和高度。但是如果是后者,我运行什么 ffmpeg 命令来修复元数据而不重新编码视频本身?

occ*_*ech 55

样本纵横比 (SAR) 和显示纵横比 (DAR) 之间存在差异。如果您想将视频更改为以 4:3 显示,您将需要更改图像中的实际像素(通过缩放像素和更改 SAR),或者通过在容器级别设置元数据标志来告诉外部媒体播放器将图像拉伸到您想要的 DAR。

如果不应用视频过滤器,您将无法缩放像素和更改 SAR。如果选择此方法,则需要对文件进行转码 - 因为在应用视频过滤器时无法“流式复制”视频流。

要缩放图像并更改 SAR(转码时),请尝试:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您只想更改元数据标志并调整 DAR,您将能够流式复制视频。为此,请尝试:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]
Run Code Online (Sandbox Code Playgroud)

  • 你不能同时使用 `-c copy` 和缩放;但是,您可以使用 `-aspect` 来更改容器级别(而不是流级别)的纵横比。 (5认同)
  • @MikhailV - 对于 MPEG-2,`-aspect` 是无用的;您需要使用 `-bsf:v mpeg2_metadata=display_aspect_ratio=4/3` (唯一有效值为 4/3、16/9、221/100)。即使这样也可能不起作用,因为流中存在序列显示扩展元数据,在这种情况下,您也必须在那里设置宽高比,也许可以通过使用 ReStream 进行解复用和处理。 (3认同)
  • 在容器的元数据级别设置宽高比有哪些缺点?是否有任何原因比在流级别“正确”执行它更不可靠? (2认同)

小智 6

Delgado 的答案是正确的,MP4Box 可以做到这一点,但该-par选项并不像描述的那样工作。带-out参数(以免干扰您的原始文件):

\n\n
mp4box source.mp4 -out target.mp4 -par stream-number=width:height\n
Run Code Online (Sandbox Code Playgroud)\n\n

使用 时-par stream-number=width:height,定义像素长宽比 \xe2\x80\x93,即设备长宽比除以存储长宽比的结果。(等效地,您正在描述源像素的长宽比。)例如,假设您有一个尺寸为 720\xc3\x97480 的 DVD 源,并且正确的显示长宽比是 4:3。对于这种情况,您需要:

\n\n
mp4box source.mp4 -out target.mp4 -par 1=8:9\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为 (4/3)\xe2\x80\x8a/\xe2\x80\x8a(720/480) = 8/9。

\n\n

如果源代表真正的 SD NTSC 像素(在这种情况下,只有中央 704\xc3\x97480 像素应该映射到 4\xc3\x973 屏幕,两侧各有 8 个像素过扫描),正确的命令是:

\n\n
mp4box source.mp4 -out target.mp4 -par 1=10:11\n
Run Code Online (Sandbox Code Playgroud)\n\n

因为 (4/3)\xe2\x80\x8a/\xe2\x80\x8a(704/480) = 10/11 \xe2\x80\x93 正是标清 NTSC 视频的参考像素长宽比。

\n\n

对于问题中给出的情况,如果它确实是 4:3,则会给出非常奇怪的像素长宽比:(4/3)/(720/416) = 104/135。它的宽度为 720,这表明它是 DVD 源;这是一个 25 fps 的视频,建议采用 PAL,但 PAR 小于 1,建议采用 NTSC。我想它可能是 4:5(非常接近 104:135),但我不知道有什么可以产生该像素长宽比;也许可以先尝试一下,如果水平方向看起来仍然有点太拉伸,然后再尝试 3:4。当然,如果您确定它正好是 4:3,则使用 104:135 即可。

\n


dra*_*ke7 5

在不重新编码的情况下更改SAR也适用ffmpeg.mp4使用h264_metadataGyan 在此处指出的:

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4
Run Code Online (Sandbox Code Playgroud)