概要
yt-dlp で動画をダウンロードし、MP4 に変換するケースの紹介です。
- yt-dlp で動画をダウンロード&MP4に変換する
- 最もシンプルですが動画時間が長いと変換にとても時間がかかります
- yt-dlp で動画をダウンロードし、ffmpeg で指定時間に切り出し、MP4 に変換する
- フルの動画をダウンロードして、指定時間のみを切り出すことで変換時間を短縮します
- yt-dlp で動画を指定時間のみダウンロードし、MP4 に変換する
- 2と比べてダウンロード時間も短縮します
1. yt-dlp で動画をダウンロード&MP4に変換する
#!/bin/bash -xe
TAG=${1}
NAME=${2}
if [ -z "${TAG}" ]; then
echo "Usage: $0 <tag> <name>"
exit 1
fi
if [ -z "${NAME}" ]; then
echo "Usage: $0 <tag> <name>"
exit 1
fi
yt-dlp --recode-video mp4 -o ${NAME}.mp4 -- ${TAG}
利用方法
./download.sh "videoId" "20250101-vlog"
20250101-vlog.mp4
が生成されます。
2. yt-dlp で動画をダウンロードし、ffmpeg で指定時間に切り出し、MP4 に変換する
ダウンロードは 1 の yt-dlp 部分のみ変更します。
yt-dlp -o "${NAME}.%(ext)s" -- ${TAG}
ダウンロードしたものは webm とします。ffmpeg で指定時間に切り出し、MP4 に変換します。
#!/bin/bash -xe
NAME=${1}
START=${2}
END=${3}
if [ -z "${NAME}" ]; then
echo "Usage: $0 <name> <start> <end>"
exit 1
fi
if [ -z "${START}" ]; then
echo "Usage: $0 <name> <start> <end>"
exit 1
fi
if [ -z "${END}" ]; then
echo "Usage: $0 <name> <start> <end>"
exit 1
fi
START_HMS=$(echo ${START} | sed -e 's/:/_/g')
ffmpeg -ss ${START} -i ${NAME}.webm -t ${END} ${NAME}-${START_HMS}.mp4
利用方法
./cut.sh "20250101-vlog" "00:10:00" "00:03:00"
20250101-vlog-00_10_00.mp4
が生成されます。
これは、20250101-vlog.webm
から 10:00
部分から 3 分間の動画を切り出し、MP4 に変換しています。END
の部分は切り出す時間の長さを指定します。
ffmpeg の時間指定オプション説明
-ss タイムスタンプ
が開始時間、-t タイムスタンプ
が開始時期からの時間の長さです。
オプションの位置によって意味が変わってくるため、詳しくは別資料を参考にしてください。
3. yt-dlp で動画を指定時間のみダウンロードし、MP4 に変換する
#!/bin/bash -xe
TAG=${1}
NAME=${2}
START=${3}
END=${4}
if [ -z "${TAG}" ]; then
echo "Usage: $0 <tag> <name>"
exit 1
fi
if [ -z "${NAME}" ]; then
echo "Usage: $0 <tag> <name>"
exit 1
fi
if [ -z "${START}" ]; then
echo "Usage: $0 <tag> <name> <start> <end>"
exit 1
fi
if [ -z "${END}" ]; then
echo "Usage: $0 <tag> <name> <start> <end>"
exit 1
fi
START_HMS=$(echo ${START} | sed -e 's/:/_/g')
FILE_NAME=${NAME}-${START_HMS}.mp4
rm -rf ${FILE_NAME}
# エンコードによって高画質の mp4 が取得できる
yt-dlp --recode-video mp4 --download-sections "*${START}-${END}" -o "${FILE_NAME}" -- ${TAG}
利用方法
./download.sh "videoId" "20250101-vlog" "00:10:00" "00:13:00"
20250101-vlog-00_10_00.mp4
が生成されます。
これは、videoId
から 10:00
部分から 3 分間の動画をダウンロードし、MP4 に変換しています。END
の部分はタイムスタンプを示します。
--download-sections
オプション説明
--download-sections
オプションは、指定した時間のみダウンロードするためのオプションです。*
は時間範囲を示します。負のタイムスタンプは末尾から計算されます。
START と END はタイムスタンプを示します。
例
--download-sections "*${START}-${END}" # START から END までの範囲をダウンロードする
--download-sections "*${START}-inf" # START から動画終わりまでの範囲をダウンロードする
--download-sections "intro" # 動画に設定されているチャプター "intro" 部分をダウンロードする
参考