使用 ffmpeg 进行修剪的脚本

使用 ffmpeg 进行修剪的脚本

我正在通过 DVB-C 和 gnutv 录制广播。我使用 ffmpeg 来剪辑录音。

在终端中输入合成器需要很长时间。所以我正在编写一个脚本来自动化这一过程。它在这里:

#!/bin/bash
#Getting the input file:
read -e -p "Enter the absolute path for the .mpg-file: " PATH
# Start time of trimming:
read -p "Where should the trimming start? (Please enter in this format hh:mm:ss): " START
# End time of trimming:
read -p "When should the trimming end? (Please enter in this format hh:mm:ss): " END
# Informations about the song:
read -p "What song is it? " TITLE
read -p "Who sang it? " ARTIST
read -p "Which album?" ALBUM
# Determine the duration of trimming (given in seconds).
START2=$(echo $START | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
END2=$(echo $END | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
DURATION=$(expr $END2 - $START2)
ffmpeg -ss $ANFANG -i $PATH -t $DURATION -acodec copy -vcodec copy -metadata title=$TITLE -metadata author=$ARTIST $TITLE' · '$ARTIST'.mpg'

当我运行“John Parr”的“St. Elmos Fire”脚本时,我得到:

Unable to find a suitable output format for 'Elmo's'

我认为这是因为 $TITLE 和 $ARTIST 中的空格。我已经尝试了 \ 和 '' 以及读取的 -e 选项。但它产生了类似的错误消息。我做错了什么?

谨致问候,提前致谢,马库斯

答案1

首先,也是最重要的一点,不要使用大写的变量名。这样做可能会覆盖环境变量和特殊的 shell 变量,而在本例中,覆盖变量就是为了覆盖环境变量和特殊的 shell 变量PATH

第二,引号在 shell 脚本中非常非常重要;引用变量扩展可以避免结果受到路径名扩展和词拆分的影响。

例如,如果var="St. Elmo's Fire.mpg",则$var会变成三个单词St.Elmo'sFire.mpg,而"$var"会变成一个单词St. Elmo's Fire.mpg。因此,变量扩展名一定要用引号引起来。"$var",而不是$var

类似这样的内容应该更正确:

#!/bin/bash
read -ep "Enter path for the .mpg-file: " file
IFS=: read -rp "Where should the trimming start? (HH:MM:SS): " shour smin ssec
IFS=: read -rp "When should the trimming end? (HH:MM:SS): " ehour emin esec
read -rp "What song is it? " title
read -rp "Who sang it? " artist
read -rp "Which album?" album

start=$(( shour*3600 + smin*60 + ssec ))
end=$(( ehour*3600 + emin*60 + esec ))
duration=$(( end - start ))

ffmpeg -i "$file" -t "$duration" -acodec copy -vcodec copy -metadata "title=$title" \
       -metadata "author=$artist" "$title · $artist.mpg"

您的 ffmpeg 命令有-ss "$ANFANG",但ANFANG从未在您的脚本中设置,所以我省略了它。

相关内容