FFMPEG命令行处理视频进阶——高阶必读
from: https://blog.csdn.net/zhangamxqun/article/details/80295833
FFMPEG擁有強大的視頻處理能力,可惜的是有很多人不知道如何使用。本文深入介紹如何用編譯好ffmpeg.exe程序處理視頻,既有常用的簡單的處理,也有一些比較少見的高大上的處理,一定能讓你受益匪淺。ffmpeg是一把寶刀,在視頻處理上,基本是一刀在手,天下我有。
首先下載編譯好的ffmpeg程序,可以去下面的網址,https://ffmpeg.zeranoe.com/builds/# 點擊"Donload Build"按鈕下載最新編譯的版本,解壓后可以看到ffmpeg.exe文件用于處理視頻,ffplay.exe文件用于播放視頻。也可以去ffmpeg的官網http://ffmpeg.org/ 下載源碼自己編譯(這個工作量比較大)。
打開命令行窗口,使用cd命令行進入到ffmpeg所在的目錄,接下來就可以直接輸入處理命令了。下面就來介紹各種各樣的命令。下面命令行中的輸入視頻和輸出視頻的路徑必須正確,如果路徑不存在會出錯的哦。
1、知道了視頻流地址如何保存出本地文件:
ffmpeg -i rtmp://122.202.129.136:1935/live/ch4 -map 0 d:\work\yyy.mp4
2、知道了流地址,播放視頻文件:
ffplay -rtsp_transport tcp rtsp://192.168.201.133:554/stream1.sdp
3、提取視頻中的音頻文件:
ffmpeg -i h:\work\yyy.avi -map 0:a d:\work\yyy.mp3
ffmpeg -i rtmp://122.202.129.136:1935/live/ch4 -map 0:a d:\work\yyy.mp3
4、提起多媒體中的視頻(不要音頻)
ffmpeg -i rtmp://122.202.129.136:1935/live/ch4 -map 0:v d:\work\yyy.mp4
5、把音頻的左右聲道分別保存為兩個文件:
ffmpeg -i d:\work\yyy.mp3 -map_channel 0.0.0 d:\work\ch1.mp3 -map_channel 0.0.1 d:\work\ch2.mp3
6、把視頻的音視頻同時分為兩個文件保存:
ffmpeg -i h:\work\video.mp4 -map 0:v d:\work\video2.mp4 -map 0:a d:\work\video.mp3
7、把單純的視頻和單純的音頻合并為一個視頻文件:
ffmpeg -i d:\work\out.mp4 -i d:\work\video.amr -map 0:v -map 1:a d:\work\strange.mp4
8、在視頻的屏幕左上角加一個logo標志:
ffmpeg -i h:\work\video.mp4 -i h:\work\psu.png -filter_complex ‘overlay’ d:\work\video.mp4
9、輸出視頻的yuv數據:
ffmpeg -i d:\work\video.mp4 d:\work\hugefile.yuv
10、把視頻的圖像批量輸出((-r 1)一秒鐘保存一張,縮放為640*480,名稱為foo-001.jpeg, foo-002.jpeg…):
ffmpeg -i h:\work\video.mp4 -r 1 -s 640x480 -f image2 d:\work\foo-%03d.jpeg
還可以添加更多參數得意
ffmpeg -i h:\work\video.mp4 -r 1 -ss 50 -vframes 3 -s 640x480 -f image2 d:\work\foo-%03d.jpeg
11、把一堆圖像合成為一個視頻:
ffmpeg -f image2 -framerate 25 -i d:\work\foo-%03d.jpeg -s 1280x720 h:\work\foo.avi
12、轉換視頻的分辨率:
ffmpeg -i D:\work\hisense1.mp4 -vcodec libx264 -s 640x480 -acodec aac -strict experimental -ar 44100 -ac 2 -b:a 96k D:\work\outputfile.mp4
13、直接將視頻變為原來大小的一半:
ffmpeg -i D:\work\yyy2642.mp4 -vf scale=iw/2:ih/2 D:\work\yyy2642sm.mp4
14、裁剪視頻中間的一段視頻為一個單獨視頻:
ffmpeg -ss 00:00:30 -vsync 0 -t 00:00:30 -i D:\work\yyy2642.mp4 -vcodec libx264-acodec libfaac D:\work\outputfile.mp4
15、裁剪出視頻屏幕正中間的一部分,寬度和高度都是原來視頻的一半:
ffmpeg -i D:\work\yyy2642.mp4 -vf crop=iw/2:ih/2 D:\work\yyy2642sm.mp4
16、裁剪出視頻屏幕任意一部分(注意參數):
ffmpeg -i D:\work\yyy2642.mp4 -vf crop=iw/3:ih/3?100 D:\work\yyy2642sm.mp4
17、播放時自動檢測視頻周圍的黑框(播放時,輸出窗口可以看到檢測出的crop),這個其實不是視頻處理,只是播放效果:
ffplay D:\work\yyy2642.mp4 -vf cropdetect
18、在視頻的四周增加一圈30個像素的粉紅色邊框:
ffmpeg -i D:\work\yyy2642sm.mp4 -vf pad=iw+60:ih+60:30:30:pink D:\work\pink.mp4
19、視頻水平翻轉:
ffmpeg -i D:\work\yyy2642.mp4 -vf hflip D:\work\outputfile.mp4
20、視頻上下翻轉:
ffmpeg -i D:\work\yyy2642.mp4 -vf vflip D:\work\outputfile.mp4
21、視頻旋轉:
ffmpeg -i D:\work\yyy2642.mp4 -vf transpose=2 D:\work\outputfile.mp4
22、視頻模糊處理(注意參數),可以讓視頻變模糊:
ffmpeg -i D:\work\yyy2642.mp4 -vf boxblur=1:10:4:10 D:\work\outputfile.mp4
23、視頻銳化處理,一定程度可以讓視頻變清晰:
ffmpeg -i D:\work\yyy2642.mp4 -vf unsharp=5:5:1.0:5:5:0.0 D:\work\outputfile.mp4
24、刪除標志logo:
ffmpeg -i D:\work\outputfile.mp4 -vf delogo=10:10:256:256:0:0 D:\work\outputfile1.mp4
25、添加文字到視頻上
ffmpeg -i D:\work\yyy2642.mp4 -vf drawtext=“fontfile=arial.ttf:text=‘Happy Holidays’:x=(w-tw)/2:y=(h-th)/2:fontcolor=green:fontsize=60” D:\work\outputfile.mp4
其中arial.ttf是從windows\fonts目錄下拷貝過來的字體文件
26、添加上方的字符滾動顯示(顯示中文字符):
ffmpeg -i D:\work\yyy2642.mp4 -vf drawtext=“fontfile=ARIALUNI.ttf:text=‘程序明_Welcom’:x=w-mod(t*50,w):fontcolor=darkorange:fontsize=30” D:\work\outputfile.mp4
添加的文字顯示在下方:
ffmpeg -i D:\work\yyy2642.mp4 -vf drawtext=“fontfile=ARIALUNI.ttf:text=‘程序明’:x=w-mod(t*50,w):y=h-th:fontcolor=darkorange:fontsize=30”
27、視頻右上角顯示當前系統時間:
ffmpeg -i D:\work\yyy2642.mp4 -vf drawtext=“fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:text=’%{localtime:%H\:%M\:%S}’” D:\work\outputfile.mp4
28、視頻播放時晃動:
ffplay -i D:\work\yyy2642.mp4 -vf crop=in_w/2:in_h/2:(in_w-out_w)/2+((in_w-out_w)/2)*sin(n/10):(in_h-out_h)/2+((in_h-out_h)/2)*sin(n/7)
29、播放時視頻色彩不斷變換:
ffplay -i D:\work\yyy2642.mp4 -vf hue=“H=2PIt:s=sin(2PIt)+1”
30、彩色視頻轉變為黑白視頻:
ffmpeg -i D:\work\yyy2642.mp4 -vf lutyuv=“u=128:v=128” D:\work\outputfile.mp4
31、視頻轉碼為原來的播放速度的兩倍:
ffmpeg -i D:\work\yyy2642.mp4 -vf setpts=PTS/2 -af atempo=2 D:\work\outputfile.mp4
32、視頻轉為gif(參數指定了位置):
ffmpeg -i D:\work\yyy2642.mp4 -ss 50 -t 10 -pix_fmt rgb24 -s 640x480 D:\work\jidu.gif
33、從視頻里面截取幾張圖到一張圖里(大圖是2行3列):
ffmpeg -i D:\work\yyy2642.mp4 -frames 1 -vf “select=not(mod(n,300)),scale=320:240,tile=2x3” D:\work\out.png
34、兩個文件左右合并(無敵了):
ffmpeg.exe -i “D:\work\yyy264.mp4” -vf “[in] scale=iw/2:ih/2, pad=2*iw:ih [left]; movie=‘D:\work\yyy2642.mp4’, scale=iw/2:ih/2 [right];[left][right] overlay=main_w/2:0 [out]” -b:v 768k D:\work\output.mp4
35、兩個文件上下合并(無敵了):
ffmpeg.exe -i “D:\work\yyy264.mp4” -vf “[in] scale=iw/2:ih/2, pad=iw:2*ih [top]; movie=‘D:\work\yyy2642.mp4’, scale=iw/2:ih/2 [bottom];[top][bottom] overlay=0:main_h/2 [out]” -b:v 768k D:\work\output.mp4
36、文件重疊合并,把第二個文件的視頻縮小為四分之一后,放到第一個視頻的寬高八分之一畫面處(更無敵):
ffmpeg.exe -i “D:\work\yyy264.mp4” -vf “[in] scale=iw:ih, pad=iw:ih [top]; movie=‘D:\work\yyy2642.mp4’, scale=iw/4:ih/4 [bottom];[top][bottom] overlay=main_w/8:main_h/8 [out]” -b:v 768k D:\work\output.mp4
37、普通的按順序合并兩個視頻:
ffmpeg -i D:\work\yyy264.mp4 -qscale 0 D:\work\inputfile_01.mpg
ffmpeg -i D:\work\yyy2642.mp4 -qscale 0 D:\work\inputfile_02.mpg
copy /b “D:\work\inputfile_01.mpg”+“D:\work\inputfile_02.mpg” “D:\work\inputfile_all.mpg”
ffmpeg -i D:\work\inputfile_all.mpg -qscale 0 D:\work\outputfile.mp4
38、音頻的分割合并
把第一段音頻分成兩部分
ffmpeg.exe -ss 00:00:08.5 -vsync 0 -t 00:00:09 -i file1.mp3 file1end.mp3
ffmpeg.exe -ss 00:00:00 -vsync 0 -t 00:00:08 -i file1.mp3 file1New.mp3
把第一段音頻的后半部分和第二段混音合并
ffmpeg -i file2.mp3 -i file1end.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=0 file2forNew1.mp3
把第二段音頻混音好的音頻,分成前后兩部分:
ffmpeg.exe -ss 00:00:00 -vsync 0 -t 00:00:04 -i file2forNew1.mp3 file2New.mp3
ffmpeg.exe -ss 00:00:04 -vsync 0 -t 00:00:05 -i file3.mp3 file2End.mp3
再把第二段的后半部分和第三段混音合并:
ffmpeg -i file3.mp3 -i file2End.mp3 -filter_complex amix=inputs=2:duration=first:dropout_transition=0 file3New.mp3
把新的三部分音頻首尾連接連到一起:
ffmpeg -i file1New.mp3 -qscale 0 inputfile_01.mpg
ffmpeg -i file2New.mp3 -qscale 0 inputfile_02.mpg
copy /b “inputfile_01.mpg”+“inputfile_02.mpg” “inputfile_all.mpg”
ffmpeg -i file3New.mp3 -qscale 0 inputfile_05.mpg
copy /b “inputfile_all.mpg”+“inputfile_05.mpg” “inputfile_al2.mpg”
ffmpeg -i inputfile_al2.mpg -qscale 0 file5.mp4
ffmpeg -i file5.mp4 -map 0:a result.mp3
上面的所有命令都是筆者自己親自測試使用的,其中有些命令行帶有不少參數,參數需要根據實際情況修改,如果有命令不理解的歡迎提問。筆者盡量在百忙之中擠出時間答疑
版權聲明:本文為CSDN博主「明天繼續」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zhangamxqun/article/details/80295833
總結
以上是生活随笔為你收集整理的FFMPEG命令行处理视频进阶——高阶必读的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux下同步工具inotify+rs
- 下一篇: C++/GO/多媒体方向