個別にac3に変換できるdtsオーディオのビデオがありますが、束をバッチ変換する必要がありますが、方法がわかりません。
これは、個別のファイルに対する私の作業ffmpegです。
for f in *.mkv;
do
ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/${f%.mkv}".mkv;
done
すべての動画は、メインの「メディア」フォルダの下の個別のフォルダにあります。中にスペースがあるいくつかのフォルダ。作業スクリプトでは、ファイルは一時ディレクトリを分離するように処理されます。
私は助けが必要です:
Ffmpegがすべてのmkvを再帰的に変換するため。
ffmmpegが個別の変換されたmkvを一時ディレクトリに処理するため。
また、誰かがアイデアを持っている場合の次のステップ:
再帰的にするには、find
を使用するか、globstar
bashオプションをアクティブにします。
find -exec
:
find . -name '*.mkv' -exec ffmpeg -i {} -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k /srv/dev-disk-by-label-hel/temp/{} \;
{}
内の-exec
は、現在のファイル名に変換されます。 ${f%.mkv}".mkv;
は入力ファイル名と同じなので、気にしませんでした。.mkv
を削除してから追加しているので、それは間違いだと思いました。
globstar
。このオプションを使用すると、**
を0個以上のサブディレクトリに再帰できます。
shopt -s globstar
for f in **/*.mkv;
do
fname="${f##*/}"
ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/"$fname";
done
これは、最も簡単にファイルを元に戻すことができるコピーです。 オリジナルを上書きしてもかまわない限り、次のようにできます:
shopt -s globstar
for f in **/*.mkv;
do
fname="${f##*/}"
ffmpeg -i "$f" -metadata:s:a:0 language=eng -metadata:s:a:0 title="AC3 5.1" -map 0:v -map 0:a:0 -map 0:a -map 0:s -c:v copy -c:a copy -c:s copy -c:a:0 ac3 -b:a:0 640k "/srv/dev-disk-by-label-hel/temp/$fname" &&
mv "/srv/dev-disk-by-label-hel/temp/$fname" "$f"
done