プログラムyoutube-dlを使用してYoutubeプレイリストをダウンロードしました。ビデオとオーディオを別々にダウンロードすることを選択しました。これで、ffmpegとマージしたい対応するオーディオを含むビデオでいっぱいのフォルダーができました。
バッチスクリプトを使用してこれを行う必要がありますが、問題は、youtube-dlが元のファイルのタイトルの後に省略文字を追加したため、ビデオの名前が対応するオーディオと同じにならないことです。ファイル名は次のようになります。
First title in the playlist 5J34JG.mp4
First title in the playlist H3826D.webm
Second title in the playlist 3748JD.mp4
Second title in the playlist 6SHJFZ.webm
Windowsバッチスクリプトとffmpegを使用してこれらの複数のビデオ/オーディオファイルをマージする方法は?
編集:.webmファイルはオーディオファイルであり、複数のファイルがあり、1つずつ名前を変更できないことを忘れました。
@echo off
setlocal
set "outdir=muxed"
if not exist "%outdir%" md "%outdir%" || exit /b 1
:: Get each mp4 file and call the label to mux with webm file.
for %%A in (*.mp4) do call :mux "%%~A"
exit /b
:mux
setlocal
set "videofile=%~1"
set "name=%~n1"
:: Last token of the name is the pattern to remove.
for %%A in (%name:-=- %) do set "pattern=-%%~A"
:: Remove the pattern from the name.
call set "name=%%name:%pattern%=%%"
:: Get the webm filename.
for %%A in ("%name%-*.webm") do set "audiofile=%%~A"
:: Mux if webm file exist and output file does not exist.
if exist "%audiofile%" if not exist "%outdir%\%name%.mp4" (
ffmpeg -i "%videofile%" -i "%audiofile%" -c copy "%outdir%\%name%.mkv"
)
exit /b
スクリプトは、最初に出力ディレクトリを作成してmp4ファイルを保存し、出力が入力にならないようにします。
メインfor
ループは各mp4ファイル名を取得します。:mux
ラベルは、引数としてのmp4ファイル名で呼ばれています。
変数videofile
はmp4ファイル名をname
格納し、変数は拡張子なしの名前のみを格納します。
最後のトークンはname
なりYTIDのながらパターンfor
ループの最後のトークンを設定しますpattern
。
call set
名前から「」のパターンを代用します。これにより、ワイルドカードを使用してwebmファイル名を検索できる名前が付けられます。for
ループは、WEBMファイル名を取得します。
宛先が存在し、出力ファイルが存在しない場合、ffmpegは2つのファイルを出力ファイルに多重化します。
出力ファイルのコンテナ形式はmkvです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加