国产成人精品999视频&日本一区二区亚洲人妻精品&久久久精品国产99久久精&99热这里只有成人精品国产&精品国产剧情av一区二区&成人亚洲精品久久久久app&国产精品美女高潮抽搐A片

FFmpeg 備忘清單

本備忘清單是 FFmpeg 中常見視頻處理操作的備忘清單

FFmpeg 參考

安裝

Linux

$ apt-get install ffmpeg
$ yum install ffmpeg

MacOS

$ brew install ffmpeg

示例

mp4 轉(zhuǎn) avi:

$ ffmpeg -i input.mp4 output.avi

webm 轉(zhuǎn) mp4:

$ ffmpeg -i movie.webm movie.mp4

全局選項(xiàng)

:--
-y覆蓋輸出文件
-n不要覆蓋輸出文件

主要選項(xiàng)

:--
-f fmt強(qiáng)制輸入或輸出文件格式
-i fName輸入文件名,未指定顯示內(nèi)容流的摘要
-c codecName指定編解碼器 [輸入或輸出]
-fs Nbytes以 Nbytes 指定最大輸出文件大小

基礎(chǔ)參數(shù)

:--
-codecs列出可用編碼
-formats列出支持的格式
-protocols列出支持的協(xié)議
-i input.mp4指定輸入文件
-c:v libx264指定視頻編碼
-c:a aac指定音頻編碼
-vcodec libx264舊寫法
-acodec aac舊寫法
-fs SIZE指定文件大小

視頻參數(shù)

:--
-b bRate設(shè)置視頻比特率(單位 kbit/s)
-fixaspect固定縱橫比
-bt tolerance設(shè)置視頻比特率容差(單位 kbit/s)
-maxrate bRate設(shè)置最大視頻比特率容差(單位 kbit/s)
-minrate bRate設(shè)置最小視頻比特率容差(單位 kbit/s)
-bufsize size設(shè)置速率控制緩沖區(qū)大小(以 kByte 為單位)
-sameq使用與源相同的視頻質(zhì)量(意味著 VBR)
-newvideo將新的視頻流添加到當(dāng)前輸出流
-aspect RATIO縱橫比(4:3、16:9 或 1.25)
-r RATE每秒幀率
-s WIDTHxHEIGHT幀大小
-vn沒有視頻

碼率設(shè)置

-b:v 1M      # 視頻比特率(1M = 1Mbit/s)
-b:a 1M      # 音頻比特率(1M = 1Mbit/s)

尺寸規(guī)格

:----
Kk1031000 字節(jié)千字節(jié) Kilobytes
M1061000000 字節(jié)兆字節(jié) Megabytes
G1091000000000千兆字節(jié) Gigabytes
Ki2101024千字節(jié) Kibibyte
Mi2201048576兆字節(jié) Mebibyte
Gi2301073741824Gibibyte

音頻參數(shù)

:--
-ab bRate設(shè)置音頻比特率(單位 kbit/s)
-aframes N設(shè)置要錄制的音頻幀數(shù) [-frames:a 的別名]
-aq q設(shè)置音頻質(zhì)量(特定于編解碼器,VBR) [-q:a 的別名]
-an禁用錄音
-acodec codec設(shè)置音頻編解碼器。[-codec:a 的別名] 使用 'copy' 復(fù)制流。
-vol以 256 的倍數(shù)更改音頻音量,其中 256 = 100%(正常)音量。例如 512 = 200%
-newaudio將新的音頻流添加到當(dāng)前輸出流
-alang code設(shè)置當(dāng)前音頻流的 ISO 639 語言代碼(3 個字母)

視頻編輯

剪切視頻部分

# 從1分45秒開始剪切2分35秒
$ ffmpeg -i <input> -ss 00:01:45 -t 00:02:35 -vcodec copy -acodec copy <output>
# 從1分45秒開始剪切到第4分20秒,與上一行等效
$ ffmpeg -i <input> -ss 00:01:45 -to 00:04:20 -codec copy <output>
$ ffmpeg -ss 00:00:30 -i orginalfile.mpg -t 00:00:05 -vcodec copy -acodec copy newfile.mpg
# 從 4.5 秒開始的 5 秒長的視頻
$ ffmpeg -i in.mp4 -ss 4.5 -t 5 out.mp4

