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?

ffmpegを使って、サクっと動画の頭とおしりにフェードをかける

Posted at

AEやiMovieでわざわざフェードだけのために書き出し直すの面倒だったので、ffmpegで完結するスクリプトを作成。

使い方1(ファイル名指定版)

$ chmod +x fade_video.sh
$ ./fade_video.sh input.mp4 output.mp4 2 2
入力ファイル 出力ファイル フェードイン秒 フェードアウト秒

ソース1(ファイル名指定版)

fade_video.sh
#!/bin/bash

INPUT="$1"
OUTPUT="$2"
FADE_IN_DURATION="$3"
FADE_OUT_DURATION="$4"

# ffprobeで動画の長さ(秒)を取得
DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$INPUT")
DURATION=$(printf "%.2f" "$DURATION")  # 小数第2位まで

# フェードアウトの開始時間(動画の終わり - フェードアウトの長さ)
FADE_OUT_START=$(echo "$DURATION - $FADE_OUT_DURATION" | bc)

echo "動画の長さ: $DURATION 秒"
echo "フェードアウト開始: $FADE_OUT_START 秒"

# ffmpegでフェード適用(映像と音声両方)
ffmpeg -i "$INPUT" \
  -vf "fade=t=in:st=0:d=$FADE_IN_DURATION,fade=t=out:st=$FADE_OUT_START:d=$FADE_OUT_DURATION" \
  -af "afade=t=in:st=0:d=$FADE_IN_DURATION,afade=t=out:st=$FADE_OUT_START:d=$FADE_OUT_DURATION" \
  -y "$OUTPUT"

使い方2(フォルダ指定版)

$ chmod +x fade_folder.sh
$ ./fade_folder.sh input_folder output_folder 2 2
入力フォルダ 出力フォルダ フェードイン秒 フェードアウト秒

ソース2(フォルダ指定版)

fade_folder.sh
#!/bin/bash

INPUT_DIR="$1"
OUTPUT_DIR="$2"
FADE_IN_DURATION="$3"
FADE_OUT_DURATION="$4"

mkdir -p "$OUTPUT_DIR"

for INPUT_FILE in "$INPUT_DIR"/*; do
  # 拡張子チェック(動画ファイルのみ)
  if [[ "$INPUT_FILE" =~ \.(mp4|mov|mkv|avi)$ ]]; then
    BASENAME=$(basename "$INPUT_FILE")
    OUTPUT_FILE="$OUTPUT_DIR/$BASENAME"
    # 出力ファイル名を変更したい場合    
    #OUTPUT_FILE="$OUTPUT_DIR/faded_$BASENAME"    

    # 動画の長さを取得
    DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$INPUT_FILE")
    DURATION=$(printf "%.2f" "$DURATION")
    FADE_OUT_START=$(echo "$DURATION - $FADE_OUT_DURATION" | bc)

    echo "処理中: $BASENAME (長さ: $DURATION 秒, フェードアウト開始: $FADE_OUT_START 秒)"

    # ffmpegでフェード適用(映像と音声両方)
    ffmpeg -i "$INPUT_FILE" \
      -vf "fade=t=in:st=0:d=$FADE_IN_DURATION,fade=t=out:st=$FADE_OUT_START:d=$FADE_OUT_DURATION" \
      -af "afade=t=in:st=0:d=$FADE_IN_DURATION,afade=t=out:st=$FADE_OUT_START:d=$FADE_OUT_DURATION" \
      -y "$OUTPUT_FILE"
  fi
done
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?