2

これはこれまでの私のコードです。

#!/bin/bash
#James Kenaley
#Flv to Mp3 directory converter

find /home/downloads -iname "*.flv" | \
while read I;
do
    `ffmpeg -i ${I} -acodec copy  ${I/%.flv/.mp3}`
    echo "$I has been converted"
done

しかし、flvファイルの名前の空白を拾い、ディレクトリにないというエラーをスローします。スペースの前の最初の単語だけでなく、ファイル名全体を使用するにはどうすればよいですか?

4

4 に答える 4

2

これを試して:

`ffmpeg -i "${I}" -acodec copy  "${I/%.flv/.mp3}"`
于 2012-04-10T05:28:04.390 に答える
2

ffmpegはフォークされたスレッドで実行されるため、単純なバッチ処理では奇妙な動作が発生する可能性があります。提案されたバッチループでffmpegを実行している場合は、干渉しないように、コマンドとコマンドエラーの出力を制御する必要があります。

これを実行し、他のすべてのアイテムが適切に変換されているが、残りのアイテムでエラーが発生している場合は、ループでこのffmpeg呼び出しを使用してみてください。

ffmpeg -y -i "${I}" -acodec mp3 -ar 22050 -f wav "${I/%.3gp/.mp3}" > /dev/null & 2> /dev/null

最後に>dev/ null&2> / dev/nullがあることに注意してください。これにより、コマンド出力とコマンドエラー出力が忘却にパイプされます。その後、スクリプトが機能します。

プログラムの出力は、複数のファイルが同時に圧縮されて、奇妙にまとまりがないように見えることにも注意する必要があります。結果は正しくなります。

[編集:私が持っている-yに注意してください。これにより、FFMPEGが既存のMP3ファイルを上書きします]

于 2014-01-26T12:07:17.953 に答える
0

引用符を使用します。また、バッククォートは使用しないでください。

ffmpeg -i "${I}" -acodec copy  "${I%.flv}".mp3
于 2012-04-10T05:28:39.010 に答える
0

短いスクリプトを呼び出して、変換と名前変更を1回のパスで実行します。

adhoc.sh:

$file="$1"
ffmpeg -i "$file" -acodec copy "${file/%.flv/.mp3}"

あれを呼べ:

find /home/downloads -iname "*.flv" -exec ./adhoc.sh {} ";" -ls 

または変換:

find /home/downloads -iname "*.flv" -exec ffmpeg -i {} -acodec copy {}.mp3 ";" -ls 

後で名前を変更します。

rename 's/.flv.mp3/.mp3/' /home/downloads/*.flv.mp3

名前の変更は、インストールが必要な可能性のあるperlパッケージの一部です。

于 2012-04-10T05:50:02.757 に答える