跳至主要内容

[Note] ffmpeg, ffprobe, ffplay

$ ffmpeg -i filename.flv  # 檢視影片資訊
$ ffprobe filename.flv -show_format # 檢視影片資訊
$ ffplay filename.flv

安裝

使用 homebrew 安裝

$ brew install ffmpeg

手動安裝 ffmpeg

如果可以的話,直接將 ffmpeg 的執行檔複製進 /usr/local/bin 即可。

否則,在家目錄新增或修改 ./bash_profile ,接著在裡面輸入:

# /path/to/dir 放要加入 $PATH 的路徑
export PATH=$PATH:/path/to/dir

使用 ffmpeg 下載 m3u8 檔案

  1. 先找到類似 .m3u8 的播放清單檔案(從 Network 中搜尋 .m3u
  2. 找到 .m3u8 的檔案後,裡面的連結有時候只會放檔名,要先讓它變成完整的連結需要加上前綴(從 Network 中搜尋 .ts,看看這些 .ts 的實際網址為何)
  3. 透過 ffmpeg 下載

💡 有時候真正的 .m3u8 會先記錄在某一個純文字檔中,從純文字檔中才可以找到真正的 .m3u8 清單。

# -i : Input
# -c : codec
$ ffmpeg -i "m3u8網址" -c copy media.mp4

$ ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i "m3u8網址" -c copy "ep1.mp4"

# 有些時候需要把 m3u8 檔案下載下來放在本地
$ ffmpeg -protocol_whitelist "file,http,https,tcp,tls" -i "m3u8檔案位置" -c copy "ep1.mp4"

# 有些時候需要偽造標頭,先用瀏覽器的 Network 看請求 m3u8 檔時用了哪些 request header
$ ffmpeg -protocol_whitelist "file,http,https,tcp,tls" \
-user_agent "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:61.0) Gecko/20100101 Firefox/61.0" \
-headers $'Origin: origin表頭值\r\nReferrer: referrer表頭值\r\nCookie: cookie值\r\n' \
-i "http://xxx.yyy/zzz.mp4/index.m3u8" \
-c copy "/Users/Jason/Desktop/example.mp4"

下載 M3U8 串流影音-問題解決 @ NotFalse

實際操作範例

下載 EToday 影片

下載公視影片

使用 ffmpeg 轉檔(convert)

# convert .mov to .mp4
$ ffmpeg -i videoName.mov -vcodec h264 -acodec mp2 videoName.mp4
$ ffmpeg -i movie.mov -vcodec copy -acodec copy out.mp4 # 過水 without encoding (fast)
$ ffmpeg -i input.mov -qscale 0 output.mp4 # re-encodes with best quality

# convert .mov to .webm
$ ffmpeg -i videoName.mov -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis videoName.webm

# convert .mov to .ogg
$ ffmpeg -i videoName.mov -codec:v libtheora -qscale:v 7 -codec:a libvorbis -qscale:a 5 videoName.ogg

# convert .webm to mp3
$ ffmpeg -i videoName.webm -vn -ab 128k -ar 44100 -y videoName.mp3

合併影片和音檔

$ ffmpeg -i video.mp4 -i audio.mp3 output.mp4

其他

-ac 1     # 轉錄時只要保留單聲道

將 mp3 轉成 mp4

ffmpeg -loop 1 -i image.jpg -i audio.mp3 -c:a copy -c:v libx264 -shortest out.mp4

Convert mp3 -> Video with static image @ StackOverflow

擷取圖檔(縮圖)

# 擷取第一個 frame 當作 jpeg
$ ffmpeg -i input.webm -vframes 1 output.jpeg

改變影片尺寸

$ ffmpeg -i input.webm -vf scale=1136x2432 output.webm

增加可處理的 queue

出現錯誤:FFMPEG: Too many packets buffered for output stream 0:1

$ ffmpeg -i output.webm -max_muxing_queue_size 1024 output.mp4

FFMPEG: Too many packets buffered for output stream 0:1 @ StackOverflow

參考