視頻幀速率

$ ffmpeg -i input.avi -r 24 output.avi

將輸出文件的幀速率強(qiáng)制為 24 fps

$ ffmpeg -r 1 -i input.m2v -r 24 output.avi

將輸入文件的幀速率(僅對原始格式有效)強(qiáng)制為 1 fps,將輸出文件的幀速率強(qiáng)制為 24 fps

H265 2-pass 編碼

$ ffmpeg -y -i <input> -c:v libx265 -b:v 2600k \
  -x265-params pass=1 \
  -an -f mp4 /dev/null && \
    ffmpeg -i <input> \
        -c:v libx265 -b:v 2600k \
        -x265-params pass=2 \
        -c:a aac -b:a 128k output.mp4

對于 H265 2-pass 編碼,您需要組合 2ffmpeg 調(diào)用

視頻比特率設(shè)置

$ ffmpeg -i input.avi -b:v 64k -bufsize 64k output.avi

將輸出文件的視頻比特率設(shè)置為 64 kbit/s

固定旋轉(zhuǎn)

$ ffmpeg -i <input> -c copy -metadata:s:v:0 rotate=90 <output>

不要為旋轉(zhuǎn)重新編碼,而是簡單地為旋轉(zhuǎn)角度添加一個視頻元數(shù)據(jù)字段

縮放到特定寬度

$ ffmpeg -i in.mp4 -filter:v scale="538:trunc(ow/a/2)*2" -c:a copy out.mp4

給定所需的視頻寬度,例如 538 像素,您可以使用以下方法將視頻調(diào)整為該寬度,同時保持寬高比

重新包裝

提取音頻流

$ ffmpeg -i file.mp4 -vn -c copy output.aac 

-vn (過濾視頻),使用 -c copy,不會重新解碼和編碼,加快速度。

提取視頻流

$ ffmpeg -i file.mp4 -an -c copy output.mp4

處理 id3 標(biāo)簽

提取

$ ffmpeg -i file.mp3 -f ffmetadata metadata.txt

設(shè)置

$ ffmpeg -i file.mp3 -acodec copy -metadata title="<title>" -metadata artist="<artist>" -metadata album="<album>" out.mp3

更多請查看

重新采樣/轉(zhuǎn)換音頻

$ ffmpeg -i file.aac -acodec mp3 -ar 44100 -ab 128000 output.mp3

將輸入文件轉(zhuǎn)碼為 DVD PAL 格式

$ ffmpeg -y -threads 8 -i inFile -target pal-dvd -ac 2 -aspect 16:9 -acodec mp2 -ab 224000 -vf pad=0:-0:0:0 outFile

-map 命令

-map 命令用于指定索引文件,以及索引文件中流類型和它的索引


-map index:stram_type:stream_index

:--
input_file_index輸入的文件索引(從 0 開始)
stream_type指定文件流的類型(a -> 音頻,v -> 視頻,s -> 字幕)
stream_index指定流類型的索引(從 0 開始)

將第一個輸入文件的第二個音頻拷貝到 out.mp3

$ ffmpeg -i input.mp4 -map 0:a:1 -c copy out.mp3

將第一個輸入文件的視頻流和第二個輸入文件的音頻流拷貝到 out.mp4

$ ffmpeg -i i1.mp4 -i i2.mp4 -map 0:v -map 0:a -c copy out.mp4

反向 -map 命令

反向的 map 命令(在 map 命令的參數(shù)前加負(fù)號)。例如,-map -0:a:0,忽略第一個文件中的第一個音頻流。

切換容器(轉(zhuǎn)換類型)

將容器從 MKV 更改為 MP4

$ ffmpeg -i file.mkv -acodec copy -vcodec copy file.mp4

要將視頻從 .mov 更改為 .mp4

