2016-12-05 38 views
0

まず、私はグーグルでグーグルでこの問題を解決する方法を知りました。私はバッチファイルを作って、ac-3の場合はファイル内のオーディオを再エンコードし、ffmpegを使用する場合はoggにするようにしています。私はffmpegで変換を行う方法を知っています。オーディオが特定のコーデックにマッチする場合にのみ自動化する方法ではありません。ファイルのオーディオコーデックを取得するには、ffprobeとMediaInfoの2つの方法があります。コマンド出力をバッチで変数として設定する方法

MediaInfo --Inform="Audio;%%Format%%" "input.mkv" 

または

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

しかし、私の問題は、コマンドの出力から変数を設定してあります。これは私が努力してきたコードであり、役に立たない。

SETLOCAL 

for %%a in (*.mp4) do (

MediaInfo --Inform="Audio;%%Format%%" "%%a">codec.txt 

SET /p codec=<codec.txt 

DEL codec.txt 

ECHO %codec% 

) 

pause 

明らかに、これは私の目標の唯一の部分であるが、これは私が過去を得るように見えることができない部分です。私は、 "DEL codec.txt"部分を削除することで、実際に正しい出力をテキストファイルに保存していますが、変数にインポートしていないことを確認しました。とにかく私は変数への出力をうまく設定することができます、これは私が頻繁に私の検索で見つけた方法です。

ご迷惑をおかけして申し訳ありません。

+2

[Windowsループセット環境変数のwindowsバッチコマンド]の重複している可能性があります(http://stackoverflow.com/questions/17598638/windows-batch-command-for-loop-set-environment-variable) –

+0

可能な[バッチ - コマンド出力を変数に割り当てる](http://stackoverflow.com/questions/16203629/batch-assign-command-output-to-variable);関連:[バッチ - 変数に変数を指定したコマンド出力を割り当てる](http://stackoverflow.com/questions/28663803/batch-assign-command-output-with-variables-to-variable) – aschipfl

答えて

1
for %%a in (*.mp4) do (
for /f "delims=" %%c in (
    'MediaInfo --Inform="Audio;%%Format%%" "%%a" ') do (

    echo codec is %%c 
    rem now use "%%c" as codec 
) 
rem "%%c" is now out-of-scope 
) 

あなたはcodecは、あなたのコード内で変わらなかった理由の説明のためにdelayed expansion用SO検索する必要があると思います。

+0

ありがとう、これはうまくいきましたわずかな修正を加えて。私はコマンドの一部としてそれを渡していなかったので、等号の前にキャレットを追加しなければなりませんでした。 – Crankrune

関連する問題