在连接的 BASH CLI 命令之间传递参数

在连接的 BASH CLI 命令之间传递参数
youtube-dl -o "/home/smith/Original-Video.%(ext)s" https://whatever && ffmpeg -i /home/smith/Original-Video.YYY -filter:v fps=10 -b:v 368k -b:a 32k -c:a libopus -strict -2 /home/smith/Recoded-Video.mp4

如何在单个 BASH CLI 语句中将 youtube-dl 使用 %(ext)s 捕获的扩展传递给后续 (&&) ffmpeg 命令?

以便:

Original-Video.YYY = Original-Video.%(ext)s

或者

Original-Video.YYY = Original-Video.mp4

Original-Video.YYY = Original-Video.mkv

Original-Video.YYY = Original-Video.mov

答案1

不行。你必须找到最新的视频文件并解析它。

未经测试,但类似于:

base=/home/smith/Original-Video
if youtube-dl -o "$base.%(ext)s" https://whatever; then
    newest=$(stat -c $'%Y\t%n' "$base".* | sort -nr | head -1 | cut -f 2-)
    ext=${newest%%*.}
    new="/home/smith/Recoded-Video.$ext"
    ffmpeg -i "$newest" -filter:v fps=10 -b:v 368k -b:a 32k -c:a libopus -strict -2 "$new"
fi

答案2

如果你不想摆弄 bash:我写了一个下载器它使用 ffmpeg 和 yt-dl 来实现视频和音频的最佳组合。流可以简单地拖到其 GUI 中

添加我的 ppa 您可以安装和更新它:

sudo add-apt-repository ppa:jentiger-moratai/mediatools 
sudo apt update 
sudo apt install ytdownloader

相关内容