美文网首页音视频及流媒体
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初识

    目录 参考 FFmpeg简介 FFmpeg命令行工具介绍 FFmepg类库介绍 1. 参考 [1] FFmpeg官...

  • FFmpeg命令行工具-实用命令

    目录 参考 FFmpeg参数说明 实用视频处理命令 实用音频处理命令 实用字幕处理命令 使用图片处理命令 ffpl...

  • nodejs+ffmpeg

    Mac或linux环境下使用ffmpeg工具+ffmpeg库 本地下载ffmpeg命令行程序 安装node ffm...

  • FFmpeg学习笔记1.FFmpeg在mac上编译

    Mac 编译 FFmpeg 编译出ffmpeg、ffprobe、ffplay三个命令行工具 只产生动态库,不产生静...

  • FFmpeg命令行工具ffmpeg

    注:先cd到文件所在地文件夹也是可以的,直接使用文件名 1.列出ffmpeg支持的所有格式: 2.剪切一段媒体文件...

  • FFmpeg命令行工具ffmpeg

    简介#### FFmpeg是处理音视频的一个强大、跨平台的自由软件(可以理解为开源软件的一种,关于自由软件的定义,...

  • Android多媒体之二:jni调用ffmpeg命令

    FFmpeg除了提供了强大的编解码库之外,也提供了一些命令行工具ffmpeg、ffplay、ffprobe、ffs...

  • Some Great Tools To Download Yo

    介绍几个在命令行下载yutube视频的工具 1.工具 youtube-dl下载youtube视频工具 ffmpeg...

  • FFmpeg

    3,FFmpeg 项目的组成 (1)基本: ffmpeg :是一个命令行工具,用来对视频文件转换格式;ffseve...

  • ffmpeg命令行工具

    1.简介 ffmpeg [global_options] {[input_file_options] -i inp...

网友评论

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

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