====== ffprobe ======
* [[http://www.ffmpeg.org/ffprobe.html]]
> ffprobe -v error -show_format -i Film.mkv
> ffprobe -v error -show_packets -i Film.mkv
> ffprobe -v error -show_streams -i Film.mkv
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_entries stream=codec_type -of default=noprint_wrappers=1 -i Film.mkv
**Zum auslesen der Video-Eigenschaften ist [[mediainfo]] deutlich besser geeignet! Es kann auch den Scan-Type (//Progressive// oder //Interlaced//) mit einer Ausnahme (manchmal gibt es anstelle von 50p, 50i aus) recht gut erkennen.**\\
===== Video-Eigenschaften auslesen =====
Die wichtigsten Infos kann man mit diesem Kommando auslesen:
ffprobe Film.wmv
...
Duration: 00:02:10.00, start: 0.000000, bitrate: 442 kb/s
Stream #0.0(heb): Audio: wmav2, 22050 Hz, 1 channels, s16, 16 kb/s
Stream #0.1(heb): Video: wmv3 (Main), yuv420p, 640x480, 413 kb/s, 20 tbr, 1k tbn, 1k tbc
Manchmal wird direkt vor "tbr" auch noch extra "fps" aufgeführt.
FFmpeg verwendet drei verschiedene Zeitangaben:
* http://ffmpeg-users.933282.n4.nabble.com/What-does-the-output-of-ffmpeg-mean-tbr-tbn-tbc-etc-td941538.html
* http://stackoverflow.com/questions/3199489/meaning-of-ffmpeg-output-tbc-tbn-tbr
tbn = the time base in AVStream that has come from the container
tbc = the time base in AVCodecContext for the codec used for a particular stream
tbr = tbr is guessed from the video stream and is the value users want to see when they look for the video frame rate
25 fps - Bilder/Sekunde
25 tbr - geratene Bildwiederholrate des Datenstromes
90k tbn - Zeitbasis des AV-Kontainers
50 tbc - Zeitbasis im AV-Kodec-Kontext
**Also ist die Angabe "tbr" im allgemeinen mit "fps" gleichzusetzen.**
Man kann sich die Infos auch in einem anderen Format ausgeben lassen.
Eines, welches besser maschinenlesbar ist:
> ffprobe -i Film.wmv -show_streams 2>/dev/null
[STREAM]
index=0
codec_name=wmav2
codec_long_name=Windows Media Audio 2
codec_type=audio
codec_time_base=0/1
codec_tag_string=a[1][0][0]
codec_tag=0x0161
sample_rate=22050.000000
channels=1
bits_per_sample=0
r_frame_rate=0/0
avg_frame_rate=250/81
time_base=1/1000
start_time=0.000000
duration=130.000000
TAG:language=heb
[/STREAM]
[STREAM]
index=1
codec_name=wmv3
codec_long_name=Windows Media Video 9
codec_type=video
codec_time_base=1/1000
codec_tag_string=WMV3
codec_tag=0x33564d57
width=640
height=480
has_b_frames=0
pix_fmt=yuv420p
r_frame_rate=20/1
avg_frame_rate=0/0
time_base=1/1000
start_time=0.000000
duration=130.000000
TAG:language=heb
[/STREAM]
> ffprobe -show_streams Film.mpg 2>/dev/null | sed 's/ /$/g' | tr -s '\n' ' ' | sed 's# \[/STREAM\]# [/STREAM]|#g' | tr -s '|' '\n' | fgrep codec_type=video | tr -s ' ' '\n' | sed 's/[$]/ /g' | egrep 'codec_time_base=|_frame_rate=|time_base='
codec_time_base=1/50
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/90000
weitere Infos kann man sich mit diesem Kommando anzeigen lassen:
> ffprobe -show_format Film.wmv 2>/dev/null
[FORMAT]
filename=Film.wmv
nb_streams=2
format_name=asf
format_long_name=ASF format
start_time=0.000000
duration=130.000000
size=7197119.000000
bit_rate=442899.000000
TAG:WMFSDKVersion=10.00.00.3802
TAG:WMFSDKNeeded=0.0.0.0000
TAG:IsVBR=0
[/FORMAT]
> ffprobe -show_format Film.mpg 2>/dev/null
[FORMAT]
filename=Du_bist_was_Du_isst.mpg
nb_streams=3
format_name=mpeg
format_long_name=MPEG-PS format
start_time=0.287267
duration=0.928000
size=4992397312.000000
bit_rate=-2147483648.000000
[/FORMAT]
> ffprobe -show_packets Film.mpg 2>/dev/null | fgrep stream_index= | head -n1000 | sort | uniq
stream_index=0
stream_index=1
stream_index=2
$ du -k Avengers_4_-_Endgame.mpg
7448081 Avengers_4_-_Endgame.mpg
$ ffprobe -probesize 9223372036G -analyzeduration 9223372036G Avengers_4_-_Endgame.mpg
Die Option ''-probesize'' funktioniert nicht alleine, es muss zusammen mit einem weiteren (''-analyzeduration'', ''-fpsprobesize'') verwendet werden.
$ ffprobe -probesize 9223372036G -analyzeduration 9223372036G -i Avengers_4_-_Endgame.mpg
__Die besten Ergebnisse erhält man, wenn die beiden Optionen ''-probesize'' und ''-analyzeduration'' zusammen verwendet werden (man kann hier ganz einfach immer den Maximalwert angeben):__
$ ffprobe -probesize 9223372036G -analyzeduration 9223372036G -i Avengers_4_-_Endgame.mpg
===== Show Streams =====
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_streams -i "${1}"
[STREAM]
index=0
codec_name=mpeg2video
codec_long_name=MPEG-2 video
profile=Main
codec_type=video
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=720
height=576
coded_width=0
coded_height=0
closed_captions=0
film_grain=0
has_b_frames=1
sample_aspect_ratio=16:15
display_aspect_ratio=4:3
pix_fmt=yuv420p
level=8
color_range=tv
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=progressive
refs=1
id=0x1e0
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/90000
start_pts=25854
start_time=0.287267
duration_ts=146073600
duration=1623.040000
...
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_streams -show_data -i "${1}"
[STREAM]
index=0
codec_name=mpeg2video
codec_long_name=MPEG-2 video
profile=Main
codec_type=video
codec_tag_string=[0][0][0][0]
codec_tag=0x0000
width=720
height=576
coded_width=0
coded_height=0
closed_captions=0
film_grain=0
has_b_frames=1
sample_aspect_ratio=16:15
display_aspect_ratio=4:3
pix_fmt=yuv420p
level=8
color_range=tv
color_space=unknown
color_transfer=unknown
color_primaries=unknown
chroma_location=left
field_order=progressive
refs=1
id=0x1e0
r_frame_rate=25/1
avg_frame_rate=25/1
time_base=1/90000
start_pts=25854
start_time=0.287267
duration_ts=146073600
duration=1623.040000
...
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_streams -show_format -loglevel warning -print_format json -i "${1}"
{
"streams": [
{
"index": 0,
"codec_name": "mpeg2video",
"codec_long_name": "MPEG-2 video",
"profile": "Main",
"codec_type": "video",
"codec_tag_string": "[0][0][0][0]",
"codec_tag": "0x0000",
"width": 720,
"height": 576,
"coded_width": 0,
"coded_height": 0,
"closed_captions": 0,
"film_grain": 0,
"has_b_frames": 1,
"sample_aspect_ratio": "16:15",
"display_aspect_ratio": "4:3",
"pix_fmt": "yuv420p",
"level": 8,
"color_range": "tv",
"chroma_location": "left",
"field_order": "progressive",
"refs": 1,
"id": "0x1e0",
"r_frame_rate": "25/1",
"avg_frame_rate": "25/1",
"time_base": "1/90000",
"start_pts": 25854,
"start_time": "0.287267",
"duration_ts": 146073600,
"duration": "1623.040000",
...
===== Show Entries =====
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_entries format_tags=title -of compact=p=0:nk=1 -i "${1}"
Winnetou - Eine neue Welt (Originaltitel: Winnetou & Old Shatterhand)
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_entries format_tags=comment -of compact=p=0:nk=1 -i "${1}"
FSK 12 / 2016 / 117 Min. / imdb tt4893452 / Nik Xhelilaj, Wotan Wilke Möhring, Jürgen Vogel
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_entries format_tags=description -of compact=p=0:nk=1 -i "${1}"
Apachenhäuptling Winnetou schließt Freundschaft mit dem deutschen Eisenbahningenieur Karl May, der später Old Shatterhand genannt wird.
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_entries stream=codec_type -of default=noprint_wrappers=1 -i "${1}"
codec_type=video
codec_type=audio
codec_type=subtitle
> ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -select_streams v:0 -show_entries stream=width,height,duration,bit_rate -of default=noprint_wrappers=1 -i "${1}"
width=720
height=576
duration=1623.040000
bit_rate=N/A
Spuren zählen:
> CODEC_TYPE="$(ffprobe -v error -probesize 9223372036G -analyzeduration 9223372036G -show_entries stream=codec_type -of default=noprint_wrappers=1 -i Film.mkv)"
> echo "${CODEC_TYPE}" | grep -F 'codec_type=video' | nl | awk '{sub("="," ");print $1,$3}' | tail -n1
1 video
> echo "${CODEC_TYPE}" | grep -F 'codec_type=audio' | nl | awk '{sub("="," ");print $1,$3}' | tail -n1
4 audio
> echo "${CODEC_TYPE}" | grep -F 'codec_type=subtitle' | nl | awk '{sub("="," ");print $1,$3}' | tail -n1
3 subtitle