Table of contents
1 什麼是 FFmpeg
FFmpeg 係一個多功能既影片處理 command line 工具。
2 下載 FFmpeg
坊間既 build:
3 FFmpeg 功能
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 參考資料