尝试在ffmpeg脚本上更改文件名的扩展名

时间:2019-01-22 15:06:45

标签: bash shell ffmpeg ubuntu-16.04

(第一次在这里发布问题)

因此,我希望编写一个ffmmpeg脚本来自动将文件编码为VP9。 我遇到的问题是尝试剥离扩展并添加新扩展时。

例如 Demo.mp4

应更改为 Demo.webm

我正在Ubuntu-16.04(服务器非GI版本)上运行此文件 我尝试了几种不同的方法来完成此操作(使用Google和StackOverflow上的其他帖子),但我似乎无法使其工作

这是我不断收到的错误。

第31行:Demo.mp4 + .vp9:语法错误:无效的算术运算符(错误标记为“ .mp4 + .vp9”)

我还(在下面的代码中)注释了语法错误所指向的位置。

#!/bin/bash

# Welcome Message

clear
printf "====================================\n"
printf "FFMPEG Encoder\n"
printf "(Using HDR-4k Profile)\n"
printf "====================================\n\n"
printf " Loading Files in Current Directory...\n\n"
sleep 3s


# Variables

i=1
ext=".webm"
vadd=4000000
vsub=2000000


# Iterate through files in current directory

for j in *.{mp4,mkv};
do
echo "$i.$j"
file[i]=$j
i=$(( i + 1 ))
done


# Select File & Bitrate

printf "Enter file number\n"
read fselect
printf "${file[$fselect]}: Selected for encoding\n\n"

printf "Enter Average Bitrate (Eg: 8000000)\n\n"
read bselect


# ***THIS IS WHERE THE PROBLEM IS***
# Prepare output file, strip trailing extension (eg .mkv) and add .webm

ftemp1="${file[$fselect]}"
ftemp2="${ftemp1::-4}"
fout="$(($ftemp2+$ext))"
printf "Output file will be: $fout"
printf "Preparing to encode..."
sleep 5s


# Encode with User-Defined Parameters

ffmpeg -y -report -i ${file[$fselect]} -b:v $bselect -speed 4 -pass 1 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate "$(($bselect+$vadd))" -minrate "$(($bselect-$vsub))" \
  -profile:v 2 -vcodec libvpx-vp9 -f webm /dev/null && \
ffmpeg -y -report -i ${file[$fselect]} -b:v $bselect -pass 2 \
  -pix_fmt yuv420p10le \
  -color_primaries 9 -color_trc 16 -colorspace 9 -color_range 1 \
  -maxrate "$(($bselect+$vadd))" -minrate "$(($bselect-$vsub))" \
  -profile:v 2 -vcodec libvpx-vp9 \
$fout

我敢肯定有一种更干净的方法可以做到这一点-但我不期望在此方面有所帮助:P

我怀疑是我要添加两种不同类型的变量吗?但是我以为我把它们定义为字符串。。我可能是错的

请帮助...大声笑

1 个答案:

答案 0 :(得分:1)

您正在尝试进行算术微积分($((...)))。但是您只需要连接两个字符串:

fout="$ftemp2$ext"

顺便说一句,您可以用一行将三行简化此转换:

fout="${file[$fselect]/%.mp4/$ext}"

这是一个正则表达式,其中在末尾找到的.mp4字符串(%符号)由$ext的内容代替。