Załóżmy, że mamy plik wideo some_video.
Jak uzyskać jego długość ze skryptu powłoki (z mplayer / transcode / gstreamer / vlc / ffmpeg / cokolwiek)?
VIDEO_LENGTH_IN_SECONDS=`ffmpeg .... -i some_video ... | grep -o .....`
ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0"
zwróci czas trwania filmu w sekundach.
Coś podobnego do:
Będzie to wybawienie
HH:MM:SS.ms
. Możesz także użyćffprobe
, który jest dostarczany z większością instalacji FFmpeg:… Lub:
Aby przeliczyć na sekundy (i zachować milisekundy), potokuj do:
Aby przekonwertować go na milisekundy, potokuj w:
Jeśli chcesz tylko sekundy bez milisekund, podłącz do:
Przykład:
źródło
ffprobe
pomocą narzędzia zaprojektowanego do dokładnie takich celów, które jest spakowaneffmpeg
:ffprobe -show_format input | sed -n '/duration/s/.*=//p'
(lubffprobe -show_format input | grep duration | sed 's/.*=//'
). Może @slhck może edytować to bezpośrednio w odpowiedzi.Jeśli nie masz dostępu
ffprobe
, możesz użyćmediainfo
.źródło
jq
itr
:mediainfo --Output="General;%Duration/String%" input
X s YYY ms
przeciwX.YYY
. Łatwo się dostosować,| sed -e 's/ s /./' -e 's/ ms//'
jeśli chcesz wybrać tę trasę i nie masz do niej dostępujq
.mediainfo --Output="General;%Duration/String3%" input
do wyjścia00:01:48.501
zamiast1 min 48 s
.