Konsoldan bir video dosyasının uzunluğunu nasıl alabilirim?


24

Diyelim ki bir video dosyası var.

Uzunluğunu bir kabuk betiğinden nasıl alabilirim (mplayer / transcode / gstreamer / vlc / ffmpeg / neyse)?

VIDEO_LENGTH_IN_SECONDS=`ffmpeg .... -i some_video ... | grep -o .....`

Yanıtlar:


33
ffprobe -i some_video -show_entries format=duration -v quiet -of csv="p=0"

video süresini saniye cinsinden döndürür.


Ffprobe hakkında bir şey bilmiyordum , teşekkürler!
ckujau

21

Şuna benzer bir şey:

ffmpeg -i input 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//

Bu teslim edecek: HH:MM:SS.ms. ffprobeÇoğu FFmpeg kurulumuyla birlikte verilenleri de kullanabilirsiniz :

ffprobe -show_format input | sed -n '/duration/s/.*=//p'

… Veya:

ffprobe -show_format input | grep duration | sed 's/.*=//')

Saniyeye dönüştürmek (ve milisaniyeyi saklamak) için aşağıdakileri yazın:

awk '{ split($1, A, ":"); print 3600*A[1] + 60*A[2] + A[3] }'

Milisaniyeye dönüştürmek için aşağıdakileri yazın:

awk '{ split($1, A, ":"); print 3600000*A[1] + 60000*A[2] + 1000*A[3] }'

Milisaniye olmadan sadece saniyeler istiyorsanız, aşağıdakileri girin:

awk '{ split($1, A, ":"); split(A[3], B, "."); print 3600*A[1] + 60*A[2] + B[1] }'

Örnek:

görüntü tanımını buraya girin


Ayrıca bunun için tcprobe isteniyor, ancak sistemimde iyi çalışmıyor.
Vi.

1
... düzenlemem reddedildi, bu yüzden buraya, ffprobetam olarak bu tür amaçlar için paketlenmiş bir araç olan ilk adımın daha kesin bir şekilde başarılabileceğini yazacağım ffmpeg: ffprobe -show_format input | sed -n '/duration/s/.*=//p'(veya ffprobe -show_format input | grep duration | sed 's/.*=//'). Belki @slhck bunu doğrudan cevaplara çevirebilir.
evilsoup

Bunun için üzgünüm, @evilsoup. Belki de LordNeckbeard ile yayınlarımı özgürce düzenleme izniniz olduğuna dair bir feragatname yapmalıyım. Bu sorunu birkaç kez yaşadım. Bir dahaki sefere sadece düzenleme mesajına küçük bir not ekleyin ya da öylesine :)
slhck

0

Erişiminiz ffprobeyoksa, kullanabilirsiniz mediainfo.

# Outputs a decimal number in seconds
mediainfo some_video --Output=JSON | jq '.media.track[0].Duration' | tr -d '"'`

1
İhtiyacını ortadan kaldırın jqve tr:mediainfo --Output="General;%Duration/String%" input
llogan

Temiz! Ben komutadan çıkış formunun çünkü şimdilik düzenlenmemiş cevabım terk edeceğim X s YYY mskarşı X.YYY. | sed -e 's/ s /./' -e 's/ ms//'O rotaya gitmek ve erişiminiz yoksa , ayarlamak için yeterince kolay jq.
ToBeRa Değiştirildi

Bunun yerine mediainfo --Output="General;%Duration/String3%" inputçıktı olarak değiştirilebilir . 00:01:48.5011 min 48 s
Mart’taki llogan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.