Skip to content

Commit 912a470

Browse files
committed
extract FFmpeg setup to a standalone action
1 parent d45203e commit 912a470

2 files changed

Lines changed: 54 additions & 39 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: Setup FFmpeg and FFprobe
2+
description: Install FFmpeg and FFprobe across Linux, MacOS (Intel), and Windows
3+
inputs:
4+
ffmpeg-version:
5+
description: FFmpeg version to install
6+
required: true
7+
runs:
8+
using: composite
9+
steps:
10+
- name: Install FFmpeg and FFprobe
11+
shell: bash
12+
run: |
13+
set -euo pipefail
14+
15+
FF_VERSION="${{ inputs.ffmpeg-version }}"
16+
INSTALL_DIR="$HOME/ffmpeg"
17+
mkdir -p "$INSTALL_DIR"
18+
19+
if [[ "${{ runner.os }}" == "Linux" ]]; then
20+
docker pull mwader/static-ffmpeg:$FF_VERSION
21+
CID=$(docker create mwader/static-ffmpeg:$FF_VERSION)
22+
docker cp "$CID:/ffmpeg" "$INSTALL_DIR/ffmpeg"
23+
docker cp "$CID:/ffprobe" "$INSTALL_DIR/ffprobe"
24+
docker rm "$CID"
25+
chmod +x "$INSTALL_DIR/"*
26+
27+
elif [[ "${{ runner.os }}" == "macOS" ]]; then
28+
curl -L "https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip" -o ffmpeg.zip
29+
unzip -q ffmpeg.zip
30+
mv ffmpeg "$INSTALL_DIR/ffmpeg"
31+
32+
curl -L "https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip" -o ffprobe.zip
33+
unzip -q ffprobe.zip
34+
mv ffprobe "$INSTALL_DIR/ffprobe"
35+
36+
chmod +x "$INSTALL_DIR/"*
37+
38+
elif [[ "${{ runner.os }}" == "Windows" ]]; then
39+
curl -L "https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$FF_VERSION-essentials_build.zip" -o ffmpeg.zip
40+
unzip -q ffmpeg.zip
41+
find . -type f \( -name ffmpeg.exe -o -name ffprobe.exe \) -exec mv {} "$INSTALL_DIR/" \;
42+
fi
43+
44+
echo "$INSTALL_DIR" >> "$GITHUB_PATH"
45+
46+
- name: Verify FFmpeg and FFprobe installations
47+
shell: bash
48+
run: |
49+
ffmpeg -version
50+
ffprobe -version

.github/workflows/unit-test.yml

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,46 +23,11 @@ jobs:
2323
- name: Checkout code changes
2424
uses: actions/checkout@v6
2525

26-
- name: Install FFmpeg and FFprobe
27-
shell: bash
28-
run: |
29-
set -euo pipefail
26+
- name: Setup FFmpeg and FFprobe
27+
uses: ./.github/actions/setup-ffmpeg
28+
with:
3029
# bump: ffmpeg-ci /ffmpeg-version: '([\d.]+)'/ docker:mwader/static-ffmpeg
31-
FF_VERSION="8.0.1"
32-
INSTALL_DIR="$HOME/ffmpeg"
33-
mkdir -p "$INSTALL_DIR"
34-
35-
if [[ "${{ runner.os }}" == "Linux" ]]; then
36-
docker pull mwader/static-ffmpeg:$FF_VERSION
37-
CID=$(docker create mwader/static-ffmpeg:$FF_VERSION)
38-
docker cp "$CID:/ffmpeg" "$INSTALL_DIR/ffmpeg"
39-
docker cp "$CID:/ffprobe" "$INSTALL_DIR/ffprobe"
40-
docker rm "$CID"
41-
chmod +x "$INSTALL_DIR/"*
42-
43-
elif [[ "${{ runner.os }}" == "macOS" ]]; then
44-
curl -L https://evermeet.cx/ffmpeg/ffmpeg-$FF_VERSION.zip -o ffmpeg.zip
45-
unzip ffmpeg.zip
46-
mv ffmpeg "$INSTALL_DIR/ffmpeg"
47-
curl -L https://evermeet.cx/ffmpeg/ffprobe-$FF_VERSION.zip -o ffprobe.zip
48-
unzip ffprobe.zip
49-
mv ffprobe "$INSTALL_DIR/ffprobe"
50-
chmod +x "$INSTALL_DIR/"*
51-
52-
elif [[ "${{ runner.os }}" == "Windows" ]]; then
53-
curl -L https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-$FF_VERSION-essentials_build.zip -o ffmpeg.zip
54-
unzip ffmpeg.zip
55-
mv ffmpeg-*/bin/* "$INSTALL_DIR/"
56-
fi
57-
58-
echo "$INSTALL_DIR" >> "$GITHUB_PATH"
59-
echo "Installed FFmpeg and FFprobe $FF_VERSION"
60-
61-
- name: Verify FFmpeg and FFprobe installations
62-
shell: bash
63-
run: |
64-
ffmpeg -version
65-
ffprobe -version
30+
ffmpeg-version: 8.0.1
6631

6732
- name: Setup Java
6833
uses: actions/setup-java@v5

0 commit comments

Comments
 (0)