2016-11-17 161 views
0

https://stackoverflow.com/a/40601020/6318164获得关于如何将webm转换为mp4的帮助。通过将高度分辨率设置为-vf scale=-2:720来避免丢失视频比例的结果。不同的视频播放器在ffmpeg转换后显示不正确的mp4分辨率

然后我遇到了另一个问题。我发现宽度和高度都必须支持视频播放器,当时我认为这只是需要指定的高度。

经过浏览我发现这个脚本https://stackoverflow.com/a/35487394/6318164是我可以改变视频的画布到一个普通的宽度和高度的标准。它将视频缩小到适合指定画布中心的位置,而不会损失比例,而如果我是正确的,则填充具有黑色填充的空白区域,这是我想要的结果。然而,尽管它解决了所有玩家的播放问题,但我发现不同的视频播放器会显示同一视频的不同分辨率信息。

我在这里修改了Linux脚本的脚本。

X=1280; Y=720; ffmpeg -i old.webm -t 5 -vf "scale=min(iw*$Y/ih\,$X):min($Y\,ih*$X/iw),pad=$X:$Y:($X-iw)/2:($Y-ih)/2" new.mp4 

这是关于我为我设定的值发现的分辨率差异的研究。

X=1280; Y=720; 

webm   -> mp4 
========================================================= 
1280x752  -> 1280x720 X-plore (Android) 
Not supported -> 1339x720 Telegram (Android) 
1338x752  -> 1340x720 GNOME MPlayer (Linux) 
Not supported -> ???????? Built-in Video Player (Android) 

的问题是,我是我做错什么用FFmpeg的转换来返回不同的球员不正确的决议?我查看了一些其他的视频,并显示了正确的分辨率,除了这个转换后的分辨率。

编辑

随着接受的答案的帮助。这是我的工作输出,如果有人需要它:

X=1280; Y=720; ffmpeg -i input.webm -vf "scale='if(gt(a*sar,16/9),${X},${Y}*iw*sar/ih)':'if(gt(a*sar,16/9),${X}*ih/iw/sar,${Y})',pad=${X}:${Y}:(ow-iw)/2:(oh-ih)/2,setsar=1" output.mp4 

回答

1

添加setsar=1后垫。

此外,您的比例表达式并未考虑非正方形像素的视频。使用此answer中的表达式。