首页 > 解决方案 > 用于转换子目录中视频的 Bash 脚本

问题描述

尝试制作一个脚本来转换子目录中的视频,同时更改文件名、元数据,并将它们全部转储到所有转换后的视频的单个文件夹中。ffmpeg 命令在不使用变量的情况下对单个文件起作用。cut 命令将文件名和元数据更改为我想要的。我只是很难把它们放在一起。

寻找 。-name "*.m2ts" -exec bash -c 'for f; do
 t=$(echo "$f" | cut -d "/" -f2)
 ffmpeg -i "$f" -af "volume=2.0" -f mp4 -c:a mp3 -c:v libx264 \
 -profile :v 基线 -vf "scale=852:480" -metadata title="$t" $t.mp4; \
 完成' -- {} +

标签: bash

解决方案


这是您的脚本的几乎纯 bash 版本:

#!/bin/bash
for f in *.m2ts; do
    filename="${f/*\//}"
    ffmpeg -i "${filename}" \
        -af "volume=2.0" \
        -f mp4 \
        -c:a mp3 \
        -c:v libx264 \
        -profile:v baseline \
        -vf "scale=852:480" \
        -metadata title="${filename/.*/}" \
        ${filename/.m2ts/.mp4}
 done

你能试一试吗?

顺便说一句,这里有一些 Bash Fu:

$ f="./some/file.m2ts"
$ echo ${f}
./some/file.m2ts
$ echo ${f/*\//}
file.m2ts
$ filename=${f/*\//}
$ echo ${filename}
file.m2ts
$ echo ${filename/.*/}
file
$ echo ${filename/.m2ts/.mp4}
file.mp4
$ 

推荐阅读