Mittwoch, Januar 29, 2020

Overlay-timelapse-video auf einfarbigem hintergrund Farbe mit ffmpeg

Habe ich eine Ladung screenshots, die eine homepage mit dem Namen homescreen000001.png, homescreen000002.png, etc und ich versuche zu schaffen, ein Zeitraffer-video von diese Bilder mit ffmpeg.

Habe ich es in allgemein, wenn ich führen Sie die folgenden:

ffmpeg -f image2 \
       -i ~/Desktop/homescreen%06d.png \
       -r 0.5 \
       -s 1440x900 \ 
       -b:v 1M \
       -vcodec libx264 \ 
       -pix_fmt yuv420p \
       ~/Desktop/timelapse.mp4

Jedoch, es stellt sich heraus, dass einige der Bilder haben einen transparenten hintergrund, sodass der hintergrund zeigt sich, wie schwarz auf die Bilder.

Ich würde gerne einen weißen hintergrund, so dass ich versucht habe zu setzen, die sich mit ffmpeg wie folgt:

ffmpeg -f image2 \
       -loop 1 \
       -i ~/Desktop/whitebg.png \
       -i ~/Desktop/homescreen%06d.png \
       -filter_complex overlay \ 
       -r 0.5 \
       -s 1440x900 \ 
       -b:v 1M \
       -vcodec libx264 \ 
       -pix_fmt yuv420p \
       ~/Desktop/timelapse.mp4

Hier whitebg.png ist 2px x 2px png mit einem weissen hintergrund, und das ist es.

Diese ffmpeg-Befehl erzeugt eine wirklich winzige (in der Dateigröße) video-das ist nur ein weißer hintergrund.

Kann mir jemand erklären, wie ich kann die overlay-Bilder als Zeitraffer-video über einen weißen hintergrund mit ffmpeg?

InformationsquelleAutor hamchapman | 2014-07-27

2 Kommentare

  1. 12

    Funktioniert bei mir mit einer Serie von Bildern, die alle enthalten die Transparenz mit einem aktuellen build von ffmpeg, aber du hast nicht die komplette Ausgabe der Konsole, die würde haben nützliche Informationen, die Sie möglicherweise haben gezeigt, dass der Grund, warum es nicht wie erwartet funktioniert hat.

    Können Sie die color source filter als hintergrund:

    ffmpeg -f lavfi -i color=c=white:s=1440x900 -i homescreen%06d.png -filter_complex \
    "[0:v][1:v]overlay=shortest=1,format=yuv420p[out]" \
    -map "[out]" output.mp4
    
    • Müssen Sie manuell zur Verfügung stellen, die input-Größe für die color source filter, aber Sie können ein Skript erstellen, indem Sie mit ffprobe zu Holen Sie sich die Bild-frame-Größe, wie gezeigt, in FFprobe-Tipps.

    • Beachten Sie, dass durch -r 0.5 frames verworfen werden, um Platz für diese Ausgabe-Framerate, da standardmäßig die Eingabe -r 25. Dies kann oder kann nicht wünschenswert sein.

    • Erklärt, eine bitrate und mit nur einem pass ist im Allgemeinen nicht empfohlen. Verwenden -crf stattdessen, wie gezeigt, in der FFmpeg und H. 264-Encoding-Guide.

    • Stack-Überlauf ist für Fragen zur Programmierung nur. ffmpeg cli-Nutzung Fragen, die gestellt werden sollte, auf Super-User.

  2. 1

    Können Sie ersetzen die transparenten Pixel mit weißer diejenigen mit ImageMagick so:

    convert in.png -alpha off out.png
    

    oder für ein ganzes Verzeichnis (mit output-Dateien in ein Unterverzeichnis namens output) wie folgt:

    mkdir output
    for i in *.png; do
       convert "$i" -alpha off output/"$i"
    done
    

    Bitte erst sichern!

    ImageMagick ist hier obwohl es bereits installiert ist auf vielen Linux-Distributionen.

Kostenlose Online-Tests