FFMPEG报告不同(错误)的视频分辨率与它实际播放的方式相比



快速提问,我有一个电影,它被索尼拉斯维加斯从原始格式剪切和渲染为。wmv文件。棘手的部分来了,电影播放时,无论是用VLC还是WMP,分辨率都是656x480…但是当我在它上面运行ffmpeg -i时,它说它的分辨率为600x480 ....

我花了时间实际捕捉一个帧和裁剪它与photoshop和它的656,而不是600像ffmpeg它的报告,为什么会发生这种情况?我怎么能修复标题的分辨率?这对视频重新渲染有什么影响吗?正如我所说,VLC和WMP似乎不关心不正确的标头,并且正在播放它,但是,jwplayer似乎正在使用标头信息,我不怪他,这样做是正确的,但为什么视频标头可能是错误的?

ffmpeg -i trailer.wmv
输入#0,asf, from 'trailer.wmv':持续时间:00:01:04.93,起始时间:300万,比特率:2144kb/s流#0.0:音频:wmav2, 44100赫兹,单声道,32 kb/s流#0.1:视频:wmv3, yuv420p, 600x480 [PAR 59:54 DAR 295:216], 2065 kb/S, 25.00 tb(r)

是的,PAR/DAR参数也是错误的,但老实说,我不懂技术,通常看视频,确保它看起来不错,任何反馈将是感激的:p

是否有一种方法来改变与ffmpeg容器信息,使应用程序,实际上使用容器信息不渲染视频不正确?

FFMPEG是100%正确的,技术上的东西很重要:D

你的PAR(像素宽高比)和DAR(显示宽高比)实际上是正确的,你通过捕获屏幕截图和测量来证明它。

让你迷惑的是PAR不是所有像素都是正方形的! IE: 1:1,尽管大多数下载的视频都是这样,所以你可能从未注意到。一些播放器如VLC会识别PAR值并相应地拉伸视频以满足DAR。DVD视频就是一个很好的例子。

参见:http://en.wikipedia.org/wiki/Pixel_aspect_ratio

所以ffmpeg说视频宽度是600。将其乘以PAR,您将得到"真正的"宽度。意思是如果像素是正方形而不是矩形(水平)。600 *(59/54) = 656(四舍五入)数字眼熟吗?

现在取"真实"尺寸:656/480 = 1.366,看看你的DAR: 295/216 = 1.366

神奇!

正如你所发现的,并不是所有的视频播放器都足够聪明,能够识别PAR并执行适当的拉伸。您可以使用setsar和scale视频过滤器轻松地使用ffmpeg将其更改为1:1。

ffmpeg的东西…-vf "scale=656:480,setsar=1:1"…更多的东西…

为了好奇,它被称为setsar,因为它也被称为样本(又名像素)宽高比:http://ffmpeg.org/ffmpeg.html#setsar-1

希望这对你有帮助,我相信很多人(包括我自己)一开始会感到困惑。

最新更新