Video-Verkettung mit Überlagerung

2426
user3550682

Ich habe ein Video von einem Gopro aufgenommen, das in drei Teile aufgeteilt ist, da die maximale Dateigröße nach etwa 17 Minuten erreicht ist und das Gopro es automatisch in mehrere Teile aufteilt. Ich habe auch eine Camstudio-Aufnahme von meinem Desktop.

Ich muss die 3 Gopro-Videos verketten und die Camstudio-Aufnahme als Bild in Bild-Art überlagern.

Dh es würde als unten enden, wo die 9 die Überlagerung und 1,2,3 die Gopro-Videos sind

999999999999999

111111222222333

Ich muss dies regelmäßig durchführen (und mehrere Videos), also schreibe ich eine Batch-Datei, um die gewünschte Ausgabe zu erzeugen, in einem Format, das von Windows Media Player ohne heruntergeladene Codecs abgespielt werden kann. Eine Reduzierung der Dateigröße auf maximal etwa 1 GB / 45 Minuten wäre ebenfalls nützlich.

Kann jemand einen Weg vorschlagen, dies in FFmpeg oder Libav zu tun? Ich kann die Verkettung ODER das Overlay in FFmpeg machen, kann aber nicht beides scheinen. Vielleicht muss ich nur die Verkettung zu einer temporären Datei durchführen und diese dann als Eingabe für das Overlay verwenden?

Zur Zeit verwende ich die folgenden 2 Befehle in ffmpeg, um dies zu erreichen, aber die Dateigröße ist riesig und die Qualität ist nicht großartig, außerdem dauert es lange. Derzeit liegt die Ausgabe für 7 Minuten bei etwa 1 GB, aber meine Videos können bis zu 45 Minuten betragen. Daher muss ich die Dateigröße für 45 Minuten vorzugsweise auf 1-2 GB reduzieren

ffmpeg -i concat:1.mp4|2.mp4|3.mp4" -an -q:v 9 -preset veryslow -crf 28 -vcodec wmv2 temp.wmv ffmpeg -i temp.wmv -an -vf"movie=overlay.avi, scale=iw:ih; [in][small] overlay =0:0 [out]" -q:v 9 -preset veryslow -crf 28 -vcodec wmv2 output.wmv 

Die Ausgabe von ffmpeg concat lautet:

>ffmpeg -i "concat:GOPR0133.mp4|GP010133.mp4|GP020133.mp4" -an -q:v 9 -vcodec wm v2 70-70KMtemp.wmv ffmpeg version N-61191-gea9399f Copyright (c) 2000-2014 the FFmpeg developers built on Mar 8 2014 22:01:33 with gcc 4.8.2 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp ack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable -zlib libavutil 52. 66.101 / 52. 66.101 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 34.100 / 55. 34.100 libavdevice 55. 11.100 / 55. 11.100 libavfilter 4. 3.100 / 4. 3.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 [mov,mp4,m4a,3gp,3g2,mj2 @ 027c29c0] Found duplicated MOOV Atom. Skipped it Last message repeated 1 times Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'concat:GOPR0133.mp4|GP010133.mp4|GP0201 33.mp4': Metadata: creation_time : 2014-04-17 09:47:21 minor_version : 0 major_brand : avc1 compatible_brands: avc1isom Duration: 00:17:24.30, start: 0.000000, bitrate: 71321 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709 ), 1280x720 [SAR 1:1 DAR 16:9], 30002 kb/s, 100 fps, 100 tbr, 180k tbn, 200 tbc (default) Metadata: creation_time : 2014-04-17 09:47:21 handler_name : GoPro AVC Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 12 8 kb/s (default) Metadata: creation_time : 2014-04-17 09:47:21 handler_name : GoPro AAC [swscaler @ 036088a0] deprecated pixel format used, make sure you did set range correctly Output #0, asf, to '70-70KMtemp.wmv': Metadata: compatible_brands: avc1isom minor_version : 0 major_brand : avc1 WM/EncodingSettings: Lavf55.34.100 Stream #0:0(eng): Video: wmv2 (WMV2 / 0x32564D57), yuv420p, 1280x720 [SAR 1: 1 DAR 16:9], q=2-31, 200 kb/s, 1k tbn, 100 tbc (default) Metadata: creation_time : 2014-04-17 09:47:21 handler_name : GoPro AVC Stream mapping: Stream #0:0 -> #0:0 (h264 -> wmv2) Press [q] to stop, [?] for help frame= 6 fps=0.0 q=9.0 size= 60kB time=00:00:00.06 bitrate=8195.6kbits/s frame= 15 fps= 14 q=9.0 size= 132kB time=00:00:00.15 bitrate=7203.6kbits/s frame= 25 fps= 16 q=9.0 size= 207kB time=00:00:00.25 bitrate=6779.7kbits/s frame= 33 fps= 16 q=9.0 size= 235kB time=00:00:00.33 bitrate=5834.4kbits/s frame= 39 fps= 15 q=9.0 size= 294kB time=00:00:00.39 bitrate=6183.9kbits/s frame= 47 fps= 15 q=9.0 Lsize= 326kB time=00:00:00.47 bitrate=5677.5kbits/ s etc.... 

