0

我有一堆需要转换为 AC3 的 DTS 音频视频文件。我找到了可以完成任务不同部分的命令,但我不确定如何将它们组合在一起以制作一个有效的脚本。我找到了以下脚本,可以将我所有文件中的音频转换为 AC3,但我希望它只将 DTS 音频文件转换为 AC3。脚本如下。

shopt -s globstar
for f in **/*.mkv; 
do 
    fname="${f##*/}"
    ffmpeg -i "$f" -c:v copy -c:s copy -c:a ac3 "/some/directory/$fname" &&
    mv "/some/directory/$fname" "$f"
done

我还发现这个命令将返回 mkv 文件使用的音频编解码器类型。

`ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 input.mkv`

所以我想知道如何将两者结合起来创建一个脚本来做我想做的事情。我猜我可以在脚本开头使用 ffprobe 添加一个 if 函数?像这样的东西...

shopt -s globstar
for f in **/*.mkv; 
do 
    fname="${f##*/}"
    if ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of 
       default=nokey=1:noprint_wrappers=1 "$f" | egrep "DTS"; then
       ffmpeg -i "$f" -c:v copy -c:s copy -c:a ac3 "/some/directory/$fname" &&
       mv "/some/directory/$fname" "$f"
    fi
done

这有什么问题吗?自从我在高中玩图形计算器以来,我就没有写过脚本,因为我很无聊,所以任何帮助都将不胜感激。

4

1 回答 1

0

所以我想我想出了一些对我有用的东西。我敢肯定,真正知道自己在做什么的人可以使这更清洁,更高效,但对于任何有兴趣的人来说,这就是我想出的……

shopt -s globstar
for f in **/*.mkv; 
do 
    fname="${f##*/}"
    if ffprobe -v error -select_streams a:0 -show_entries stream=codec_name -of default=nokey=1:noprint_wrappers=1 "$f" | egrep "dts"; then
       if [[ $(ffprobe -v error -select_streams a:0 -show_entries stream=channels -of default=nokey=1:noprint_wrappers=1 "$f") > 2 ]]; then
            ffmpeg -hide_banner -loglevel panic -i "$f" -c:v copy -c:s copy -c:a ac3 -b:a 640k "./Temp/$fname" &&
            mv -v "./Temp/$fname" "$f"
       else ffmpeg -hide_banner -loglevel panic -i "$f" -c:v copy -c:s copy -c:a ac3 -b:a 320k "./Temp/$fname" &&
            mv -v "./Temp/$fname" "$f"
       fi
    fi

done
-Just save that to a text file and give it a name (for example DTSconverter.sh)
-Make it executable
-Put it in the root directory where the movies you wish to work on are stored
-Create a folder called 'Temp" in the that same root directory
-Execute the script by opening a terminal in the root directory and typing ./DTSconverter.sh (or whatever file name you gave the script)

这将在放置脚本的目录(包括子目录)中搜索任何具有 DTS 音轨的电影,并将音轨转码为 AC3。它还考虑了立体声或环绕声轨道并相应地调整比特率。

于 2020-06-17T18:55:44.033 回答