$ ffmpeg -i in.mov out.mp4

音視頻同步

將音頻延遲 3 秒

$ ffmpeg -i input.mov -itsoffset 3 -i input.mov -map 0:v -map 1:a -codec:a copy -codec:v copy output.mov

將視頻延遲 3 秒(即將音頻提前 3 秒)

$ ffmpeg -i input.mov -itsoffset 3 -i input.mov -map 1:v -map 0:a -codec:a copy -codec:v copy output.mov

圖片中的視頻

$ ffmpeg -f image2 -i image%d.jpg video.mp4

多個編號的圖像 image1.jpg、image2.jpg... 像這樣從它們創(chuàng)建一個視頻

將視頻拆分為圖像

$ ffmpeg -i video.mp4 image%d.jpg

錄屏

查找所有可用設(shè)備

$ ffmpeg -f avfoundation -list_devices true -i ""

一定要選擇好設(shè)備,根據(jù)設(shè)備進(jìn)行配置。

windows 下錄屏

$ ffmpeg -hide_banner -loglevel error -stats -f gdigrab -framerate 60 \
-offset_x 0 -offset_y 0 -video_size 1920x1080 -draw_mouse 1 -i deskop \
-c:v libx264 -r 60 -preset ultrafast -pix_fmt yuv420p -y screen_record.mp4

mac 下錄屏

$ ffmpeg -f avfoundation -i 1:0 -preset ultrafast out.mkv

合并音頻與圖片

合并多個音頻,自定義背景圖片,生成視頻音樂

# mylist.txt >>>
file '1.mp3'
file '2.mp3'
file '3.mp3'

# OBS: 46500 = 25:50 minutes * 60 * 30fps
# echo "00:25:50" | awk -F: '{ print (($1 * 3600) + ($2 * 60) + $3) * 30 }'
$ ffmpeg -y -loop 1 -i cover.jpg -f concat -i mylist.txt -c:v libx264 -r 30 -pix_fmt yuv420p -vframes 46500 -c:a aac -b:a 192k -strict experimental -shortest output.mp4

轉(zhuǎn)換為 Gif

$ ffmpeg -ss 2 -t 28 -i input.mp4 -vf "fps=10,scale=1080:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif

上面有關(guān)更多信息,請參閱 StackOverflow 問題

# 轉(zhuǎn)換為 GIF
$ ffmpeg -i input.mov output.gif
# 從 GIF 轉(zhuǎn)換
$ ffmpeg -i input.gif output.mov
# 在非 GIF 格式之間轉(zhuǎn)換
$ ffmpeg -i input.mov -codec:v copy -codec:a copy output.mp4

轉(zhuǎn)換為灰度

$ ffmpeg -y -i inFile -flags gray outFile

字幕格式轉(zhuǎn)換

# srt -> ass
$ ffmpeg -i subtitle.srt subtitle.ass
# ass -> vtt
$ ffmpeg -i subtitle.ass subtitle.vtt

srt、ass、vtt 等格式之間可以相互轉(zhuǎn)換

字幕

將字幕寫入視頻

$ ffmpeg -i input.mov -filter:v 'subtitles=subtitles.srt' -codec:a copy output.mov

將字幕寫入視頻,具有自定義字幕樣式

$ ffmpeg -i input.mov -filter:v "subtitles=subtitles.srt:force_style='FontName=Menlo Bold,Fontsize=18'" -codec:a copy output.mov

制造 1 分鐘的音頻噪音

$ ffmpeg -ar 48000 -t 60 -f s16le -acodec pcm_s16le -i /dev/u-random -ab 64K -f mp2 -acodec mp2 -y noise.mp2

從視頻中提取圖像

$ ffmpeg -i foo.avi -r 1 -s WxH -f image2 outFil-e%0-3d.png

音量

將音量減半

$ ffmpeg -i input.mov -codec:v copy -filter:a 'volume=0.5' output.mov

音量加倍

$ ffmpeg -i input.mov -codec:v copy -filter:a 'volume=2' output.mov

將圖像文件轉(zhuǎn)換為其他格式

