ffprobe gibt codec_type = video für Bilder und Textdateien zurück

501
Alexander Bösecke

Ich habe ein Verzeichnis mit vielen Dateien unterschiedlichen Typs und möchte den Codec jeder Videodatei herausfinden. Dies funktioniert gut mit diesem Befehl:

$ ffprobe -v error -select_streams v -show_entries stream=codec_name,codec_type -of default=noprint_wrappers=1 video-file codec_name=hevc codec_type=video 

Leider bekomme ich auch ein Ergebnis für JPG- und Textdateien:

$ ffprobe -v error -select_streams v -show_entries stream=codec_name,codec_type -of default=noprint_wrappers=1 file.jpg  codec_name=mjpeg codec_type=video $ ffprobe -v error -select_streams v -show_entries stream=codec_name,codec_type -of default=noprint_wrappers=1 file.txt codec_name=ansi codec_type=video 

Beide Dateien sind eindeutig keine Videodateien. Nun, ich könnte die Dateiendungen herausfiltern oder diese Codec-Namen auf eine schwarze Liste setzen. Aber gibt es mit ffprobe keinen richtigen Weg?

2

2 Antworten auf die Frage

2
Gyan

FFmpeg ist hauptsächlich ein Prozessor für zeitgesteuerte Medienproben. Ein Bild ist ein Videostrom, der aus einem Frame besteht. Suchen nach pipein format=format_nameEintrag ist die beste Wahl für Bilder zu erfassen.

Was Textdateien angeht, konvertiert ffmpeg den .txtInhalt in ein Videobild und der codec_type gibt den dekodierten Stream-Typ an. Sie können noch format_nameeinmal nachsehen tty.

Danke, das hat mir sehr geholfen, das Problem zu verstehen. Kennen Sie andere Nicht-Videoformate, bei denen ffmpeg einen Videostream erkennt? Alexander Bösecke vor 5 Jahren 0
0
Alexander Bösecke

Mit Hilfe von Gyans Kommentar habe ich diese kleine Funktion für die Fischmuschel erstellt.

function gvc --description 'Get the video codec of a file if the file is a video' --argument file if test -f "$file" set format (ffprobe -v panic -select_streams v -show_entries format=format_name -of default=nokey=1:noprint_wrappers=1 $file) if test -n "$format" -a "$format" != "image2" -a "$format" != "tty" echo (ffprobe -v error -select_streams v -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 $file) end end return $status end