Ich versuche, "genau 1 Bild von 10" Bildern eines Videos (dh 1 extrahieren, 9 lassen, dann wiederholen) für wissenschaftliche Zwecke zu extrahieren. Das Video ist 105 Bilder, 3,5 Sekunden, 29,97 fps (h.264, .mov, produziert von Nikon D3100).
Ich habe es hier hochgeladen .
VLC
Der folgende Befehl sollte 10 Bilder erzeugen, aber nur 6 Bilder. Ich habe verschiedene Szenenverhältnisse ausprobiert und keines von beiden erzeugt die richtige Anzahl von Bildern (nicht einmal annähernd korrekt).
vlc 1.mov --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=img- --scene-path=. vlc://quit
Würde mir bitte jemand sagen, wo das Problem liegt?
FFmpeg
FFmpeg scheint keinen Befehl genau für meinen Zweck zu haben. Der folgende Befehl extrahiert 3 Frames aus jeder Sekunde, aber da der FPS nicht genau 30 (eher 2,97) beträgt, führt dies für mich nicht zu korrekten Ergebnissen.
Außerdem gibt selbst FFmpeg mit diesem Befehl nicht die richtige Anzahl von Frames aus. Für 3,5 Sekunden Video erwarte ich höchstens 10 Bilder, aber ich bekomme 12 Bilder!
ffmpeg -i 1.mov -y -an -sameq -r 3 -f image2 -vcodec mjpeg %03d.jpg
Wie kann ich erreichen, was ich will?
-sameq
macht nicht das, was Sie wahrscheinlich denken, und wurde aus der aktuellen Version entfernt (das echte ffmpeg, das heißt, ich bin nicht sicher, ob es im gefälschten Ubuntu-ffmpeg ist). Verwenden Sie stattdessen qscale.Antworten:
Wählen Sie 1 Bild von 10 Bildern aus
Sie können den
select
Videofilter verwendenffmpeg
, um dies zu tun:Für die JPG-Ausgabe können Sie die Qualität mit variieren
-q:v
. Der effektive Bereich liegt zwischen 2 (beste Qualität) und 31 (schlechteste Qualität). Sie benötigen diese Option nicht, wenn Sie stattdessen in PNG ausgeben möchten.Dies wird ausgegeben
img_001.jpg
,img_002.jpg
,img_003.jpg
usw.quelle
unrecognized option '-filter:v'
" mit "FFmpeg Version SVN-r0.5.1-4: 0.5.1-1ubuntu1.3" (--enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable -libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect - -enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static)"
.Der wichtigste Aspekt in Ihrer Frage ist die Tatsache, dass das Video 29,97 Bilder pro Sekunde verwendet, nicht 30. Pesky NTSC.
Wie auch immer, ich denke, es wäre am einfachsten, einfach jeden Frame zu extrahieren und dann diejenigen zu entfernen, die Sie nicht benötigen:
Entfernen Sie dann diejenigen, die Sie nicht benötigen. Da jeder zehnte Frame mit einem endet
1.jpg
, können wir einfach alle anderen nehmen ...… Und wenn Sie sicher sind, dass Sie diese entfernen möchten:
Wenn Sie verwenden können
mencoder
, können Sie die in der Dokumentationframestep
erläuterte Option wie in Ihrem Fall ausprobieren . Ich persönlich konnte es allerdings nicht installieren / ausprobieren.framestep=10
quelle
Wenn Sie das Video zuerst in eine Reihe von rgb24- oder rgb32-Rohbildern konvertieren würden, könnten Sie möglicherweise die richtige Anzahl von Bildern erhalten, da es in der Originalform ungewöhnliche Bildtypen zu geben scheint, die möglicherweise überhaupt keine Bilder sind? ?
Bei den Original-Laserdiscs bestand das gesamte Video aus einer Reihe von Bildern mit einzelnen Bildnummern von 1 bis 100.000 oder mehr. Auf diese Weise können Sie wirklich eine Basis für zukünftige Konvertierungen oder Manipulationen festlegen.
Die Branche hat auf diese seltsame Komprimierungsidee umgestellt, um lediglich die ausgegebenen Gelder zu reduzieren und echte wissenschaftliche Formen des Umgangs mit Zahlen zu korrumpieren.
Sie müssen zuerst Audio als Wave-Datei extrahieren, um Audio nicht vollständig zu verlieren. Es scheint, dass FFMPEG identifizierende Informationen in jedes extrahierte Bild einfügt, denn wenn Sie versuchen, Bilder aus den gerade extrahierten zusammenzufügen und andere Bilder aus anderen Quellen mit derselben Erweiterung zu mischen, ignoriert ffmpeg die Bilder, die Sie versucht haben, in die Mitte von allem zu setzen .
Beim Laserdisc-Format wird die Bildrate einfach durch die Rate bestimmt, mit der Sie die aufeinander folgenden Bilder präsentieren, und wird in keiner Weise von den Bildern selbst gesteuert.
FFMPEG könnte eine Lehre aus der Wissenschaft anstelle der Kunst ziehen, um Bilder jeglicher Art richtig zu handhaben und anzuzeigen. Oder möglicherweise die gesamte AV-Branche selbst. Die Industrie muss die Fähigkeiten der Hardware wirklich verbessern und Rohdaten verwenden, die viel Speicher benötigen. Nichts geht über Rohdaten für Präzision und Genauigkeit.
quelle