Schnelle VP9-Kodierung von Standbildern

Ich verwende diesen Befehl, um "myFile.webm" zu erstellen, ein VP9-Video mit einem Standbild:

$ ffmpeg -i myOriginialPureAudioFile.opus -loop 1 -i myAudioFile_640x360.png -shortest -threads 4 -speed max -c:a copy myFile.webm
Input #0, ogg, from 'myOriginialPureAudioFile.opus':
  Duration: 01:53:19.80, start: 0.000000, bitrate: 24 kb/s
    Stream #0:0(eng): Audio: opus, 48000 Hz, mono, fltp
    Metadata:
      LANGUAGE        : eng
      TITLE           : unnamed
      ENCODER         : Lavf57.83.100
Input #1, png_pipe, from 'myAudioFile_640x360.png':
  Duration: N/A, bitrate: N/A
    Stream #1:0: Video: png, rgb24(pc), 640x360 [SAR 72:72 DAR 16:9], 25 fps, 25 tbr, 25 tbn, 25 tbc
File 'myFile.webm' already exists. Overwrite ? [y/N] y
Stream mapping:
  Stream #1:0 -> #0:0 (png (native) -> vp9 (libvpx-vp9))
  Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
[libvpx-vp9 @ 0x5655578268c0] v1.3.0
Output #0, webm, to 'myFile.webm':
  Metadata:
    encoder         : Lavf57.83.100
    Stream #0:0: Video: vp9 (libvpx-vp9), yuv420p, 640x360 [SAR 1:1 DAR 16:9], q=-1--1, 200 kb/s, 25 fps, 1k tbn, 25 tbc
    Metadata:
      encoder         : Lavc57.107.100 libvpx-vp9
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
    Stream #0:1(eng): Audio: opus, 48000 Hz, mono, fltp
    Metadata:
      LANGUAGE        : eng
      TITLE           : unnamed
      ENCODER         : Lavf57.83.100
frame= 4863 fps= 22 q=0.0 Lsize=     987kB time=00:03:14.48 bitrate=  41.6kbits/s speed=0.879x

Die Geschwindigkeit beträgt etwa 0,88x, wie kann ich diese Codierung viel schneller machen?

Warum VP9 verwenden? x264?
@Gyan Weil ich das 2-Stunden-Audio im Opus-Format nicht neu codieren möchte. Ich verwende, -c:a copyweil der WebM-Container Opus Audio unterstützt
So auch MP4 mit -strict -2hinzugefügt.
@Gyan Ich glaube nicht, dass YouTube eine MP4-Datei mit Opus-Audio akzeptieren wird
Versuchen Sie es mit einer sehr kurzen Datei.
@Gyan Es funktioniert, danke. Aber ich denke, ich bleibe bei der Standard-Webm-Datei.

Antworten (2)

Auf meinem Computer ist Geschwindigkeit = 0,953x bei Verwendung der Standardeinstellung

c:\ffmpeg\ffmpeg -y -i out_music.opus -loop 1 -i temp.png -shortest -threads 4 -speed max -c:a copy  myFile.webm

frame=  184 fps= 24 q=0.0 Lsize=     843kB time=00:00:07.32 bitrate= 943.8kbits/s speed=0.953x

Geschwindigkeit = 1,73x bei Verwendung der Echtzeiteinstellung

c:\ffmpeg\ffmpeg -y -i out_music.opus -loop 1 -i temp.png -shortest -threads 4 -speed max -c:a copy -deadline realtime myFile.webm

frame=  491 fps= 43 q=0.0 Lsize=    1809kB time=00:00:19.60 bitrate= 755.9kbits/s speed=1.73x

Da die Eingabe eine PNG-Datei ist, könnte die Bildrate pro Sekunde geringer sein; Geschwindigkeit = 5,84x bei Verwendung der fps = 5 - Einstellung

c:\ffmpeg\ffmpeg -y -i out_music.opus -loop 1 -i temp.png -shortest -threads 4 -speed max -c:a copy -deadline realtime -vf fps=5 myFile.webm

frame=  218 fps= 29 q=0.0 Lsize=    1316kB time=00:00:43.40 bitrate= 248.3kbits/s speed=5.84x

Referenz: https://trac.ffmpeg.org/wiki/Encode/VP9

Nur zur Information. Laut ffmpeg-Filter-Dokumentation zum fpsFilter, -vf fps=5wäre gleich -r 5als Ausgabeoption zu lesenman ffmpeg | sed -n "/-r.:/,/output option/p"

Eine Lösung ( hier gefunden ) besteht darin, einen sehr kleinen -framerateWert zu verwenden.