0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

yt-dlp で指定時間範囲のダウンロードと mp4 化を行う

Posted at

概要

yt-dlp で動画をダウンロードし、MP4 に変換するケースの紹介です。

  1. yt-dlp で動画をダウンロード&MP4に変換する
    • 最もシンプルですが動画時間が長いと変換にとても時間がかかります
  2. yt-dlp で動画をダウンロードし、ffmpeg で指定時間に切り出し、MP4 に変換する
    • フルの動画をダウンロードして、指定時間のみを切り出すことで変換時間を短縮します
  3. 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" 部分をダウンロードする

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?