
ffmpeg でパイプ コマンドを使用しながら、出力名を入力名と同じにしようとしています。
例:
ファイルは です1-Minute Audio Test for Stereo Speakers & Headphones [2ZrWHtvSog4].m4a
。出力ファイル名することが自動的にと同じ入力ファイル名ただし、.mp3
拡張機能付きです。
したがって、最終的な名前は1-Minute Audio Test for Stereo Speakers & Headphones [2ZrWHtvSog4].mp3
手動で入力する必要はありません。
例:
yt-dlp -o - -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' https://www.youtube.com/watch?v=2ZrWHtvSog4 | ffmpeg -i pipe: -codec:a libmp3lame -b:a 8000 -ac 1 -ar 8000 test_audio.mp3
これらのコマンドは、入力しなくてもtest_audio.mp3
取得しようとしている名前のファイルを作成します。1-Minute Audio Test for Stereo Speakers & Headphones [2ZrWHtvSog4].mp3
入力ファイルから ffmpeg の出力ファイルにファイル名変数をパイプ/取得する方法がわかりません。
私の考えは次のとおりです。
- yt-dlp からファイル名を取得し、それを変数に配置します。
- その変数をffmpegの出力ファイル名として使用します
答え1
私にとって効果があったのは次の通りです。
yt-dlp -o - -f 139 --external-downloader aria2c --external-downloader-args '-d ./ -x 10' https://www.youtube.com/watch?v=2ZrWHtvSog4 | ffmpeg -i pipe: -codec:a libmp3lame -b:a 8000 -ac 1 -ar 8000 -f mp3 "$(basename "$(yt-dlp -e https://www.youtube.com/watch?v=2ZrWHtvSog4 | sed 's/[\/:*?"<>|]/_/g')").mp3"
説明:
basenameコマンドはURLからベース名を抽出するために使用されます。yt-dlp -eを使用してビデオタイトルを取得します。https://www.youtube.com/watch?v=2ZrWHtvSog4次に、sed 's/[/:*?"<>|]/_/g' を使用して、ファイル名に許可されていない文字をアンダースコアに置き換えます。
$(...) 構文は、コマンドを実行し、その出力をより大きなコマンドの一部として使用するために使用されます。
$(ベース名 "$(yt-dlp -ehttps://www.youtube.com/watch?v=2ZrWHtvSog4| sed 's/[/:*?"<>|]/_/g')").mp3 は、.mp3 拡張子が追加されたファイル名になります。