$ ffmpeg -i foo012-2.png foo.tiff 

pgm, ppm, pam, pgmyuv, jpeg, gif, png, tiff, sgi

將圖像轉(zhuǎn)換為 AVI 文件

$ ffmpeg -f image2 -i foo-%0-3d.jpeg -r 12 -s WxH foo.avi

將 WAV 文件轉(zhuǎn)換為 MP3

$ ffmpeg -i source-_so-ng.wav -vn -ar 44100 -ac 2 -ab 192 -f mp3 final_-son-g.mp3

從視頻中提取音頻,將其轉(zhuǎn)碼為 MP3

$ ffmpeg -i source.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3

將 .avi 轉(zhuǎn)換為 .flv

$ ffmpeg -i source.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv output.flv

將圖片附加到 mp3

$ ffmpeg -i input.mp3 -i cover.png -c copy -metad-ata:s:v title=-"-Album cover" -metad-ata:s:v commen-t="Cover (Front-)" out.mp3

將視頻與聲音文件混合

$ ffmpeg -i song.wav -i source-_vi-deo.avi outvid-eo.mpg

編寫帶有 ID3v2.3 頁眉和 ID3v1 頁腳的 mp3

$ ffmpeg -i inFile -id3v2-_ve-rsion 3 -write-_id3v1 1 outFil-e.mp3

連接輸入文件

$ cat inFile1 inFile2 | ffmpeg -f mpeg -i - -vcodec copy -acodec copy outFil-e.mpg

使用比特率和 mp3 音頻的編解碼器對剪輯進(jìn)行編碼

$ ffmpeg -i clip.avi -vcodec libxvid -b 800000 -acodec libmp3lame -ab 128 new-cl-ip.avi

將音頻流與來自不同文件的視頻流合并

$ ffmpeg -i audioS.mp4 -i videoS.mp4 -c copy -map 0:a -map 1:v outFil-e.mp4

合并視頻

合并相同規(guī)格(解碼/分辨率/幀率)視頻

# mylist.txt >>>
file '1.mp4'
file '2.mp4'
file '3.mp4'

# 這些文件是相對路徑,如使用絕對路徑需要添加 `-safe 0` 參數(shù)
$ ffmpeg -f concat -i mylist.txt -c copy output.mp4

合并當(dāng)前目錄下所有視頻

