2

まず、私はプログラマーでもスクリプターでもありません。数日間遊んでいただけです。

mp4 ビデオ ファイルと srt 字幕ファイルを含むフォルダーがあります。mencoder と handbrake を使用して手動で再エンコードし、字幕をビデオ ファイルにハードコードしました。

mencoder -oac pcm -ovc raw -sub NAMEOFVIDEO.sub -utf8 -o NAMEOFVIDEO_SRT NAMEOFVIDEO.mp4

これはうまく機能し、私が探しているものです。だから私が持っているのは、複数の .srt と .mp4 を含むこの /working ディレクトリです (毎日 2 つまたは 3 つの新しいビデオと srt ファイルがあるかもしれません)

.srt ファイルと .mp4 ファイルが 1 つしかない場合でも管理できますが、mencoder として 2 つまたは 3 つの異なる srt ファイルと mp4 ファイルがある場合に、mencoder コマンドを実行できる Bash スクリプトを作成する方法を見つけようとしています。行は、対応する正しい srt ファイルと mp4 ファイルの組み合わせで実行する必要があります。

私が思いつくことができるmp4_file= find \working -type f -name "*.mp4" | head -1のは、最初の結果.mp4を見つけるようなものだけです

srt_file = find \working -type f -name "*.srt" | head -1最初の結果 .srt を見つけます (幸いなことに、それは同じベース名ファイルです)

次に、mencoderコマンドを使用して変数を実行しますmencoder -oac pcm -ovc raw -sub $srt_file -utf8 -o $mp4_file-SRT $mp4_fileが、ファイルの組み合わせが複数ある場合(ループの可能性があります)、出力を突き刺す必要がありますHandBrakeCLI --preset "High Profile" -i $mp4_file-SRT -o $mp4_file

それは恐ろしいことです。これを行う簡単な方法がありませんか?

4

1 に答える 1

1

常に同じベース名である場合はfind、ループを使用して実行できます。

find /working -type f -name '*.mp4' | while read mp4; do
    b=`basename $mp4 .mp4`
    d=`dirname $mp4`
    mencoder -oac pcm -ovc raw -sub $d/$b.sub -utf8 -o $mp4-SRT $mp4
done

mp4 とサブ ファイルの名前が異なるか、別のディレクトリにある場合、これはもちろん機能しません。

于 2012-10-23T14:26:00.907 に答える