2017-09-27 118 views
0

我想写一个bash脚本来获取audiofile的持续时间,然后应用5秒淡出。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),然后避免使用两个'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"