2017-02-17 8 views
0

私はバッチプラス作物と再スケールでファイルを変換するには、次のコマンドを使用します。ffmpegの - 設定された変数ビデオ再生時間

for i in $(ls *.mp4); do 
    ffmpeg -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "../../archive/${i/.mp4/}.mp4" 
done 

このコマンドは、第15から開始されます、そして長いビデオ30秒になります:

for i in $(ls *.mp4); do 
    ffmpeg -ss 00:00:15 -t 30 -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "${i/.mp4/}_test.mp4" 
done 

私は、バッチから各ビデオの最後から15秒を切り取るコマンドを望んでいます...トリックは、各ビデオの持続時間が異なるため、「どれくらいの時間が必要ですか」変数である(開始から15秒をカウントすると、期間を15秒から30秒に減らす)

ビデオ再生時間例:

video 1 - 00:25:19 
video 2 - 00:15:34 
video 3 - 00:19:21 
video 4 - 00:22:49 
etc. 
+0

を、私は、これはあなたを助けると思う:http://stackoverflow.com/questions/3936816/querying-an-audio-video -file-for-information/3938722#3938722 – v010dya

答えて

1

あなたは、単純なbashスクリプトでこれを行うことができませんでしたか?

このコマンドは、秒単位のビデオ再生時間取得します述べたように:だから、あなたは、単に30秒を撤回し、あなたが今、あなたのffmpegのコマンドでどのような時間を設定します、変数にそれを読むことができます

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

を。

したがって、ステップ1はあなたの質問に既に投稿したfor-loopになります。

ステップ2は、映画の期間から30秒を引き出し、変数に保存します。

次にステップ3で、次のようにforループ2番目を書き換える:

for i in $(ls *.mp4); do 
    ffmpeg -ss 00:00:15 -t $your_new_duration_variable -y -i "$i" -acodec libfaac -ab 128k -ar 44100 -vcodec libx264 -b 850k -threads 0 -vf [in]crop=in_w-112:in_h-63:56:0,scale=1280:720[out] "${i/.mp4/}_test.mp4" 
done 
+1

'ls'の出力を解析する代わりにグロブを使う方が良いです:' for i in * .mp4; 〜する – LordNeckbeard

関連する問題