Dann bekomme ich die Ausgabe beim Overlay

>ffmpeg -i GOPR0131.mp4 -an -vf "movie=20140417_0930_55.avi, scale=iw:ih [small] ; [in][small] overlay =0:0 [out]" -q:v 9 -preset veryslow -crf 28 37-38KM.wmv ffmpeg version N-61191-gea9399f Copyright (c) 2000-2014 the FFmpeg developers built on Mar 8 2014 22:01:33 with gcc 4.8.2 (GCC) configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-av isynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enab le-iconv --enable-libass --enable-libbluray --enable-libcaca --enable-libfreetyp e --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --ena ble-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-l ibopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libsp eex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aa cenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavp ack --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable -zlib libavutil 52. 66.101 / 52. 66.101 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 34.100 / 55. 34.100 libavdevice 55. 11.100 / 55. 11.100 libavfilter 4. 3.100 / 4. 3.100 libswscale 2. 5.101 / 2. 5.101 libswresample 0. 18.100 / 0. 18.100 libpostproc 52. 3.100 / 52. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'GOPR0131.mp4': Metadata: major_brand : avc1 minor_version : 0 compatible_brands: avc1isom creation_time : 2014-04-17 09:29:13 Duration: 00:11:59.29, start: 0.000000, bitrate: 30160 kb/s Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709 ), 1280x720 [SAR 1:1 DAR 16:9], 30005 kb/s, 100 fps, 100 tbr, 180k tbn, 200 tbc (default) Metadata: creation_time : 2014-04-17 09:29:13 handler_name : GoPro AVC Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 12 8 kb/s (default) Metadata: creation_time : 2014-04-17 09:29:13 handler_name : GoPro AAC Codec AVOption preset (Set the encoding preset (cf. x264 --fullhelp)) specified for output file #0 (37-38KM.wmv) has not been used for any stream. The most like ly reason is either wrong type (e.g. a video option with no video streams) or th at it is a private option of some encoder which was not actually used for any st ream. Codec AVOption crf (Select the quality for constant quality mode) specified for output file #0 (37-38KM.wmv) has not been used for any stream. The most likely r eason is either wrong type (e.g. a video option with no video streams) or that i t is a private option of some encoder which was not actually used for any stream . [swscaler @ 0401a560] deprecated pixel format used, make sure you did set range correctly Output #0, asf, to '37-38KM.wmv': Metadata: major_brand : avc1 minor_version : 0 compatible_brands: avc1isom WM/EncodingSettings: Lavf55.34.100 Stream #0:0(eng): Video: msmpeg4v3 (msmpeg4) (MP43 / 0x3334504D), yuv420p, 1 280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 1k tbn, 100 tbc (default) Metadata: creation_time : 2014-04-17 09:29:13 handler_name : GoPro AVC Stream mapping: Stream #0:0 -> #0:0 (h264 -> msmpeg4) Press [q] to stop, [?] for help frame= 6 fps=0.0 q=9.0 size= 23kB time=00:00:00.06 bitrate=3075.9kbits/s frame= 16 fps= 15 q=9.0 size= 57kB time=00:00:00.16 bitrate=2913.4kbits/s frame= 25 fps= 16 q=9.0 size= 91kB time=00:00:00.25 bitrate=2991.0kbits/s frame= 32 fps= 15 q=9.0 Lsize= 113kB time=00:00:00.32 bitrate=2898.9kbits/ s etc... 
1
Können Sie uns ein bisschen mehr Informationen darüber geben, welche Codecs / Formate die GoPro und Ihre Desktop-Aufnahmen haben? Das Abspielen in WMP ohne zusätzliche Codecs ist auch schwierig, wenn Sie keine neuere Version von Windows ausführen. Eine vollständige Rückwärtskompatibilität mit beispielsweise Windows XP kann nur durch Auswahl eines ineffizienten Codecs erreicht werden. slhck vor 10 Jahren 0
Sicher, die Desktop-Aufnahme wird von camstudio gemacht und verwendet den verlustfreien Camstudio-Codec 1.5. Die Gopro-Kamera zeichnet MPEG4-Dateien (.mp4) mit h.264-Komprimierung auf. Ich kann ohne Abwärtskompatibilität zu XP leben, solange es in Media Player unter Windows 7 ohne zusätzliche Installation abgespielt werden kann (das Unternehmen ist streng darauf). user3550682 vor 10 Jahren 0
Die ursprüngliche Frage wurde gerade bearbeitet, um zu zeigen, was ich gerade mache user3550682 vor 10 Jahren 0
Vielen Dank! Es wäre großartig, wenn Sie auch die vollständige Befehlszeilenausgabe anzeigen könnten. Auf diese Weise können wir sehen, was los ist. slhck vor 10 Jahren 0
Sicher, ich habe versucht, es in meine Frage zu editieren (sorry, wenn es unordentlich ist, bin neu dabei) user3550682 vor 10 Jahren 0
Wenn dies hilfreich ist, verwendet gopro die niedrigste Einstellung (720p = 1280x720 Pixel (16: 9)). Das Video wird jedoch im Media Player abgespielt. Ich weiß nicht, ob es möglich ist, die Auflösung zu verringern, um die Dateigröße zu verringern, während das Bild weiterhin still steht gute Qualität auf einem Computerbildschirm. user3550682 vor 10 Jahren 0