$ ffmpeg -f concat -safe 0 -i <(for f in ./*.mp4; do echo "file '$PWD/$f'"; done) -c copy output.mp4

合并不同規(guī)格視頻,保證視頻不變形

$ ffmpeg -i 1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp1.ts
$ ffmpeg -i 2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp2.ts
$ ffmpeg -i 3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts tmp3.ts

$ ffmpeg -threads 2 -i "concat:tmp1.ts|tmp2.ts|tmp3.ts"  -vf "scale=720:1080:force_original_aspect_ratio=decrease,pad=720:1080:(ow-iw)/2:(oh-ih)/2" -pix_fmt yuvj420p -shortest -y output.mp4

合并不同解碼視頻

$ ffmpeg -i input1.mp4 -i input2.webm -i input3.mov \
-filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" \
-map "[outv]" -map "[outa]" output.mkv

合并視頻并重新編碼音頻

$ ffmpeg -f concat -i mylist.txt -c:v copy -c:a flac -strict -2 output.mp4

視頻過濾器

格式

如果一個 fliter 有多個參數(shù),需要使用 , 分隔

$ ffmpeg -i test.avi -c:v libx264 -vf "scale=1024:-1,transpose=1,crop=iw/3:ih/3" output.mp4

縮放

$ ffmpeg -i input.mp4 -vf "scale=640:480" out.mp4
# -1 → 指根據(jù)另一個參數(shù)幫我們推斷
$ ffmpeg -i input.mp4 -vf "scale=720:-1" out.mp4
# 寬度和高度
ffmpeg -i input.mp4 -vf "scale=w=800:h=600" output.mp4
# in_w\in_h 輸入尺寸
ffmpeg -i input.mkv -vf "scale=w=1/2*in_w:h=1/2*in_h" output.mkv

裁剪

從左上角開始,復(fù)制 x=0px y=0px 的相應(yīng)窗口來創(chuàng)建 1280x720 大小的輸出視頻

ffmpeg -i input.mp4 -vf "crop=w=1280:h=720:x=0:y=0" output.mp4

裁剪到寬度 360,高度 640,從坐標(biāo) (10, 20) 開始

$ ffmpeg -i input.mov -vf 'crop=360:640:10:20' output.mov

去除水印

設(shè)置一個矩形覆蓋區(qū)域 x=10:y=10:w=120:h=45

# show=1 為可選參數(shù),設(shè)置顯示邊框,方便調(diào)試用的
ffmpeg -i 1.mp4 -b:v 548k -vf delogo=x=10:y=10:w=120:h=45:show=1 output.mp4

創(chuàng)建縮略圖

在 10 秒時創(chuàng)建一個縮略圖

$ ffmpeg -ss 10 -i <input file> -vframes 1 -vcodec png -an thumb.png

例如,要每 n 秒創(chuàng)建一次縮略圖,請使用 -vf fps=1/n

$ ffmpeg -i <input file> -vf fps=1/60 thumbnails/thumb%03d.png

添加水印

在視頻左上方 20,20 的位置插入 logo.png 圖片

# -b:v 548k 可選參數(shù),設(shè)置視頻比特率,默認(rèn) 200k 最好設(shè)置與原視頻一致
ffmpeg -i 1.mp4 -acodec copy -b:v 548k -vf "movie=logo.png[watermark];[in][watermark]overlay=20:20" output.mp4

視頻旋轉(zhuǎn)

# 順時針旋轉(zhuǎn) 90
$ ffmpeg -i input.avi -vf "rotate=90*PI/180" out.mp4 
# 順時針旋轉(zhuǎn) 180,翻轉(zhuǎn) 90
$ ffmpeg -i input.mp4 -vf "rotate=PI" out.mp4

更改視頻播放速度

# 加速 2 倍
$ ffmpeg -i input.mkv -vf "setpts=0.5*PTS" output.mkv 
# 減速 2 倍
$ ffmpeg -i input.mp4 -vf "setpts=2*PTS" output.mp4

添加背景音樂

# -t 10 文件時長,單位為秒,建議取值原始視頻總時長
$ ffmpeg -i 1.mp4 -i test.mp3 \
  -filter_complex "[1:a]aloop=loop=-1:size=2e+09[out];[out][0:a]amix" \
  -t 10 out.mp4

音頻過濾器

調(diào)節(jié)音量

# 增大音量
$ ffmpeg -i test.mp4 -af "volumn=1.5" out.mp4

更改音頻速度

$ ffmpeg -i input.wav -af "atempo=0.75" output.wav 
# 加速 4 倍
$ ffmpeg -i input.mp3 -af "atempo=2.0,atempo=2.0" ouutput.mp3

atempo 它只接受?0.5(半速) 到?2 (倍速)之間的值。為了越過這個限制,你可以鏈?zhǔn)绞褂眠@個過濾器

統(tǒng)一視頻的音量

$ ffmpeg -i test.mp4 -af "loudnorm=I=-5:LRA=1" out.mp4

重新映射通道數(shù)

# 使左右耳的聲音同時出現(xiàn)
$ ffmpeg -i input.mp3 -af "channelmap=1-0|1-1" output.mp3

流處理

拉流

# 拉取rtmp流并存儲到本地
$ ffmpeg -i "rtsp://127.0.0.1/test" test.mp4

推流

# 推送test.mp4到遠(yuǎn)程
$ ffmpeg -re -i test.mp4 -f flv rtmp://127.0.0.1/test

轉(zhuǎn)發(fā)

# 拉取流并轉(zhuǎn)發(fā)
$ ffmpeg -i "rtsp://127.0.0.1/test" -f mpegts -codec:v mpeg1video http://127.0.0.1/demo

另見