➜ Old React website
Chung Cheuk Hang MichaelJava Web Developer
進階 JavaScript用 React 寫 calculator

FFmpeg 基本功能

Table of contents

1 什麼是 FFmpeg

FFmpeg 係一個多功能既影片處理 command line 工具。

2 下載 FFmpeg

坊間既 build:

3 FFmpeg 功能

3.1 轉換影片 format

ffmpeg -i "input.mkv" -codec copy "output.mp4"

3.2 轉換影片成 GIF

ffmpeg -i "input.mov" -s 720x480 -pix_fmt rgb24 -r 10 -f gif - > "out.gif"

3.3 裁剪影片

ffmpeg -ss 00:00:30 -to 00:01:00 -i "input.mp4" -c copy "output.mp4"

3.4 順時針旋轉影片

ffmpeg -i "input.mp4" -c copy -metadata:s:v:0 rotate=-90 "output.mp4"
# 90 度 ffmpeg -i "input.mp4" -vf "transpose=1" "output.mp4" # 180 度 ffmpeg -i "input.mp4" -vf "transpose=1,transpose=1" "output.mp4"

3.5 逆時針旋轉影片

ffmpeg -i "input.mp4" -c copy -metadata:s:v:0 rotate=90 "output.mp4"
# 90 度 ffmpeg -i "input.mp4" -vf "transpose=2" "output.mp4" # 180 度 ffmpeg -i "input.mp4" -vf "transpose=2,transpose=2" "output.mp4"

3.6 合併多條影片

先建立一個叫 input.txt 既檔案,內容跟以下格式:
file '1.mkv' file '2.mkv' file '3.mkv'
之後執行:
ffmpeg -safe 0 -f concat -i "input.txt" -c copy "output.mkv"

3.6.1 合併多條影片並加入淡入淡出效果

如果想要影片與影片之間有淡入淡出效果,有人寫左一個網頁可以根據需要而生成相關既 FFmpeg command:

3.7 從影片提取 WAV 音頻

ffmpeg -i "input.mp4" -vn -acodec pcm_s16le -ar 44100 -ac 2 "output.wav"

3.8 轉換影片成 MP3 音頻

ffmpeg -i "input.mp4" "output.mp3"

3.9 加入音頻

如果想將一首樂曲作為影片既聲音部分,我地可以咁做:
ffmpeg -i "input.mp4" -i "audio.wav" -map 0:v -map 1:a -c:v copy -shortest "output.mp4"
註:-shortest 既作用係令影片既長度以播放長度較短既一方決定,咁就唔會因為音頻長過影片而令影片結尾出現有聲冇畫面既情況,但係如果音頻短過影片,就唔好加呢個 flag。

3.10 影片靜音

為影片除去音頻部分:
ffmpeg -i "input.mp4" -c copy -an "output.mp4"

3.11 將多張圖片轉成一條影片

先將所有圖片儲存做 JPG 格式。
之後建立一個叫 input.txt 既檔案,內容跟以下格式:
1file '1.jpg' 2duration 5 3file '2.jpg' 4duration 5 5file '3.jpg' 6duration 5
之後執行:
ffmpeg -f concat -i "input.txt" -c:v libx264 -r 30 -pix_fmt yuv420p "output.mp4"
註:
  • duration 後面既數字係我地想上一行既圖片喺影片裡面所佔既時間,以秒數計。
  • 1 張圖片會被用作影片既闊度同埋高度。
  • 要確保第 1 張圖片既闊度同埋高度都係 2 既倍數。

3.11.1 已知問題

有一個已知問題,就係影片既長度可能會出錯,尤其係當我地只有 1 張或者 2 張圖片既時候。
參考:
我自己既 workaround:
個 workaround 就係先將每一張圖片轉換成獨立既影片檔案,再將佢地合併成單條影片。
首先重複將每一張圖片轉換成影片:
file '1.jpg' duration 5 file '1.jpg'
ffmpeg -f concat -i "input.txt" -c:v libx264 -r 30 -pix_fmt yuv420p "output.mp4"
之後將佢地合併:
file '1.mp4' file '2.mp4'
ffmpeg -safe 0 -f concat -i "input.txt" -c copy "output.mkv"

3.12 檢查影片長度

ffprobe result.mp4 -show_entries format=duration -v 0

3.13 提取 SRT 字幕

如果影片自帶非內嵌既字幕,我地可以簡單咁提取佢地出黎做 SRT 檔:
ffmpeg -i "input.mkv" -map 0:s:1 "output.srt"
註:
  • 0:s:1 裡面既 1 係指第幾個字幕(0-based)。
  • 有啲影片可能有多國語言既字幕,我地可以用影片播放程式播放呢條片,再睇下我地想要既字幕排第幾。

4 參考資料