1 Antwort auf die Frage

2
LordNeckbeard

Sie können die Verwendung setpts, scale, concat, overlay, und formatFilter. Ich gehe davon aus, dass alle Eingaben 1280x720 sind, da die Größe der Datei, die Sie überlagern möchten, derzeit unbekannt ist.

Beispiel

ffmpeg -i gopro0.mp4 -i gopro1.mp4 -i gopro2.mp4 -i over.avi -filter_complex \ "[0:v]setpts=PTS-STARTPTS[v0]; \ [1:v]setpts=PTS-STARTPTS[v1]; \ [2:v]setpts=PTS-STARTPTS[v2]; \ [3:v]setpts=PTS-STARTPTS,scale=iw/4:-2[fg]; \ [v0][v1][v2]concat=n=3:v=1:a=1[bg][a]; \ [bg][fg]overlay=W-w-10:10,format=yuv420p[v]" -map "[v]" -map "[a]" output.mp4 

Was macht jeder Filter?

  • setptsDie Zeitmarken beginnen bei 0, was von concatund empfohlen wird overlay.

  • scalemacht over.avieine kleinere Rahmengröße.

  • concat wird jede Eingabe verketten.

  • overlayplatziert den skalierten Bereich over.aviin der oberen rechten Ecke mit einem Abstand von 10 Pixeln. In der overlayDokumentation finden Sie zusätzliche Optionen zu Eingaben, die ( shortestund eof_actionspeziell) unterschiedliche Dauer haben .

  • formatstellt sicher, dass Ihre Ausgabe ein Chroma-Subsampling-Schema verwendet, das mit allen Playern kompatibel ist (vorausgesetzt, Sie verwenden den Encoder, libx264der standardmäßig für MP4 verwendet wird, wenn dies von Ihrem ffmpegBuild unterstützt wird ).

Anmerkungen

  • Wenn die Ausgabe eine kleinere Frame-Größe haben soll, fügen Sie eine weitere hinzu scale:

    [bg][fg]overlay=W-w-10:10,scale=640:-2,format=yuv420p[v]" 
  • Ich konnte diese Beispiele zu diesem Zeitpunkt nicht testen, also lassen Sie einen Kommentar, wenn etwas nicht wie erwartet funktioniert, und ich werde es mir am Sonntag ansehen, es sei denn, andere geben zusätzliche Hilfe.

  • Dateitypen, die von Windows Media Center (Windows 7) unterstützt werden, sind nahezu wertlos, da sie keine genauen Angaben enthalten. Daher müssen Sie möglicherweise experimentieren oder andere, die mit Windows 7 vertraut sind, können diese Antwort bearbeiten.

Das ist großartig, danke funktioniert perfekt. Die Ausgabe hat eine viel bessere Qualität und eine geringere Dateigröße, und der Prozess läuft viel schneller ab als ich es alleine geschafft habe. user3550682 vor 10 Jahren 0