Bash脚本从文件名(ffmpeg)发送水印视频

时间:2016-06-13 02:23:41

标签: bash ffmpeg

我想自动将某些文字在我的视频上“加水印”。基本上我想在我的文件名中创建一个标记(例如“&&”)。然后我希望脚本在“&&”之后获取内容并将其放在“drawtext”内容中。

例如,名为“Video2132&& The First Test”的文件将使“text =”之后的部分成为“第一次测试”。

以下代码在没有drawtext部分的情况下工作正常。

只要我添加该功能,脚本就会运行,但会创建空的视频文件(零字节)。

for f in ./*.mov; do
    printf '%s\n' "Doing stuff with: ${f}"

    i='0'
    while (( i <= 5 )); do
        ffmpeg -ss "$(( i * 25 ))" -t 25 -i "${f}" -acodec copy -vf drawtext="fontfile=/Users/mac1/Library/Fonts/Gillsanslight.ttf: \
text='Stack Overflow': fontcolor=white: fontsize=24: box=1: boxcolor=black@0.5: \
boxborderw=5: x=(w-text_w)/2: y=(h-text_h)/2" -codec:a copy "${f%.mov}.${i}.mov" -loglevel quiet
        (( i++ ))
    done
done

1 个答案:

答案 0 :(得分:0)

将文件名分配给变量,并将FILENAME PART替换为文件名变量。

您没有指定名称Video2132 && The First Test来自何处。

$file_name=$(echo "Video2132 && The First Test" |sed 's/^.*&& //') # TODO, extract the name

然后从

更改过滤器
drawtext="fontfile=/System/Library/Fonts/Arial.ttf:text='FILENAME PART':fontcolor=red@1.0:fontsize=70:x=00:y=40"

drawtext="fontfile=/System/Library/Fonts/Arial.ttf:text='"$file_name"':fontcolor=red@1.0:fontsize=70:x=00:y=40"