ffmpeg -i input.mp4 -c:v copy -an output_video.mp4 //-an 屏蔽audio 只提取出視頻流 ffmpeg -i input.mp4 -c:v copy -vn output_audio.mp4 //-vn 屏蔽video 只提取出音頻流 //實現類似功能的選項有 -vn / -an / -sn / -dn
//解複用demuxer ffmpeg -i input.mp4 -c:v copy –an output.264 ffmpeg -i input.avi -c:v copy –an output.264 //封裝muxer ffmpeg -i input.264 -i <audio_file> -c:v copy c:a copy output.mp4
//yuv ffmpeg -i input.mp4 -ss 00:00:00 -to 00:00:10 -pix_fmt yuv420p output.yuv ffmpeg -s w*h -pix_fmt yuv420p -r 30 -i input.yuv -c:v libx264 output.mp4 //libx264 ffmpeg -i input.mp4 -c:v libx264 -x264-param "level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=768:vbv-bufsize=2000" -g 30 -b:v 1000k output.mp4 ffmpeg -i input.mp4 -c:v libx264 -g 30 -crf 23 output.mp4 //libx265 ffmpeg -i input.mp4 -c:v libx265 -x265-param <param> -g 30 -b:v 1000k output.mp4 //硬解硬編(解碼hevc_cuvid、h264_cuvid,編碼hevc_nvenc、h264_nvenc) ffmpeg -hwaccel cuvid -c:v hevc_cuvid -i input.mp4 -c:v hevc_nvenc -b:v 1000k -r 30 output.mp4 //硬解硬編、加filter(scale_cuda、resize、自定義cuda filter) ffmpeg -hwaccel cuvid -c:v hevc_cuvid -i input.mp4 -vf scale_cuda=1280:720 -c:v hevc_nvenc output.mp4 //camera、v4l二、rtmp等 ffmpeg -re -i input.mp4 -f flv rtmp://myserver/live/mystream //-re 實時
//時間上截取 (-ss <start> -to <end>) ffmpeg -i input.mp4 -r 1 -f image2 image-%3d.jpeg //提取圖片,-r 提取圖像的頻率 ffmpeg -ss 00:01:30 -t 00:00:20 -i input.mp4 -c:v copy -c:a copy output.mp4 //剪切視頻,-ss 開始時間,-t 持續時間 ffmpeg -ss 00:1:30 -to 00:01:50 -i input.mp4 -c:v copy -c:a copy output.mp4 //剪切視頻,-ss 開始時間,-to 截止時間 //備註:若是開始時間和結束時間不在I幀上,直接copy可能會出現有一段時間沒視頻數據,畫面變成黑色 ffmpeg -ss 00:1:30 -to 00:01:50 -i input.mp4 -c:v libx265 -c:a copy output.mp4 //空間上裁剪 -vf crop=out_w:out_h:start_point_w:start_point_h ffmpeg -i input.mp4 -vf crop=640:480:0:0 -c:v libx265 -crf 23 -c:a copy output640x480.mp4 //cropdetect:自動檢測裁剪尺寸(自動去除邊緣的黑部)
//水平翻轉輸入視頻(hflip、vflip) ffmpeg -i in.avi -vf "hflip" out.avi ffmpeg -i in.avi -vf "vflip" out.avi //transpos ffmpeg -i in.mov -vf "transpose=1" out.mov //Rotate 90 clockwise ffmpeg -i in.mov -vf "transpose=2,transpose=2" out.mov //Rotate 180 degrees 0 = 90CounterCLockwise and Vertical Flip (default) 1 = 90Clockwise 2 = 90CounterClockwise 3 = 90Clockwise and Vertical Flip //任意旋轉視頻角度(以弧度值表示) //With 90 degrees equating with PI/2, you can do it like so: ffmpeg -i in.mp4 -vf "rotate=PI/2" out.mp4 //for counter-clockwise the angle must be negative ffmpeg -i in.mp4 -vf "rotate=-PI/2" out.mp4 //順時針旋轉PI/6:rotate=PI/6
//時間上拼接,視頻文件切片合併 concat ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg //或者 file_list.txt cat file_list.txt # this is a comment file '/path/to/file1' file '/path/to/file2' file '/path/to/file3' ffmpeg -f concat -i file_list.txt -c copy output.mp4 //空間上拼接 pad, overlay(疊加) //pad=dst_w:dst_h:start_point_w:start_point_h //overlay=start_point_w:start_point_h (默認爲0) //2 video to 2x1 video ffmpeg -i input_640x480_1.mp4 -i input_640x480_2.mp4 -filter_complex "[0:0]pad=iw*2:ih:0:0[a];[a][1:0]overlay=w" -libx265 output_1280x480.mp4 //iw,ih 輸入視頻的寬高,[0:0]->第一視頻的第一個流,[1:0]->第二個視頻的第一路流 ffmpeg -i input_640x480_1.mp4 -i input_640x480_2.mp4 -filter_complex "[0:0]pad=1280:480:0:0[a];[a][1:0]overlay=640" -libx265 output_1280x480.mp4 //4 video to 2x2 video ffmpeg -i 1_640x480.mp4 -i 2_640x480.mp4 -i 3_640x480.mp4 -i 4_640x480.mp4 -filter_complex "[0:0]pad=iw*2:ih*2:0:0[a];[a][1:0]overlay=640:0[over1];[over1][2:0]overlay=0:480[over2];[over2][3:0]overlay=640:480" -c:v libx265 output_2x2_1280x960.mp4
圖6.一、 2x1 video
圖6.二、 2x2 videohtml
能夠經過ffmpeg直接抓取X11顯示內容:git
ffmpeg -f x11grab -video_size cif -framerate 25 -i :0.0+10,20 /tmp/out.mpg //0.0 是X11服務的顯示屏幕號(display.screen), 定義於 DISPLAY 環境變量。 10是水平偏移, 20是垂直偏移 ffmpeg -f gdigrab -show_region 1 -framerate 6 -video_size cif -offset_x 10 -offset_y 20 -i desktop out.mpg
//圖片生成視頻 ffmpeg -f image2 -framerate 30 -i foo-%03d.jpeg -s WxH foo.avi //視頻生成圖片,可與 -ss 00:00:00 -to 00:00:10 結合使用 ffmpeg -i foo.avi -r 1 -s WxH -f image2 foo-%03d.jpeg
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 2600k -pass 1 -an -f mp4 /dev/null && \ ffmpeg -i input.mp4 -c:v libx264 -b:v 2600k -pass 2 -c:a aac -b:a 128k output.mp4
ffmpeg -i input-30fps.mp4 -vf fps=fps=60 output-60fps.mp4
//hls, -re 實時、直播 ffmpeg -i in.mp4 -hls_segment_filename 'output%03d.ts' output.m3u8 ffmpeg -re -i in.mp4 -c:v libx264 -map 0 -f segment -segment_list playlist.m3u8 -segment_list_flags +live -segment_time 10 out%03d.mp4 //dash ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 -b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash /path/to/out.mpd
//音視頻軌道分離,假設input.mp4有兩個視頻軌,1個音頻軌 ffmpeg -i input.mp4 -map 0:0 -c:v copy output_stream1.mp4 -map 0:1 -c:v copy output_stream2.mp4 -map 0:3 -c:a copy output_audio.mp4 //0:0表示第一個輸入視頻的第一個視頻流 //多個視頻合成爲一個具備多個軌道的視頻 ffmpeg -i input_video_1.mp4 -i input_video_2.mp4 -i input_audio.mp4 -map 0:0:0 -c:v copy -map 1:0:0 -c:v copy -map 2:0:0 -c:a copy output_3track.mp4
Reference:
[1]: https://xdsnet.gitbooks.io/other-doc-cn-ffmpeg
[2]: http://ffmpeg.org/ffmpeg-all.htmlide