MKVからMP4へのリマックススクリプトのヘルプ

MKVからMP4へのリマックススクリプトのヘルプ

概要:

私は主に MKV ライブラリを MP4 に再多重化しようとしています。ビデオ ファイルから字幕を抽出するスクリプトがあります。

特定のフォルダ内の.mkvファイルを再多重化する別のスクリプトがあります。必要なのは、スクリプトがのみ.srt ファイルがあることが検出されたフォルダーを再多重化します。

すべての .srt ファイルは ***.eng.srt で終わります。

これが私の現在の remux スクリプトです:

#!/bin/bash 
IFS=$'\n' 
clear 
for filename in *.mkv 
do 
echo "$filename" 
newfilename="${filename%.mkv}.mp4" 
echo "${newfilename}" 
ffmpeg -fix_sub_duration -i $filename -c:v copy -c:a copy -c:s mov_text $newfilename 
done

ありがとうございます!どんな助けでも大歓迎です。

答え1

あなたが探しているのはこれだと思います:

#!/bin/bash 

clear
for filename in *.mkv 
do 
    ## Exit if there are no srt files
    [ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
    echo "$filename" 
    newfilename="${filename%.mkv}.mp4" 
    echo "${newfilename}" 
    ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename" 
done

IFS='\n'ここでは何も役に立たないので削除しましたfor。変数を引用符で囲む限り、名前に空白が含まれていてもループは非常に安全です。

[ -e foo ]は、の存在をテストします。foo逆に、[ ! -e foo ]が存在しない場合は、 は true になりますfoo。この場合、fooは glob ( *.srt) なので、一致するファイルが見つかった場合、テストは false になります。上記のスクリプトでは、 は、ファイルが見つから&&ない場合はsrtエラー メッセージが出力され、スクリプトが終了することを意味します。

関連情報