• ffmpeg常用命令


    FFmpeg常用命令

    1. 分离视频音频流

    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 
    

    2. 视频解复用、封装

    //解复用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
    

    3. 视频转码

    //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
    ffmpeg -s 1280x720 -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、v4l2、rtmp等
    ffmpeg -re -i input.mp4 -f flv rtmp://myserver/live/mystream //-re 实时
    
    

    4. 视频剪切

    //时间上截取 (-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:自动检测裁剪尺寸(自动去除边缘的黑部)
    

    5. 旋转、翻转

    //水平翻转输入视频(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
    
    

    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
    

    2x1
    图6.1、 2x1 video
    2x2
    图6.2、 2x2 video

    7. 截屏

    可以通过ffmpeg直接抓取X11显示内容:

    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
    

    8. 图片生成视频、视频提取图片(视频截图)

    //图片生成视频                  
    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
    

    9. two pass

    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
    

    10. 插帧、升帧

    ffmpeg -i input-30fps.mp4 -vf fps=fps=60 output-60fps.mp4
    

    11. hls、dash

    //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
    

    12. 轨道分离、合并 (map)

    //音视频轨道分离,假设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.html

  • 相关阅读:
    分页
    【移动】
    iOS
    内存数据库
    HOJ——T 2275 Number sequence
    HOJ——T 1867 经理的烦恼
    HOJ——T 2430 Counting the algorithms
    洛谷—— P2047 社交网络
    HDU——T 1166 敌兵布阵
    前端学习之jquery
  • 原文地址:https://www.cnblogs.com/HongyunL/p/8120146.html
Copyright © 2020-2023  润新知