2016-11-17 2 views
0

Nach der Hilfe von https://stackoverflow.com/a/40601020/6318164 auf, wie WebM zu MP4 konvertieren. Das Ergebnis vermeidet den Verlust des Videoverhältnisses durch Einstellen der Höhenauflösung mit -vf scale=-2:720.Verschiedene Video-Player zeigen falsche mp4-Auflösung nach der Konvertierung von ffmpeg

Ich stieß dann auf ein anderes Problem. Ich habe festgestellt, dass sowohl die Breite als auch die Höhe für die Videoplayer unterstützt werden müssen, wenn ich dachte, dass nur die Höhe angegeben werden muss.

Nach dem Umblättern fand ich dieses Skript https://stackoverflow.com/a/35487394/6318164 wo ich die Leinwand des Videos auf eine gemeinsame Breite und Höhe Standard ändern kann. Es verkleinert das Video so, dass es in die Mitte der angegebenen Leinwand passt, ohne das Verhältnis zu verlieren, während der leere Bereich mit schwarzer Füllung gefüllt wird, wenn ich richtig bin, was das gewünschte Ergebnis ist.

Allerdings, obwohl es die Wiedergabeprobleme in allen Spielern gelöst hat, habe ich festgestellt, verschiedene Video-Player zeigen unterschiedliche Auflösung Informationen des gleichen Videos.

Ich habe das Skript hier für Linux-Terminal-Verwendung geändert.

Dies ist die Forschung über die Auflösung Unterschiede, die ich für den Wert gefunden habe ich gesetzt.

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) 

Die Frage ist, ich bin ich etwas falsch mit der ffmpeg Umwandlung tue falsche Auflösungen für unterschiedliche Spieler zurück? Ich habe einige andere Videos ausprobiert, die ich habe, und sie zeigen die korrekten Auflösungen außer diesem umgewandelten.

bearbeiten

Mit Hilfe der akzeptierte Antwort. Dies war meine Arbeit ausgegeben, wenn jemand sie braucht:

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 

Antwort

1

hinzufügen setsar=1 nach Pad.

Außerdem berücksichtigt Ihr Skalierungsausdruck keine Videos mit nicht quadratischen Pixeln. Verwenden Sie den Ausdruck in diesem answer.