美文网首页音视频及流媒体
FFmpeg命令行工具-实用命令

FFmpeg命令行工具-实用命令

作者: smallest_one | 来源:发表于2018-03-18 12:05 被阅读258次

    目录

    1. 参考
    2. FFmpeg参数说明
    3. 实用视频处理命令
    4. 实用音频处理命令
    5. 实用字幕处理命令
    6. 使用图片处理命令
    7. ffplay命令
    8. 设备相关的命令

    1. 参考

    2. FFmepg参数说明

    2.1 通用选项

    FFmpeg的命令语法比较简单,如下面的格式:

    ffmpeg [global options] [input file options] -i input_file [output file
    options] output_file
    

    golbal options对输入和输出都有影响,中括号中的参数是可选项。

    • -formats 显示可用的格式,编解码的,协议的
    • -i filename输入文件
    • -ss position 搜索到指定的时间[-] hh:mm:ss[.xxx]的时间格式也支持
    • -an, -vn, -sn 分别代表排除音频、视频、字幕流
    • -vf, -af 视频过滤器选项和音频过滤器选项

    2.2 视频选项

    • -b bitrate设置比特率,缺省200kb/s
    • -r fps 设置帧频率,缺省25
    • -vcodec codec 强制使用codec编解码方式,如果用copy表示原始编码数据必须被拷贝

    2.3 音频选项

    • -acodec codec 使用 codec 编解码
    • -ab bitrate 设置音频码率
    • -ar freq 设置音频采样率

    2.4 流选择选项

    一些媒体格式如AVI,MP4等可以包含多种类型的流。
    FFmpeg可以识别5种流类型: 音频audio (a), 附件attachment (t), 数据data (d), 字幕subtitle (s) 和 视频video (v)。
    可以通过-map选项来选择需要的流,语法格式如下:

    file_number:stream_type[:stream_number]
    

    file_number和stream_number分别表示文件索引和流索引。
    有一些特别的流选择指令:
    -map 0 :选择所有的流类型和其中所有的流。
    -map i:v :选择文件i中的所有视频流; -map i:a 选择所有的音频流;-map i:s
    选择所有的字幕流。

    3. 实用视频处理命令

    视频旋转

    顺时针翻转90度

    ffmpeg -i input -vf transpose=1 output
    

    翻转180度

    ffmpeg -i in.mp4 -vf "transpose=1,transpose=1" out.mp4
    

    分离视频音频流

    ffmpeg -i input-video -vn -acodec copy output-audio //分离音频流
    //-vn is no video.
    //-acodec copy says use the same audio stream that's already in there.
    
    ffmpeg -i input-video -vcodec copy -an output-video //分离视频流
    //-an is no audio.
    //-vcodec copy says use the same video stream that's already in there.
    

    分离视频的YUV通道分量

    ffmpeg -i jack.mp4 -filter_complex "extractplanes=y+u+v[y][u][v]" -map "[y]" jack_y.mp4 -map "[u]" jack_u.mp4 -map "[v]" jack_v.mp4    
    

    查看支持的格式

    ffmpeg -codecs 
    //查看支持的编码格式
    
    ffmpeg -formats 
    //查看支持的封装格式
    
    ffmpeg -encoders
    //查看支持的编码器
    
    ffmpeg -decoders
    //查看支持的解码器
    
    ffmpeg -filters
    //查看支持的过滤器
    
    ffmpeg -pix_fmts
    //查看支持的像素格式
    
    ffmpeg -protocols
    //查看支持的流媒体协议格式
    
    ffmpeg -sample_fmts
    //查看支持的音频采样格式
    
    ffmpeg -bsfs
    //查看支持的流过滤器
    
    ffmpeg -layouts
    //查看支持的音频通道布局
    

    在视频中加上水印

    ffmpeg -i xizong.mp4 -i fleight.jpg -filter_complex "overlay=main_w-overlay_w-5:5" -codec:a copy xizong_fleight.mp4
    //在右上角加水印,边距为5像素。
    

    去掉视频中的水印

    使用delogo filter
    它对logo周围像素的简单插值来实现。只需设置一个覆盖logo的矩形。在每个方向上,紧靠矩形外的下一个像素的值将用于计算矩形内的插值像素值。

    语法:-vf delogo=x:y:w:h[:t[:show]] 
    x:y 离左上角的坐标 
    w:h logo的宽和高 
    show:默认值0,若设置为1,指定区域的边界会绘制一个绿色的矩形框用于找到合适的x、y、w、h参数。
    

    示例

    ffmpeg -i input.mp4 -vf delogo=x=0:y=0:w=100:h=60 output.mp4 
    

    生成视频上一个时间点的图片快照

    ffmpeg -ss 01:23:45 -i input -vframes 1 -q:v 2 output.jpg
    
    -i input file           the path to the input file
    -ss 01:23:45            seek the position to the specified timestamp
    -vframes 1              only handle one video frame
    -q:v 2                  to control output quality. Full range is a linear scale of 1-31 where a lower value results in a higher quality. 2-5 is a good range to try.
    output.jpg              output filename, should have a well-known extension
    

    ffmpeg 把文件当做直播推送至服务器

    ffmpeg -re -i jack.mp4 -c copy -f flv rtmp://host/live/test
    

    截取视频的一部分

    ffmpeg -ss 5 -i input.mp4 -t 10 -c:v copy -c:a copy output.mp4
    //-ss 5指定从输入视频第5秒开始截取,-t 10指明最多截取10秒。
    //而-c:v copy -c:a copy标示视频与音频的编码不发生改变,而是直接复制,这样会大大提升速度,因为这样就不需要完全解码视频。
    

    视频格式转换

    ffmpeg -i input.avi output.mp4 
    ffmpeg -i input.mp4 output.ts
    

    视频解复用

    ffmpeg -i test.mp4 -vcodec copy -an -f m4v test.264
    

    视频封装

    ffmpeg -i video_file -i audio_file -vcodec copy -acodec copy output_file
    

    图片序列与视频的互相转换

    ffmpeg -i %04d.jpg output.mp4
    ffmpeg -i input.mp4 %04d.jpg
    \\第一行命令是把0001.jpg、0002.jpg、0003.jpg等编码成output.mp4,
    \\第二行则是相反把input.mp4变成0001.jpg……。
    \\%04d.jpg表示从1开始用0补全的4位整数为文件名的jpg文件序列。 
    

    ffprobe查看视频文件的信息

    ffprobe target.mp4 -show_format -show_streams -print_format json -loglevel fatal
    

    示例输出:

    root@smallest:/home/video# ffprobe jack.mp4 -show_format -show_streams -print_format json -loglevel fatal
    {
        "streams": [
            {
                "index": 0,
                "codec_name": "h264",
                "codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10",
                "profile": "High",
                "codec_type": "video",
                "codec_time_base": "1/50",
                "codec_tag_string": "avc1",
                "codec_tag": "0x31637661",
                "width": 848,
                "height": 480,
                "coded_width": 848,
                "coded_height": 480,
                "has_b_frames": 1,
                "sample_aspect_ratio": "1:1",
                "display_aspect_ratio": "53:30",
                "pix_fmt": "yuv420p",
                "level": 30,
                "chroma_location": "left",
                "refs": 1,
                "is_avc": "true",
                "nal_length_size": "4",
                "r_frame_rate": "25/1",
                "avg_frame_rate": "25/1",
                "time_base": "1/25000",
                "start_pts": 0,
                "start_time": "0.000000",
                "duration_ts": 39754000,
                "duration": "1590.160000",
                "bit_rate": "449785",
                "bits_per_raw_sample": "8",
                "nb_frames": "7499",
                "disposition": {
                    "default": 1,
                    "dub": 0,
                    "original": 0,
                    "comment": 0,
                    "lyrics": 0,
                    "karaoke": 0,
                    "forced": 0,
                    "hearing_impaired": 0,
                    "visual_impaired": 0,
                    "clean_effects": 0,
                    "attached_pic": 0,
                    "timed_thumbnails": 0
                },
                "tags": {
                    "creation_time": "2016-09-14T08:14:35.000000Z",
                    "language": "und",
                    "handler_name": "TrackHandler"
                }
            },
            {
                "index": 1,
                "codec_name": "aac",
                "codec_long_name": "AAC (Advanced Audio Coding)",
                "profile": "HE-AAC",
                "codec_type": "audio",
                "codec_time_base": "1/48000",
                "codec_tag_string": "mp4a",
                "codec_tag": "0x6134706d",
                "sample_fmt": "fltp",
                "sample_rate": "48000",
                "channels": 2,
                "channel_layout": "stereo",
                "bits_per_sample": 0,
                "r_frame_rate": "0/0",
                "avg_frame_rate": "0/0",
                "time_base": "1/24000",
                "start_pts": 0,
                "start_time": "0.000000",
                "duration_ts": 7199744,
                "duration": "299.989333",
                "bit_rate": "48030",
                "max_bit_rate": "56888",
                "nb_frames": "7031",
                "disposition": {
                    "default": 1,
                    "dub": 0,
                    "original": 0,
                    "comment": 0,
                    "lyrics": 0,
                    "karaoke": 0,
                    "forced": 0,
                    "hearing_impaired": 0,
                    "visual_impaired": 0,
                    "clean_effects": 0,
                    "attached_pic": 0,
                    "timed_thumbnails": 0
                },
                "tags": {
                    "creation_time": "2016-09-14T08:11:52.000000Z",
                    "language": "und",
                    "handler_name": "Sound Media Handler"
                }
            }
        ],
        "format": {
            "filename": "jack.mp4",
            "nb_streams": 2,
            "nb_programs": 0,
            "format_name": "mov,mp4,m4a,3gp,3g2,mj2",
            "format_long_name": "QuickTime / MOV",
            "start_time": "0.000000",
            "duration": "299.988333",
            "size": "18813764",
            "bit_rate": "501719",
            "probe_score": 100,
            "tags": {
                "major_brand": "mp42",
                "minor_version": "0",
                "compatible_brands": "isomavc1mp42",
                "creation_time": "2016-09-14T08:14:35.000000Z"
            }
        }
    }
    
    

    视频分辨率大小转换

    转为720P:

    ffmpeg -i input.wmv -s hd720 -c:v libx264 -crf 23 -c:a aac -strict -2 output.mp4
    

    转为480p

    ffmpeg -i input.mp4 -s hd480 -c:v libx264 -crf 23 -c:a aac -strict -2 output.mp4
    

    视频的缩放

    将输入的1920x1080缩小到960x540输出

    ffmpeg -i input.mp4 -vf scale=960:540 output.mp4 
    //ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。
    

    裁剪视频

    使用-crop选项,语法如下:

    crop=ow[:oh[:x[:y[:keep_aspect]]]]
    

    ow、oh表示裁减之后输出视频的宽和高,
    x、y表示在输入视频上开始裁减的横坐标和纵坐标,
    keep_aspect: 1表示保持裁剪后输出的纵横比与输入一致,0表示不保持。

    裁剪输入视频的左三分之一,中间三分之一,右三分之一:
    ffmpeg -i input -vf crop=iw/3:ih :0:0 output
    ffmpeg -i input -vf crop=iw/3:ih :iw/3:0 output
    ffmpeg -i input -vf crop=iw/3:ih :iw/3*2:0 output

    裁剪中间一半区域:
    ffmpeg -i input -vf crop=iw/2:ih/2 output

    4. 实用音频处理命令

    倍速

    速度减半

    ffmpeg -i input.mp3 -af atempo=0.5 output.mp3
    

    2倍速率

    ffmpeg -i input.mp3 -af atempo=2 output.mp3
    

    PCM原始数据和WAV格式转换

    (1) wav格式转换为PCM裸流

    ffmpeg -i xizong.wav -f f32le -ar 44100 -acodec pcm_f32le output_f32le.raw   
    

    参数说明:
    -f f32le … 浮点数32为小字端的采样格式
    -ar 44100 … 采样频率
    -ac 2 … 声道数量

    (2) PCM裸流转wav格式

    ffmpeg -f f32le -ar 44100 -ac 2 -acodec pcm_f32le -i xizong_f32le.raw xizong_f32le.wav  
    

    说明需要先使用ffprobe查看wav中音频的采样格式,以上例子是使用的f32le采样格式的数据。

    5. 实用字幕处理命令

    字幕文件转换

    字幕文件有很多种,常见的有 .srt , .ass 文件等,下面使用FFmpeg进行相互转换。

    //将.srt文件转换成.ass文件
    ffmpeg -i subtitle.srt subtitle.ass
    
    将.ass文件转换成.srt文件
    ffmpeg -i subtitle.ass subtitle.srt
    

    集成字幕

    ffmpeg -i input.mp4 -i subtitles.srt -c:s mov_text -c:v copy -c:a copy output.mp4
    

    6. 使用图片处理命令

    图片分辨率修改

    ffmpeg -i sample.jpg -s w*h out.jpg 
    

    7. ffplay命令

    播放yuv视频数据

    ffplay -f <文件格式> -pix_fmt <像素格式> -video_size <视频尺寸> <文件名>
    示例:
    ffplay -f rawvideo -pix_fmt yuv420p -video_size 848x480 yuv_video
    

    播放PCM音频数据

    ffplay -f <格式名> -ac <声道数> -ar <采样率> <文件名>
    示例:
    ffplay -f f32le -ac 1 -ar 48000 pcm_audio
    

    8. 设备相关的命令

    打印支持DirectShow的设备列表

    ffmpeg -list_devices true -f dshow -i dummy
    

    打开名称为“Lenovo EasyCamera”的摄像头

    ffmpeg -f dshow -i video="Lenovo EasyCamera"
    

    相关文章

      网友评论

        本文标题:FFmpeg命令行工具-实用命令

        本文链接:https://www.haomeiwen.com/subject/pldeqftx.html