正确的宽高比,无需重新编码视频文件


18

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

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

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

查看视频事实,是否是以下错误:a)实际视频已在像素数据中错误地拉伸,或者b)仅存在一些错误设置的元数据值?

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

Answers:


36

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

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

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

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

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

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]

优秀的!立即改变外观!
2015年

2
您不能同时使用-c copy和扩展。但是,您可以-aspect用来更改容器级别(而不是流级别)的宽高比。
llogan 2015年

@LordNeckbeard,-aspect确实可以在中播放ffplay,但不能在WMP或MPC-HC中播放。它在Stream #…信息行中添加了一个额外的SAR / DAR项目,FFmpeg/probe/play但对于一般播放而言似乎并不是解决方案。用窗口拉伸视频似乎是MPC-HC回放的最简单解决方案。
Lumi

没有重新编码就无法在MPEG2上为我工作
Mikhail

我不知道为什么它对我不起作用。它只是输出相同的视频!
蒂娜·J

4

Delgado的答案是正确的,MP4Box可以做到这一点,但是该-par选项不能完全按照所描述的那样工作。使用-out参数(以免干扰原始文件):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

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

mp4box source.mp4 -out target.mp4 -par 1=8:9

因为(4/3)/(720/480)= 8/9。

如果源表示真实的SD N​​TSC像素(在这种情况下,应该仅将中心704×480像素映射到4×3屏幕,而任一侧都有8像素过扫描),正确的命令将是:

mp4box source.mp4 -out target.mp4 -par 1=10:11

因为(4/3)/(704/480)= 10/11 –正是标准清晰度NTSC视频的参考像素长宽比。

对于问题中给出的情况,如果它真的是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。


3

ffmpeg不能在不重新编码的情况下更改视频流的参数,MP4Box(属于gpac的一部分)和mkvmerge可以。如果是一个视频流,且真实/正确的宽高比为4:3,则可能需要尝试:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

验证之前和之后: ffmpeg -i VideoFile.mp4


0

更改SAR而不也重新编码的作品ffmpeg.mp4使用h264_metadata作为吉安指出,在这里

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4

尽管从理论上讲这可以回答问题,但最好在此处包括答案的基本部分,并提供链接以供参考。
MMM
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.