min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

ffmpeg で動画の長さを取得+grepするには → ffprobe -i test.mp4 -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

ffmpeg動画の長さ(何時間あるか)を取得したい。ffmpegをインストールしたときに同時にインストールされる ffprobe を使えばできる

 

$ ffprobe -i test.mp4 -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

f:id:min117:20211017093144p:plain

8:37:21.086000 と出たので

8時間37分21秒 +086000ミリ秒 の動画と分かる。

 

この動画のサイズは 7.3GBなので

f:id:min117:20211017093400p:plain

7.3GBのサイズ8時間37分21秒なのだと分かる。

 

ブルーレイに焼くときには(ISOの規約により?)1ファイルにつき約3.7GBの上限があるから、これを分割したくなる。

 

7.3GBのサイズ8時間37分21秒なのだから

3GB+3GB+1.3GBに分割すれば、3時間+3時間+2時間みたいになるだろう。たぶん。

ざっくりで全然OK。

 

で、これを3時間+3時間+2時間に切り出したい。動画を切り出すスクリプトを書く。KARAを聴きながらササっと書いてみる。

www.youtube.com

 

できた。こうやって使う。

 

まずは情報取得(ffprobe)。

$ ./trimWOW.sh '国会中継参院予算委_新型コロナ対策など3次補正予算案で質疑(2021年1月28日)-XRu-K0Z9Upw.mp4'

f:id:min117:20211017100010p:plain

色反転した行から下が今回の動画の長さ。8時間37分21秒と分かる。

 

これを切り出す。開始ゼロ秒から3時間(10800秒)までを切り出してみよう。切り出されたあとのファイルには sepaという文字列(=separate=分割)を付加している。

 

$ ./trimWOW.sh '国会中継参院予算委_新型コロナ対策など3次補正予算案で質疑(2021年1月28日)-XRu-K0Z9Upw.mp4' 0 10800 sepa1

f:id:min117:20211017100832p:plain

f:id:min117:20211017101939p:plain

8GBから3GB切り出すのもものの数分で終わってしまうffmpegすばらしい。

 

ソースはこれ。

$ vim trimWOW.sh

f:id:min117:20211017094033p:plain

f:id:min117:20211017094728p:plain



それにしてもKARAやっぱ最高だな。

f:id:min117:20211017095159p:plain

この腹筋。めっちゃ鍛え上げられとる。美しい。

f:id:min117:20211017101821p:plain

f:id:min117:20211017101540p:plain

f:id:min117:20211017101620p:plain

f:id:min117:20211017095259p:plain

 


ソース

#!/bin/bash

 

shopt -s expand_aliases

source ~/.bashrc

 

mydate=`date +"%Y%m%d_%H%M%S"`

 

if [ $# -lt 3 ]

then

    echo '引数足りない'

    echo '============'

    echo "$0"' wow_2020.ts start(秒) 録画時間(秒)  付加文字列'

    echo '============'

    echo "$0"' $1          $2        $3            $4'

    echo '============'

    echo '1時間:'$*1''

    echo '2時間:'$*2''

    echo '3時間:'$*3''

    echo '4時間:'$*4''

    echo '5時間:'$*5''

    echo '6時間:'$*6''

    echo '7時間:'$*7''

    echo '8時間:'$*8''

    echo '9時間:'$*9''

    echo '10時間:'$*10''

    echo '10.5間:'$*11''

    echo ''

    echo '全体の長さを知るには ffprobe'

    echo 'ffprobe -i test.mp4 -show_entries format=duration -v quiet -of csv="p=0"'

    echo '21605.147000   ←6時間'

    echo 'ffprobe -i test.mp4 -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal'

    echo '6:00:05.147000 ←6時間'

    echo '============'

    echo 'src動画の長さ(秒)'

    ffprobe -i "$1" -show_entries format=duration -v quiet -of csv="p=0"

    echo '============'

    echo 'src動画の長さ(時:分:秒)'

    ffprobe -i "$1" -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

    echo '============'

 

    exit

fi

 

cd /media/WD30EZRX/PT3

# cd /media/2TB/NHK

 

# VLC

 

# extension

# ext=${OUTNAME##*.}

ext=${1##*.}

body="${1%%.$ext*}"

 

echo 'ファイル:'"$1"

echo '拡張子 :'"$ext"

echo 'body    '"$body"

 

# wow_NHKBSP_20200916_053255.ts

# wow_NHKBSP_20200916_053255_trim.ts

if [[ -n $4 ]]

then

    OUTNAME="$body"_"$4"_trim."$ext"

else

    OUTNAME="$body"_trim."$ext"

fi

 

 

 

(

echo $mydate

echo "開始秒  :$2"

echo "ファイル名:$OUTNAME"

echo "録画秒  :$3"

) | tee -a trimWOW.log

 

# ffmpeg -ss 7211 -i wow_16916_20200916_053301.ts.part -strict -2 -c:v copy -c:a copy -t 900 wowtrim01.ts

 

ffmpeg -ss "$2" -i "$1" -strict -2 -c\:v copy -c\:a copy -t "$3" "$OUTNAME"

 

echo '============'

echo '1時間:'$*12''

echo '2時間:'$*13''

echo '3時間:'$*14''

echo '4時間:'$*15''

echo '5時間:'$*16''

echo '6時間:'$*17''

echo '7時間:'$*18''

echo '8時間:'$*19''

echo '9時間:'$*20''

echo '10時間:'$*21''

echo '10.5間:'$*22''

 

echo '============'

echo 'ファイル:'"$1"

echo '拡張子 :'"$ext"

echo 'body    '"$body"

echo '============'

echo $mydate

echo "開始秒  :$2"

echo "ファイル名:$OUTNAME"

echo "録画秒  :$3"

echo '============'

echo "$OUTNAME"

echo '============'

echo 'src動画の長さ(秒)'

ffprobe -i "$1" -show_entries format=duration -v quiet -of csv="p=0"

echo '============'

echo 'src動画の長さ(時:分:秒)'

ffprobe -i "$1" -show_entries format=duration -v quiet -of csv="p=0" -sexagesimal

*1:60*60*1

*2:60*60*2

*3:60*60*3

*4:60*60*4

*5:60*60*5

*6:60*60*6

*7:60*60*7

*8:60*60*8

*9:60*60*9

*10:60*60*10

*11:60*60*10 + 60*30

*12:60*60*1

*13:60*60*2

*14:60*60*3

*15:60*60*4

*16:60*60*5

*17:60*60*6

*18:60*60*7

*19:60*60*8

*20:60*60*9

*21:60*60*10

*22:60*60*10 + 60*30