Das Anpassen von Video für LaTeX mit ffmpeg führt nicht zu dem erwarteten Ergebnis

490
TomCho

Ich habe seit Wochen versucht, einige Videos (erstellt mit Python-Matplotlib) in meine Latex / Beamer-Präsentation einzubetten, die sich an Beispielen wie diesem orientieren, die ein Paket namens verwendenmedia9 . Die Dokumentzusammenstellung zeigt keine Fehler, funktioniert aber trotzdem nicht.

Grundsätzlich wird ein Flash-Player in der PDF-Datei verwendet, um Dinge abzuspielen. Daher sind die Videos, die abgespielt werden, sehr begrenzt (hinsichtlich unterstützter Codecs, Erweiterungen usw.). Wenn ich der Dokumentation folge und ein altes Video konvertiere, das ich auf die richtigen Spezifikationen hatte, dann funktioniert es. Ich kann es jedoch nicht für Videos schaffen, die ich gerade erstelle, und ich kann nicht erkennen, was diesen Unterschied verursacht.

Laut der Dokumentation :

Flash Player unterstützt den effizienten H.264-Codec für die Videokomprimierung. MP4 / H.264-Videodateien können aus vorhandenen Videodateien und aus nummerierten Bitmap-Sequenzen mit den Befehlszeilentools ffmpeg ( http://ffmpeg.org .) Oder avconv ( http://libav.org .) Codiert werden. Um ein genaues Suchen innerhalb von Videodateien zu ermöglichen, müssen diese mit einer ausreichenden Anzahl von Keyframes codiert werden. Die Befehlszeile zum Umcodieren einer vorhandenen Videodatei video.avi in ​​video.mp4 liest

ffmpeg -i video.avi -vf scale="trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -profile:v high -pix_fmt yuv420p -g 30 -r 30 video.mp4 

Dinge, die ich ausprobiert habe:

Ich habe versucht, das Video von Matplotlib mit der Erstellung ffmpegmit den richtigen Eigenschaften bereits ( -pix_fmt yuv420p -g 30 -r 30, codec=libx264und.mp4 Erweiterung). Das hat nicht funktioniert.

Zweitens habe ich versucht, Videos mit verschiedenen Kodierungen und Erweiterungen zu erstellen, und dann die oben genannte Zeile (vom Autor des Pakets angegeben) zum Konvertieren verwendet. Das funktioniert aber auch nicht.

Zu diesem Zeitpunkt habe ich keine Ahnung, was ich sonst tun soll. Soweit ich weiß, verfolge ich jeden notwendigen Punkt, den die Docs stellen, aber anscheinend stimmt das nicht und ich kann nicht herausfinden, was fehlt.

Hier ist ein Beispiel eines meiner alten Videos, mit dem gearbeitet wurde ffmpeg -i(nachdem der obige Befehl verwendet wurde):

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'convB_C250_txy0.mp4.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.83.100 Duration: 00:00:20.83, start: 0.000000, bitrate: 11867 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1080x840, 11864 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : VideoHandler 

Und jetzt ein Beispiel für ein Video, das ich kürzlich erstellt habe, das den gleichen Befehl durchlaufen hat, aber das funktioniert nicht:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'convC1_old.mp4.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf57.83.100 Duration: 00:00:04.13, start: 0.000000, bitrate: 226 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1080x840, 222 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default) Metadata: handler_name : VideoHandler 

Der einzige Unterschied, den ich in beiden sehe, ist die Bitrate, die keinen Unterschied machen sollte. Trotzdem kann ich die Bitrate des neuen Videos nicht mit dem alten vergleichen.

Fehlt hier etwas?

2
Zeigt "media9" Fehlermeldungen an? Fügen Sie "-movflags + faststart" und "-bf 0" hinzu und überprüfen Sie. Gyan vor 6 Jahren 0
@ Mulvya Nein, es werden keine Warnungen oder Fehlermeldungen angezeigt. Ich habe eine Ausgabe kompiliert, die ich bereits in `.mp4` mit` ffmpeg -i convC1_old.mp4 -vf scale = "trunc (iw / 2) * 2: trunc (ih / 2) * 2" -c: v libx264 erstellt hatte -profile: v high -pix_fmt yuv420p -g 30 -r 30 -movflags + faststart -bf 0 convC1_old.mp4.mp4` entsprechend Ihrem Vorschlag, aber das Ergebnis war das gleiche. TomCho vor 6 Jahren 0

0 Antworten auf die Frage