Wie schneide ich ein Video genau mit ffmpeg ab?

1082
scaryguy

Ich habe ein Video. Hier ist die ffprobeAusgabe:

> ffprobe 7347-00009\ kliksa.mp4 ffprobe version 2.6.1 Copyright (c) 2007-2015 the FFmpeg developers built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-ffplay --enable-libfdk-aac --enable-libopus --enable-libquvi --enable-libx265 --enable-nonfree --enable-vda libavutil 54. 20.100 / 54. 20.100 libavcodec 56. 26.100 / 56. 26.100 libavformat 56. 25.101 / 56. 25.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.102 / 5. 11.102 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '7347-00009 kliksa.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: avc1isommp42 creation_time : 2015-09-17 14:04:14 Duration: 00:00:30.44, start: 0.000000, bitrate: 7238 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 6977 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) Metadata: creation_time : 2015-09-17 14:04:14 handler_name : ?Apple Video Media Handler encoder : inegy Cinecoder H.264 Encoder Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 255 kb/s (default) Metadata: creation_time : 2015-09-17 14:04:14 handler_name : ?Apple Sound Media Handler 

Alle Spieler zeigen, dass die Dauer 30 Sekunden beträgt. Aber es ist genau die Dauer 00:00:30.44wie ffprobegezeigt.

Ich möchte die Dauer der Videos auf EXACTLY setzen 00:00:30.00.

Ich habe das versucht:

ffmpeg -i 7347-00009\ kliksa.mp4 -c copy -ss 00:00:00.000 -to 30.000 test.mp4 

Aber ich habe noch eine Dauer von 00:00:30.02. Hier ist die Ausgabe von ffprobe:

> ffprobe test.mp4 ffprobe version 2.6.1 Copyright (c) 2007-2015 the FFmpeg developers built with Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn) configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.1 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-libfreetype --enable-libvorbis --enable-libvpx --enable-libass --enable-ffplay --enable-libfdk-aac --enable-libopus --enable-libquvi --enable-libx265 --enable-nonfree --enable-vda libavutil 54. 20.100 / 54. 20.100 libavcodec 56. 26.100 / 56. 26.100 libavformat 56. 25.101 / 56. 25.101 libavdevice 56. 4.100 / 56. 4.100 libavfilter 5. 11.102 / 5. 11.102 libavresample 2. 1. 0 / 2. 1. 0 libswscale 3. 1.101 / 3. 1.101 libswresample 1. 1.100 / 1. 1.100 libpostproc 53. 3.100 / 53. 3.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf56.25.101 Duration: 00:00:30.02, start: 0.000000, bitrate: 7240 kb/s Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 6982 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default) Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 255 kb/s (default) Metadata: handler_name : SoundHandler 

Wie kann ich also ein Video genau schneiden lassen?

3
Ist es nicht komisch, dass niemand weiß, wie es geht? : \ scaryguy vor 9 Jahren 0
Ich habe versucht, Ihre Ergebnisse zu reproduzieren (eine andere Dauer als angegeben), und hatte einige Schwierigkeiten. Alle Videos, die `ffmpeg 'für mich produzierte, waren genau die Dauer, nach der ich gefragt hatte. Als ich es replizierte, dachte ich, es könnte an einem Bitstream-Kopieren liegen, aber das erneute Codieren machte das Problem tatsächlich * schlimmer *. Ich vermute, es liegt an einer Nuance von `libx264`, aber das ist nur Spekulation. Sie erhalten jedoch möglicherweise eine Antwort [in der Mailingliste "ffmpeg-user"] (https://www.ffmpeg.org/contact.html). bertieb vor 9 Jahren 0
Ich denke, das Problem wird durch den Stream-Copy-Befehl verursacht. Es kann möglicherweise nicht in der Mitte von Ref-Frames geschnitten werden. Versuchen Sie es mit -vcodec libx264 als Test. Elliott B vor 8 Jahren 0

1 Antwort auf die Frage

0
Peter Bašista

Laut dieser Antwort ist das framegenaue Schneiden von Videos ffmpegohne Neucodierung nur an GOP-Grenzen möglich. Ich bin nicht sicher, ob es gilt, nur das Ende eines Videos zu schneiden oder nicht.

Im Übrigen kann ein Video mit konstanter Bildrate bei 25 Bildern pro Sekunde keine Dauer von 30,02 Sekunden haben. Ein Frame soll 1/25 Sekunden lang angezeigt werden, also 0,04 Sekunden.

Vielleicht hat dein Video nur schlechte Zeitstempel? Versuchen Sie, sie zu regenerieren:

ffmpeg -i test.mp4 -fflags +genpts output.mp4