2017-09-27 4 views
0

私は、オーディオファイルの長さを取得して5秒のフェードアウトを適用するためのbashスクリプトを作成しようとしています。ffmpeg-bashスクリプトフェードアウトオーディオファイル

#!/bin/bash 

f="$*" # all args 
p="${f##*/}" # file 
fn="${p%.*}" # name only 
e="${p##*.}" # extension 

echo 
echo $f 
echo $p 
echo $fn 
echo $e 
echo 


_t=$(ffmpeg -i "$f" 2>&1 | grep "Duration" | grep -o " [0-9:.]*, ") 


ffmpeg -i "$f" -af "afade=t=out:st=$_t:d=500" "$fn $sec sec fade-out.$e" 

無効な引数エラーが発生しました。

+1

スクリプトの上に 'set -x'を置き、追加情報を取得してデバッグしようとしています – Inian

+2

$ secが定義されていません。 – Cyrus

+1

'ffmpeg'からのコンソール出力は、人間の目だけを対象としています。マシンの構文解析に十分な一貫性を保証するものではありません。 ['ffprobe'(http://trac.ffmpeg.org/wiki/FFprobeTips#Duration)から直接継続時間を取得すると、2つの' grep'プロセスの使用を避けることができます。 – LordNeckbeard

答えて

0

すべての助けをいただきありがとうございます - ここに私の解決策です。かなりエレガントな方法があると確信していますが、私は初心者です。

#!/bin/bash 
f="$*" # all args 
p="${f##*/}" # file 
fn="${p%.*}_fade" # name only 
e="${p##*.}" # extension 
sec="5" 

dur=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$f") 
t=$(echo "$dur - $sec" | bc) 

ffmpeg -i "$f" -af "afade=t=out:st=$t:d=5" "$fn $sec sec.$e"