コンソールからビデオファイルの長さを取得する方法は?


24

ビデオファイルsome_videoがあるとします。

シェルスクリプトから長さを取得する方法(mplayer / transcode / gstreamer / vlc / ffmpeg / whateverを使用)?

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

回答:



21

次のようなもの:

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

これにより、以下が実現しますHH:MM:SS.msffprobeほとんどのFFmpegインストールで提供されるを使用することもできます。

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

… または:

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

秒に変換する(およびミリ秒を保持する)には、以下にパイプします。

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

ミリ秒に変換するには、以下にパイプします。

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

ミリ秒のない秒のみが必要な場合は、以下にパイプしてください。

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

例:

ここに画像の説明を入力してください


また、tcprobeはそのために設計されていますが、私のシステムではうまく機能しません。
Vi。

1
...私の編集が拒否されましたので、私は最初のステップは、より簡潔で達成することができることをここに投稿しますffprobeとともにパッケージ化された目的の正確これらの並べ替えのために設計されたツール、ffmpegffprobe -show_format input | sed -n '/duration/s/.*=//p'(またはffprobe -show_format input | grep duration | sed 's/.*=//')。たぶん、@ slhckはこれを直接編集して答えにすることができます。
evilsoup

すみません、@ evilsoup。たぶん、あなたとLordNeckbeardが私の投稿を自由に編集することを許可されているという免責事項を作成する必要があります。この問題は既に何度かありました。次回は、編集メッセージにちょっとしたメモなどを追加してください:)
slhck

0

にアクセスできないffprobe場合は、を使用できますmediainfo

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

1
必要性排除するjqtrmediainfo --Output="General;%Duration/String%" input
llogan

きちんとした!私はあなたのコマンドの出力は次の形式であるため、今のところ未編集の私の答えを残すつもりですX s YYY msX.YYY| sed -e 's/ s /./' -e 's/ ms//'あなたがそのルートに行きたい場合に調整するのに十分簡単で、アクセスできませんjq
ToBeReplaced

これはでなくmediainfo --Output="General;%Duration/String3%" inputoutput 00:01:48.501に変更できます1 min 48 s
llogan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.