影片轉檔參數
Published by knick,
2016/1/28測試 某影片以下列參數轉檔
00000.MTS--->2.1G
avconv -i 00000.MTS -crf 18 00000_crf18.mp4 ---> 2.4G
avconv -i 00000.MTS -crf 0 00000_crf0.mp4 ;--->28.9G
avconv -i 00000.MTS -c copy 00000_copy.mp4 ;--->2.0G
以 -c copy 似乎是最好的參數
要加上 -movflags faststart 這個參數
ffmpeg -i [input file] -t [duration] -codec copy [output file]
EX:從 00:00:30 開始剪到 00
:01:45
ffmpeg -i inputFile -ss 00:00:30 -to 00:01:45 outputFileffmpeg -i inputFile -vcodec copy -acodec copy
-ss 00:00:30 -to 00:01:45
outputFile
ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg
ffmpeg -i "concat:input1.MTS|input2.MTS|input3.MTS" -c copy output.MTS
ffmpeg -i "concat:input1.M2TS|input2.M2TS|input3.M2TS" -c copy output.M2TS
ffmpeg -i file1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts '/tmp/tmp1'
ffmpeg -i file2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts '/tmp/tmp2'
ffmpeg -i "concat:/tmp/tmp1|/tmp/tmp2" -c copy -bsf:a aac_adtstoasc output.mp4
[使用命令列合併影片-wmv]
因為這篇提到的方法,是利用 mencoder 指令把每個檔案的每一頁畫面逐一複製到新檔案的方式來合併,
avconv -i file.mkv -c copy file.mp4
[avi 轉 mp4 無損轉換]
avconv -i file.avi -c copy file.mp4
無損轉換 上面的指令換成下面的也行
avconv -i file.mkv -c:v copy -c:a copy file.mp4
avconv -i file.avi -c:v copy -c:a copy file.mp4
[wmv 轉 x264 mp4]
/usr/bin/avconv -i "input
.wmv" -c:v libx264 -crf 18 -preset veryslow -acodec libvo_aacenc "output.mp4"
[wmv 轉 x265 mp4]
ffmpeg -i "input
.wmv" -c:v libx265 -preset medium -x265-params crf=20 -c:a aac -strict experimental -b:a 128k "output.mp4"
[轉webm (用VP9)]
ffmpeg -t 00:00:00 -i input.mkv -codec:v libvpx-vp9 -crf 18 -b:v 0 -threads 8 -speed 2 -tile-columns 6 -frame-parallel 1 -auto-alt-ref 1 -lag-in-frames 25 -c:a libopus -b:a 64k -f webm output.webm
轉vp9無法快轉,暫時不轉VP8與VP9
[ISO 轉 mp4]
1.先mount ISO
2.把VOB合併
3.把VOB轉無損mpg
4.把mpg轉mp4
ffmpeg -i "concat:VTS_01_1.VOB|VTS_01_2.VOB|VTS_01_3.VOB|VTS_01_4.VOB" -c copy -f vob ouput.mpg;\
/usr/bin/avconv
-i ouput.mpg -crf 18 -filter:v yadif output.mp4;
-filter:v yadif--->去交錯 ,原本使用參數-deinterlace,但有下列提醒訊息
-deinterlace is deprecated, use -filter:v yadif instead
改成-filter:v yadif 就OK
[影片調整 亮度 對比 飽和]
avconv -i input.avi -c:v copy -c:a copy -vf "eq=contrast=1:brightness=0.1:saturation=1"
output.mp4
contrast (對比 , 預設值 1 , 範圍 -2.0 ~ 2.0
)
brightness (亮度 , 預設值 0 , 範圍 -1.0 ~ 1.0
)
saturation (飽和度 , 預設值 1 , 範圍0.0 ~ 3.0
)
gamma (預設值 1 , 範圍0.1 ~ 10.0)
使用經驗
旅館的房間使用下列參數
contrast=1.5
brightness=0.3
saturation=1.5
gamma= 1
hqdn3d去噪點專用,因為暗調亮容易產生雜訊
ffmpeg -i input.mpg -vf "eq=contrast=1.5:brightness=0.3:saturation=1.5:gamma=1,hqdn3d" output.mp4
將亮度提高2倍:
ffmpeg -i input.avi -vf lutyuv="y=val*2" output.avi
ffmpeg -i input.avi -vf lutyuv="y=gammaval(0.5)" output.avi
綜整各種調整影片亮度的方式:
-filter:v lutyuv="y=gammaval(0.5)"; (數字越小越亮)
-filter:v lutrgb="r=val*8:g=val*8:b=val*8"; (數字越大越亮)
-filter:v lutyuv="y=val*5.0"; (數字越大越亮)
濾鏡參數合併
Good:
ffmpeg -i input.mov -vf "scale=480:270, lutyuv=y=val*4, lutyuv=y=gammaval(2.0)" output2.avi
Good:
ffmpeg -i input.mov -vf scale=480:270,lutyuv=y=val*4,lutyuv=y=gammaval'(2.0)' output2.avi
https://ffmpeg.org/ffmpeg-filters.html#eq
hqdn3d(high quality denoise 3-dimensional,是denoise3d的高級版本,是ffmpeg濾鏡的一部分)
[影片轉gif圖片]
iw、ih、ow、oh,分別表示輸入寬、輸入高、輸出寬、輸出高,假設要縮小到原來的1/2,則可以用
scale=iw/2:ih/2
GIF 檔案瘦身
$ convert -layers Optimize animation.gif animation_small.gif
將影片指定段落轉為一張張圖片
$ avconv -i myvideo.mp4 -ss 00:00:18 -t 5 -s 320x180 out%04d.gif
說明: -i 來源影片, -ss 截錄起點, -t 截錄長度(秒) -s 輸出尺寸, %04d 表示四位數流水號
將所有 GIF 圖片整合為 GIF 動畫檔
$ convert -delay 1x25 -loop 0 out*gif animation.gif
說明: -delay 1x25 表示 25fps, -loop 0 表示 GIF 動畫無限循環
查詢原始影片 fps: avconv -i myvideo.mp4 2>&1 | grep fps
[影片檔增加備註或其他訊息]
ffmpeg -i input.avi -c:v copy -c:a copy -metadata comment="備註內容"
output.mp4
ffmpeg -i track05.wav \
-metadata title="Track #5" \
-metadata author="Unknown Artist" \
-metadata composer="Composer Unknown" \
-metadata album="Tracer Video Game Soundtrack" \
-metadata year="1996" \
-metadata track="5" \
-metadata comment="This is redbook CD audio track #5 from the Windows 95 game \"Tracer\"" \
-metadata genre="Game Soundtrack" \
-metadata copyright="Copyright 1996 Future Endeavors, Inc." \
-metadata description="Nifty techno background tune for a futuristic video game" \
-metadata synopsis="Hey, is this thing on? This is where the 'synopsis' field shows up." \
-metadata show="Tracer" \
-metadata episode_id="102" \
-metadata network="Some network" \
-acodec alac \
-y track05.m4a
http://multimedia.cx/eggs/supplying-ffmpeg-with-metadata/
http://wiki.multimedia.cx/index.php?title=FFmpeg_Metadata
[移除聲音]
ffmpeg -i input.mp4 -an output.mp4
-an 指的是 disable audio recording
[順時針旋轉 90 度]
avconv -i input.mp4 -vf transpose=1 -strict experimental transpose.mp4
0 = 90CounterCLockwise and Vertical Flip (default) 1 = 90Clockwise 2 = 90CounterClockwise 3 = 90Clockwise and Vertical Flip
左右翻轉
ffmpeg -i foo.avi -vf hflip hflip.avi
上下翻轉
ffmpeg -i foo.avi -vf vflip vflip.avi
encoder 'aac' is experimental and might produce bad results.
Add '-strict experimental' if you want to use it.
[左右翻轉]
avconv -i foo.avi -vf hflip hflip.avi
[上下翻轉]
avconv -i foo.avi -vf vflip vflip.avi
x265 壓縮三分鐘藍光影片,不同 Preset 與 CRF 參數的試驗結果(原始檔案大小709MB)
Preset value medium | Preset value slow | |||
CRF 18 | 6m34.405s | 62.6MB | 15m13.802s | 64.9MB |
CRF 20 | 6m17.139s | 43.9MB | 13m51.003s | 45.6MB |
CRF 23 | 5m49.504s | 27.7MB | 9m11.176s | 15.7MB |
CRF 28 | 5m11.953s | 15.6MB | 9m27.936s | 15.7MB |
Constant Ratefactor (CRF)
此方法允許編碼器自動分配位元速率來試著達到一定輸出品質。讓每個畫格得到它需要的位元數來保持所需的品質等級。
CRF 會得到最佳的位元速率分配結果,缺點是你不能直接指定一個目標位元率或是檔案大小。
設定值範圍為 0–51.0,0 為最高品質,預設值為 23。比較低的數值會得到比較高的品質,
合理的範圍 18 - 28。考慮 18 為視覺無損 (或接近),所以它看起來應該與輸入相同 (或接近) 但它技術上不是無損。
固定品質參數範例
ffmpeg -y -i "Input.mkv" -f webm -codec:v libvpx -crf 20 –v:b 60000k -quality best -codec:a libvorbis -b:a 128k "Output.webm"
在參數中Input與Output是輸入、輸出檔案的位置及名稱,讀者可自行更改引號中的路徑,-f webm代表使用webm封裝,
-codec:v libvpx、-codec:a libvorbis分別表示以libvpx、libvorbis做為影音編碼格式。
控制影片的重要參數是「-crf 20 –v:b 60000k」這段文字,前方的crf代表品質參數,數字越小品質越好,推薦設在20到25之間。
v:b在這邊則代表視訊最大資料流量,因為crf參數可以發揮控制流量的效果,所以筆者建議不要在v:b中再次限制資料流量,
因此可將此參數設一極大數值,讓它不會影響編碼即可。-b:a則是音訊資料流量,若無特殊需求,128~196是可以兼顧品質與檔案大小的選擇。
以固定品質編碼為範例,它可以在較短的編碼時間中,獲得較佳的畫質,但是它的問題是無法確認轉出影片的檔案大小,
經驗來看很少發生影片爆肥的情況,所以筆者還是推薦這種編碼方式。
x264 設定優先順序
preset > tune > 使用者設定選項 > fast first pass > profile > level
x264 preset
Preset 是一個選項集合,這設定一編碼速度來決定壓縮比。速度越慢則會得到更好的壓縮編碼效率 (畫質-位元率比 或 畫質-檔案大小比)。
一般而言是使用你所能忍受的最慢 Preset。
而越慢的 Preset 其 Reference frame (ref) 值也越高,例如 veryslow preset 的 ref 為 16。
Tune選項;
Film (電影): 膠片電影。
Animation (動畫): 例如卡通/日本動畫。
Grain (膠片顆粒): 顆粒感很重的影片。
Still Image (靜止影像): 例如幻燈片效果的影片。
PSNR: 優化 PSNR 值。 Wiki
SSIM: 優化 SSIM 值。 Wiki
Fast Decode (快速解碼): 用於低性能播放設備。 (※ 壓縮率極低)
Zero Latency (零延遲): 處裡時間低延遲。主要用於直播等。 (※ 壓縮率極低)
H.264 Level
Level 表示了對播放設備的解碼性能要求
值越高,代表播放設備解碼性能要求越高,相對的輸出影片的壓縮率也越越高
x265
x265 預設的CRF是28,相當於x264的23 ,CRF決定壓縮品質,Preset 決定壓縮後的檔案大小
- default CRF of 28. The CRF of 28 should visually correspond to libx264 video at CRF 23, but result in about half the file size.
-analyzeduration 100M
To coerce ffmpeg to search further for the subtitle stream, use options:
-probesize-analyzeduration
which will cause ffmpeg to search until the first of those limits is reached. Note that both of these options must appear on the command line before the specification of the input via -i. For example:
ffmpeg -probesize 50M -analyzeduration 100M -i vts.vob
will search through vts.vob for all streams until it has read 50 MB of data or 100 seconds of video, whichever comes first.
VP9參數解釋
CRF is the quality value (0-63 for VP9). To trigger this mode, you must use a combination of crf
要觸發CRF模式,您必須使用組合crf
speed 1 is a good speed vs. quality compromise. Produces output quality typically very close to speed 0, but usually encodes much faster.
VP9 tile-columns
Codec control function to set number of tile columns.
Supported in codecs: VP9
VP9E_SET_LOSSLESS
Codec control function to set lossless encoding mode.
Supported in codecs: VP9
http://wiki.webmproject.org/ffmpeg/vp9-encoding-guide