Ich bin neu hier und besuche zum ersten Mal ein Forum wie dieses. Also bitte ich aufrichtig um Entschuldigung, wenn ich nichts tauge! Vielen Dank im Voraus für Ihre Geduld. Auf meinem Laptop verwende ich Windows CMD.
Ich versuche, die ersten 7,3 Sekunden aus einem Tanzvideo zu kürzen (zu löschen), dessen Ton mit diesen Bewegungen synchronisiert ist. Hier ist die Codezeile, mit der ich angefangen habe:
ffmpeg -ss 7.3 -i myVideo.mp4 -c copy trimmed.mp4
Während diese Bearbeitung sofort erfolgt (großartig), wird die Millisekunde ignoriert und die resultierende Ausgabedatei wird ab 7 Sekunden statt 7,3 gekürzt. Also habe ich versucht, Folgendes zu ändern (indem ich die Reihenfolge der Eingaben geändert habe):
ffmpeg -i myVideo.mp4 -ss 7.3 -c copy trimmed.mp4
Auch hier war die Bearbeitung sofort (großartig) und mit der richtigen Detailgenauigkeit im Millisekundenbereich fertig, allerdings kam es zu einer Verzögerung bei meinem Audio (wodurch das bearbeitete Video unbrauchbar wurde). Ich verwende derzeit die generische Software „Movies & TV“, um das Video abzuspielen, werde diese Videos aber irgendwann auf Vimeo hochladen, von wo aus sie auf mehrere Geräte gestreamt werden.
Ich habe alles gesucht und nur eine Lösung gefunden:
ffmpeg -ss 7.3 -i myVideo.mp4 -c:v libx264 -c:a aac trimmed.mp4
Obwohl dies genau funktioniert, dauert die Verarbeitung einer 450 MB großen Datei leider etwa 45 Minuten. Ich muss etwa 800 ähnliche Videos bearbeiten (die alle genau dasselbe Intro haben, das herausgeschnitten werden muss) und frage mich, ob es eine Möglichkeit gibt, die Millisekundengenauigkeit zu erreichen, ohne die Verarbeitung massiv zu verlangsamen. Oder könnte ich dieses Problem vielleicht anderweitig durch einen schnelleren Computer lösen? Ich bin für alle Ideen offen, vielen Dank für Ihre Hilfe!
Hier ist die ungeschnittene Befehlszeilenausgabe von meinemzweiteBefehl:
ffmpeg -i myVideo.mp4 -ss 7.3 -c copy trimmed.mp4
ffmpeg version N-94576-g1965161ef6 Copyright (c) 2000-2019 the FFmpeg developers
built with gcc 9.1.1 (GCC) 20190807
configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --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 --enable-libopenmpt
libavutil 56. 33.100 / 56. 33.100
libavcodec 58. 55.100 / 58. 55.100
libavformat 58. 31.101 / 58. 31.101
libavdevice 58. 9.100 / 58. 9.100
libavfilter 7. 58.100 / 7. 58.100
libswscale 5. 6.100 / 5. 6.100
libswresample 3. 6.100 / 3. 6.100
libpostproc 55. 6.100 / 55. 6.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'myVideo.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
creation_time : 2019-07-18T19:40:35.000000Z
Duration: 00:03:37.25, start: 0.000000, bitrate: 20007 kb/s
Stream #0:0(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
creation_time : 2019-07-18T19:40:35.000000Z
handler_name : Core Media Audio
Stream #0:1(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], 19864 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 60k tbc (default)
Metadata:
creation_time : 2019-07-18T19:40:35.000000Z
handler_name : Core Media Video
Output #0, mp4, to 'trimmed.mp4':
Metadata:
major_brand : mp42
minor_version : 1
compatible_brands: mp41mp42isom
encoder : Lavf58.31.101
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 19864 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 30k tbc (default)
Metadata:
creation_time : 2019-07-18T19:40:35.000000Z
handler_name : Core Media Video
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
Metadata:
creation_time : 2019-07-18T19:40:35.000000Z
handler_name : Core Media Audio
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Stream #0:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 6271 fps=2425 q=-1.0 Lsize= 523124kB time=00:03:29.93 bitrate=20412.9kbits/s speed=81.2x
video:519589kB audio:3357kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.034075%
Antwort1
Wenn Sie ein Video mit Bitstream Copy () schneiden -c copy
, können Sie nicht an beliebigen Zeitstempeln schneiden. Ein Video kann nur an Schlüsselbildern (Intra-Frames oder I-Frames) geschnitten werden, da diese Frames keine anderen Frames im Bitstream benötigen, um dekodiert zu werden.
Was ffmpeg tun wird, ist, dass es immer noch alle Frames einschließt, die für den Frame an dem von Ihnen angegebenen Punkt (7,2 s) erforderlich sind, um dekodierbar zu sein. Das bedeutet, dass Ihr geschnittenes Videokönnteenthält so viele Frames wie Ihr Original. ffmpeg weist diesen Frames jedoch einen negativen Zeitstempel zu, sodass sie nicht angezeigt werden sollten – allerdings beachten das nicht alle Player. Dies kann zu A/V-Synchronisierungsproblemen führen.
So oder so ist die einzige Methode, um hier volle Genauigkeit zu erreichen, das erneute Kodieren des Videos, wie Sie in Ihrem zweiten Befehl gezeigt haben. Die einzige Möglichkeit, dies zu beschleunigen, besteht darin, eine schnellere CPU zu verwenden, einen schnelleren GPU-Encoder zu verwenden (z. B. NVENC, wenn Sie eine unterstützte NVIDIA-GPU haben) oder dem Encoder zu erlauben, einige Funktionen zu deaktivieren, wodurch die Ausgabedatei etwas größer wird (die Kodierung wird weniger effizient). Siehe dieH.264-Kodierungshandbuchfür weitere Informationen. Beispiel:
ffmpeg -ss 7.3 -i myVideo.mp4 -c:v libx264 -preset faster -c:a aac trimmed.mp4
Der -preset
Wert kann auf andere Voreinstellungen eingestellt werden, je nachdem, wie viel Geduld Sie beim Kodieren haben.