Ich habe den folgenden Code, um HDV-Videos in ein webfähiges mp4 zu konvertieren:
ffmpeg -i hdv-input.m2t -crf 28 -c:a aac -b:a 80k -ac 1 -strict -2 -movflags +faststart h-264-out.mp4
Das Problem ist, dass es in diesem Befehl keine Möglichkeit gibt, das Pixel-Seitenverhältnis anzugeben. Falls Sie es nicht wissen: HDV-Videodateien haben eine Auflösung von 1440 x 1080, aber die Pixel sind nicht quadratisch. Bei der Dekodierung für die Anzeige werden die Pixel auf volle 1920 x 1080 gestreckt. Dies wird als anamorphes Video bezeichnet und sollte unbedingt vermieden werden, wenn für Endbenutzer produziert wird.
Ich weiß ehrlich gesagt nicht, ob die MP4s, die ich mit dem obigen Befehl mache, mit quadratischen Pixeln produziert werden, aber ich möchte sicherstellen, dass sie es sind. Was sind die richtigen Parameter, die ich zu diesem Befehl hinzufügen muss, um quadratische Pixel in meiner Ausgabe-mp4 sicherzustellen? Muss ich auch die Auflösung einstellen und wie mache ich das? Es scheint, als müsste es auch einen -c:v
Befehl geben, aber ich weiß es nicht wirklich.
Sie können eine Kombination aus Scale- und Setar-Filtern verwenden.
ffmpeg -i hdv-input.m2t -vf "scale=iw*sar:ih,setsar=1" -crf 28 -c:a aac -b:a 80k -ac 1 -movflags +faststart h-264-out.mp4
Die Scaler-Breite, die auf gesetzt werden soll current width x sample/pixel aspect
. Wenn es bereits 1 ist, beträgt es new width = old width
. Ich habe danach einen setsar hinzugefügt, um sicherzustellen, dass die Ausgabe-SAR 1
.
Für das MP4-Format ist der Standard-Video-Codec H.264. Wenn Sie dies möchten, müssen Sie nicht explizit festlegen c:v
.
(Für Bitraten < 128k libfdk_aac
besser als der native AAC-Encoder.)
-strict -2
wird für die Verwendung des nativen AAC-Encoders nicht benötigt, wenn Ihr ffmpeg von nach Dezember 2015 stammt.
Benutzer24601
Gyan
rauben
Gyan
width = DAR x height
. Für den Anwendungsfall des OP wäre setdar überflüssig. Bei anderen Videos würde es eine Anzeige im Format 16:9 erzwingen,Benutzer24601
libfdk_aac
? Ich habe-c:a aac
zu gewechselt-c:a libfdk_aac
und erhalte den Fehler "unbekannter Encoder 'libfdk_aac'".Gyan
CRAIG