Verwenden von ffmpeg zum Konvertieren einer Datei in eine andere

525
developius

Für einige Hintergrundinformationen erstelle ich eine Webseite, auf der die Wiedergabeposition in einem eingebetteten Video angepasst wird, wenn der Benutzer einen Bildlauf vornimmt. Wenn Sie also einen Bildlauf durchführen, wird das Video vorgerückt und umgekehrt. Dies funktioniert perfekt mit einer Videodatei, bleibt aber einer anderen unerträglich. Es sollte beachtet werden, dass ich mich nicht für Audio interessiere, es wäre am besten, wenn die Dateien tatsächlich keine hätten.

Ich weiß nicht viel über Videoformate, aber ich habe in den letzten Stunden viel gelernt!

Dies ist also die Arbeitsvideodatei:

ffmpeg version 3.4.2 Copyright (c) 2000-2018 the FFmpeg developers built with Apple LLVM version 9.0.0 (clang-900.0.39.2) configuration: --prefix=/usr/local/Cellar/ffmpeg/3.4.2 --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --disable-jack --enable-gpl --enable-libmp3lame --enable-libx264 --enable-libxvid --enable-opencl --enable-videotoolbox --disable-lzma libavutil 55. 78.100 / 55. 78.100 libavcodec 57.107.100 / 57.107.100 libavformat 57. 83.100 / 57. 83.100 libavdevice 57. 10.100 / 57. 10.100 libavfilter 6.107.100 / 6.107.100 libavresample 3. 7. 0 / 3. 7. 0 libswscale 4. 8.100 / 4. 8.100 libswresample 2. 9.100 / 2. 9.100 libpostproc 54. 7.100 / 54. 7.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video1.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.11.101 Duration: 00:00:20.38, start: 0.000000, bitrate: 5367 kb/s Stream #0:0(eng): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 5199 kb/s, 24 fps, 24 tbr, 12288 tbn, 48 tbc (default) Metadata: handler_name : VideoHandler timecode : 00:00:00:00 Stream #0:1(eng): Data: none (rtp / 0x20707472), 164 kb/s Metadata: handler_name : HintHandler Stream #0:2(eng): Data: none (tmcd / 0x64636D74), 0 kb/s Metadata: handler_name : TimeCodeHandler timecode : 00:00:00:00 

Und hier ist der, der zurückbleibt:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video2.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isomiso2avc1mp41mp42 encoder : Lavf57.25.100 Duration: 00:00:19.20, start: 0.000000, bitrate: 7435 kb/s Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 7206 kb/s, 25 fps, 25 tbr, 12800 tbn, 50 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Data: none (rtp / 0x20707472), 225 kb/s (default) Metadata: creation_time : 2018-07-22T22:58:04.000000Z handler_name : GPAC ISO Hint Handler 

Wie Sie im zweiten Bild sehen können, habe ich versucht, einen Hinweistonstrom (über coding.com) hinzuzufügen, um die Reaktionszeit der Wiedergabe zu verbessern, da ich sie gelesen habe. Dies ist jedoch hilfreich, jedoch ohne Erfolg.

Ich frage mich, ob mir ein paar nette Leute helfen können, den Unterschied zwischen den beiden Dateien herauszufinden, damit ich es mit beiden gut zusammenstellen kann. Vielen Dank!

BEARBEITEN

Hier sind die Ausgaben ffmpeg -i <file>.mp4 -f null -wie in Kommentaren angefragt:

Und hier sind die Protokolle von ffmpeg -discard nokey -copyts -i <file>.mp4 -vf showinfo -f null -:

0
Kannst du genauer erklären, was du meinst? Ist die Standard-Videofilmterminologie "Scrub"? Ich bin kein Videofilmer. Ich verstehe nicht, wonach Sie fragen. Bitte antworten Sie nicht in Kommentaren. Bearbeiten Sie Ihre Frage, um sie klarer und vollständiger zu machen. Scott vor 6 Jahren 0
@Scott hoffe, das hilft - ich denke, dass Scrub die korrekte Terminologie für das Weiterkommen eines Videos ist, aber ich bin nicht zu 100% sicher. developius vor 6 Jahren 0
Wie hoch ist die Bildanzahl für jede Datei, wenn Sie `ffmpeg -i in.mp4 -f null -` ausführen? Gyan vor 6 Jahren 0
@Gyan wie oben, sie sind 24 (funktionierend) bzw. 25 (funktionieren nicht). Ich habe versucht, letzteres zu verringern, ohne Erfolg. developius vor 6 Jahren 0
Ich möchte keine Framerate. Bitte führen Sie den Befehl aus und geben Sie die Bildanzahl an. Gyan vor 6 Jahren 0
@Gyan Entschuldigung, habe deinen Kommentar falsch gelesen. Ich habe das für beide Dateien ausgeführt, aber in der Ausgabe scheint keine der Frames zu zählen. developius vor 6 Jahren 0
Teilen Sie das vollständige Protokoll. Gyan vor 6 Jahren 0
@Gyan siehe oben, danke! developius vor 6 Jahren 0
OK. Die Framerate scheint konstant zu sein. Jetzt werden Protokolle von ffmpeg -discard nokey -copyts -i in.mp4 -vf showinfo -f null -` angezeigt Gyan vor 6 Jahren 0
@Gyan hat die gerade hinzugefügt, danke! developius vor 6 Jahren 0

1 Antwort auf die Frage

1
Gyan

video2.mp4 hat spärliche Keyframes, während video1 jedes dritte Bild hat, konvertieren Sie es also so,

ffmpeg -i video2.mp4 -g 3 -profile:v baseline -movflags +faststart+rtphint out.mp4 
Vielen Dank!! Der Trick ist erledigt, das Scrollen ist jetzt wunderschön. Würde es Ihnen etwas ausmachen, zu "spärlichen Keyframes" zu verzieren und warum sie in dieser Situation helfen? developius vor 6 Jahren 0
"spärlicher Keyframe" bedeutet einfach, dass es nur wenige KFs gibt. Sie helfen nicht, "dichte Keyframes" tun dies, so dass der Befehl mit einem kleinen KF-Intervall neu codiert wird. Gyan vor 6 Jahren 1