FFmpeg命令行示例
1 提取視頻流/音頻流
// 分離視頻流和音頻流
ffmpeg -i input_file -vcodec copy -an output_file_video
ffmpeg -i input_file -acodec copy -vn output_file_audio
2 視頻轉封裝
ffmpeg –i test.mp4 –vcodec copy –acodec copy –f m4v test.m4v
ffmpeg –i test.avi –vcodec copy –acodec copy –f m4v test.m4v
3 視頻轉碼
ffmpeg –i test.mp4 –vcodec h264 –s 352*278 –an –f m4v test.264
ffmpeg –i test.mp4 –vcodec h264 –bf 0 –g 25 –s 352*278 –an –f m4v test.264
ffmpeg –i test.avi -vcodec mpeg4 –vtag xvid –qsame test_xvid.avi
部分選項說明:-bf,B 幀數量;-g,gop 大小控制;-s,分辨率。
4 視頻封裝
ffmpeg –i video_file –i audio_file –vcodec copy –acodec copy output_file
5 視頻剪切
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.avi -vcodec copy -acodec copy output.avi
部分選項說明:-r, 提取圖像的頻率;-ss,開始時間;-t 持續時間。
6 視頻截圖
先運行如下命令測試一下:
ffmpeg -ss 00:00:08 -i test.mp4 -f image2 test.jpg
發現截圖已經正常生成,但是命令行有如下報錯信息:
[image2 @ 0x1370f80] Could not get frame filename number 2 from pattern 'test.jpg' (either set update or use a pattern like %03d within the filename pattern)
av_interleaved_write_frame(): Invalid argument
參考 “Solutions to some ffmpeg errors and messages” 得到原因如下:
這個錯誤通常是因為輸出名不正常或者少了某些選項:
如果輸出單幅圖像,應添加 “-frames:v 1” 輸出選項;
如果輸出一系列圖像,應當使用正確的名稱形式,例如輸出文件名為 output_%03d.png 時,將會依次生成 output_001.png, output_002.png, output_003.png 等;
如果輸出單幅圖像,總是用最新的圖像覆蓋掉舊圖像,應添加 “-update 1” 選項。
根據以上建議,修改命令如下:
- 提取單幅圖像
第8秒處的提取一幀圖像:
ffmpeg -ss 00:00:08 -i ring.mp4 -frames:v 1 -f image2 ring.jpg
各參數說明如下:
“-ss 00:00:08”:輸入選項,截取輸入文件中第8秒處的圖像
“-frames:v 1”:輸出選項,往輸出中寫入一個視頻幀
“-f image2”:輸出選項,指定輸出格式為image2
注意“-ss 00:00:08”應放在“-i ring.mp4”之前,作為輸入選項,可以很快就能獲得視頻截圖。如果放在 “-i ring.mp4” 之后就成了輸出選項,作輸出選項時,ffmpeg 會一直從輸入文件中讀取,直到到達指定時間點,才能獲取截圖,如果湊巧截圖的位置在文件尾,則要等整個視頻播放完才能得到視頻截圖。
- 提取一系列圖像
每隔 1 秒(1Hz)提取一幀圖像:
ffmpeg -i ring.mp4 -r 1 -f image2 ring-%3d.jpg
“-r 1”:輸出選項,設置幀率,通過重復(比輸入文件幀率大)或丟棄(比輸入文件幀率小)視頻幀來滿足此幀率
從第 8 秒開始的持續 10 秒的視頻里,每隔 1 秒(1Hz)提取一幀圖像:
ffmpeg -ss 00:00:08 -t 00:00:10 -i ring.mp4 -r 1 -f image2 ring-%03d.jpg
從第 8 秒開始的持續 10 秒的視頻里,提取前 3 幀圖像:
ffmpeg -ss 00:00:08 -t 00:00:10 -i ring.mp4 -frames:v 3 -f image2 ring-%03d.jpg
- 提取一幀中的一場圖像
ffmpeg -i video.avi -frames:v 1 -vf field=top top%d.png
7 視頻錄制
錄制網絡流
ffmpeg –i rtsp://192.168.2.104:1235/test –vcodec copy out.avi
錄制測試圖(testsrc)視頻,時長 12 秒
ffmpeg -ss 00:00:00 -t 00:00:12 -f lavfi -i testsrc testsrc.flv
8 保存YUV文件
ffmpeg -i tiger.m2ts -an -c:v rawvideo -pixel_format yuv422p -ss 00:00:08 -frames:v 5 tiger_422_8b.yuv
ffmpeg -i tiger.m2ts -an -c:v rawvideo -pixel_format yuv422p10 -ss 00:00:08 -frames:v 5 tiger_422_10b.yuv
ffmpeg -i fifa.ts -an -c:v rawvideo -vf format=yuv422p -ss 00:01:00 -frames:v 5 fifa_3840x2160_422_8b.yuv
ffmpeg -f lavfi -i nullsrc=s=3840x2160:r=60,lutrgb=0:255:0 -frames:v 5 -vf format=yuv422p -c:v rawvideo green_3840x2160_422p_8b.yuv

浙公網安備 33010602011771號