FFmpeg: Horizontales Video drehen und auffüllen

361
Sam T

Ich habe ein Portrait-Video (9: 16-Verhältnis) auf einem Telefon aufgenommen und möchte es in eine Landschaften (16: 9) umwandeln, entweder mit schwarzer Polsterung an der Seite oder idealerweise mit verschwommener Polsterung (aber nicht zu viel) wichtig).

Es gibt viele Fragen zu SE zu diesem Thema sowie Tutorials auf anderen Websites, aber ich konnte keine dieser Arbeiten machen. Sie neigen dazu, entweder gar nicht zu laufen, oder sie geben einen Fehler "Kein solcher Filter" aus und listen dann die Befehlseingabe auf, z

ffmpeg -i MC_orig.mp4 -filter_complex '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' outputfile.mp4

gibt den Fehler

[AVFilterGraph @ 000001bc89ea28c0] No such filter: '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' Error initializing complex filters. Invalid argument

Alle Tutorials / SE-Fragen, die ich gefunden habe, deuten auf eine ähnliche Eingabe wie oben hin, und alle geben grundsätzlich den gleichen Fehler.

Meine vollständige Konsolenausgabe (Windows 10, mit Eingabeaufforderung oder Cmder), einschließlich Details der verwendeten FFmpeg-Version, lautet wie folgt.

D:\Users\Sam\Videos\FFMPEG\bin>ffmpeg -i MC_orig.mp4 -filter_complex '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' outputfile.mp4 ffmpeg version N-91930-g0caa33c60b Copyright (c) 2000-2018 the FFmpeg developers built with gcc 8.2.1 (GCC) 20180813 configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth libavutil 56. 19.101 / 56. 19.101 libavcodec 58. 30.100 / 58. 30.100 libavformat 58. 18.100 / 58. 18.100 libavdevice 58. 4.103 / 58. 4.103 libavfilter 7. 29.100 / 7. 29.100 libswscale 5. 2.100 / 5. 2.100 libswresample 3. 2.100 / 3. 2.100 libpostproc 55. 2.100 / 55. 2.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'MC_orig.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2018-09-09T18:07:24.000000Z com.android.version: 7.0 Duration: 00:07:12.03, start: 0.000000, bitrate: 12081 kb/s Stream #0:0(eng): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 11950 kb/s, 24.94 fps, 24.92 tbr, 90k tbn, 300 tbc (default) Metadata: rotate : 90 creation_time : 2018-09-09T18:07:24.000000Z handler_name : VideoHandle Side data: displaymatrix: rotation of -90.00 degrees Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 127 kb/s (default) Metadata: creation_time : 2018-09-09T18:07:24.000000Z handler_name : SoundHandle [AVFilterGraph @ 000001bc89ea28c0] No such filter: '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' Error initializing complex filters. Invalid argument

1

1 Antwort auf die Frage

2
Gyan

Unter Windows sollten die Argumente also in Anführungszeichen gesetzt werden

-filter_complex "[0:v]scale=ih*16/9:-1...crop=h=iw*9/16"

Argumente innerhalb dieser können in einfache Anführungszeichen eingeschlossen werden

-vf "drawtext=text='Hello World':fontcolor=white" 
Danke, es läuft jetzt. Ist es alte Syntax, einfache Anführungszeichen zu verwenden? Nur alle Tutorials, die ich gesehen habe, hatten einfache Anführungszeichen. (Eigentlich hatten einige Doppel, waren aber auch gescheitert, aber aus einem anderen Grund, den ich jetzt vergesse!) Jedenfalls läuft es und ich werde es aktualisieren, wenn es fertig ist! Sam T vor 6 Jahren 0
Die Verwendung von Anführungszeichen bezieht sich auf die Shell und nicht auf ffmpeg. Bei Linux / OSX sind einfache Anführungszeichen in Ordnung. Gyan vor 6 Jahren 0
Ah, ich verstehe, danke dafür Sam T vor 6 Jahren 0
Nun ist es fertig und gibt die gewünschte Ausgabe. Ich möchte es jedoch von einem `mp4` zu einem` avi` ändern. Ich hatte dies mit einer vorherigen Datei mit dem Code `ffmpeg -i MC_orig.mp4 -vcodec copy out.avi` gemacht und es funktionierte einwandfrei. Wenn ich jedoch das Video eingebe, das ich gerade mit Ihrer Hilfe erstellt habe, wird ffmpeg ausgeführt, aber das Video funktioniert nicht (Audio funktioniert, aber kein Video). Sam T vor 6 Jahren 0
(Mir ist klar, dass man dies normalerweise als separate Frage stellen würde, aber ich füge es hier hinzu, weil ich es * vorher * konnte *, aber mit * diesem Video * habe ich ein Problem.) Sam T vor 6 Jahren 0
Geben Sie die Ausgabe von "ffmpeg -i outputfile.mp4" frei Gyan vor 6 Jahren 0
Da es ziemlich lang ist, habe ich es dem ursprünglichen Beitrag hinzugefügt. Danke für deine Hilfe Sam T vor 6 Jahren 0
Ihre Ausgabeauflösung ist höher als der H264-Decoder der meisten Player. Der VLC sollte das Video zwar immer noch abspielen, Sie müssen jedoch auf eine Breite von 1920 oder weniger herunterskalieren, um die Kompatibilität zu gewährleisten. Das Speichern von H264 mit B-Frames in AVI ist hackig und nicht wirklich zu empfehlen. Fügen Sie `-bf 0` hinzu, um sie zu deaktivieren. Gyan vor 6 Jahren 0
Ich muss gestehen, ich weiß nicht, was ein B-Frame ist. Der einzige Grund, warum ich versuche zu konvertieren, ist, dass ich ein Video habe, das ich mit einer anderen Kamera aufnehmen möchte, und das in AVI ist (dies ist der erste Teil einer Rede auf einer Kamera und die zweite Hälfte auf der Telefonvideo) - Das AVI-Video ist ein Video von besserer Qualität (von einer geeigneten Videokamera), daher dachte ich, dass es am besten ist, das Videokameravideo des Telefons in AVI zu konvertieren und anschließend zu konatern. \\ Klingt das wie das Richtige für Sie, und (wenn ja) können Sie mir sagen, welchen Code ich verwenden soll, um von MP4 nach AVI zu konvertieren? Vielen Dank Sam T vor 6 Jahren 0
Dies ist jetzt zu einer separaten Frage geworden. Machen Sie eine mit Protokollen beider Dateien. Gyan vor 6 Jahren 0
Ich habe mein Problem tatsächlich behoben, indem ich zusätzlich zu ffmpeg eine Handbremse verwendet habe. Daher habe ich die Frage zurückgesetzt, sodass nur das ursprüngliche Problem enthalten ist. Danke für deine Hilfe! Sam T vor 6 Jahren 0