1

ビデオ全体で表示される単一の画像で構成される一連のビデオを作成したいのですが、各ビデオには異なるオーディオ ファイルがあります。さまざまなツールを使用して手動で行うことができますが、問題は、多くのオーディオ ファイルがあり、フレーム レートを最適化できないことです (これについては後で詳しく説明します)。必要なものはすべて揃っていますが、すべてをバッチ処理する方法がわからないという問題があります。

基本的なコード:
ffmpeg -i song-name.mp3 -loop 1 -i cover.jpg -r frame-rate -t song-length -acodec copy output.mp4

私が達成したいこと:
いくつかのオーディオ ファイルで構成されるフォルダーがあるとしましょう: song-name-1.mp3、song-name-2.mp3、...、song-name-n.mp3 およびカバー。 jpg.

フォルダー内のすべての mp3 ファイルの名前を取得し (FOR ループだと思います)、同じコマンドで処理するバッチ ファイルが必要です。
ffmpeg -i song-name.mp3 -loop 1 -i cover.jpg -r frame-rate -t song-length -acodec copy output.mp4

そのため、画像はすべてのビデオで常に同じです。曲の長さは、ツールmp3infoと対応するコマンドで取得できます。
mp3info.exe -p %S song-name.mp3

ビデオ全体で 1 つの画像しかないため、最適なフレーム レートは、ビデオの長さの逆数である 1/長さになります (長さは、mp3info から取得した秒単位の変数です)。

したがって、最終的なコードは次のようになります。
ffmpeg -i song-name.mp3 -loop 1 -i cover.jpg -r 1/length -t length -acodec copy song-name.mp4

ここで、「song-name」は FOR ループの反復ごとに (つまり、フォルダー内のすべてのオーディオ ファイルごとに) 変化する変数であり、length は次のコマンドで値を取得する変数です。
mp3info.exe -p %S song-name.mp3

特定のフォルダー内のすべての mp3 のすべてのファイル名を取得する FOR ループの例を見つけましたが、mp3info を統合する方法がわかりません。誰かが私を助けてくれることを願っています.Cプログラミング言語についてある程度の知識があり、それが何らかの方法で使用できる場合.

4

1 に答える 1

2

これは、VBS 数学を含まない編集された簡略版です。

%%S が使用される理由は、% が %environment% 変数および forINdo ループで使用される特別なバッチ文字であり、forINdo コマンドで単一の文字を取得するには、2 倍にする必要があるためです。同様echo %%に、単一のパーセント記号をエコーし​​ます。

@echo off
for %%a in (*.mp3) do (
for /f "delims=" %%b in ('mp3info.exe -p %%S "%%a"') do (
ffmpeg -i "%%a" -loop 1 -i "cover.jpg" -r 1 -t %%b -acodec copy "%%~na.mp4"
)
)
于 2013-06-28T09:47:44.423 に答える