FFmpeg命令行

FFmpeg命令行

记录一下常用的命令行

介绍

基础语法与流程

ffmpeg [gl-opt] {[input-file-opt] -i input-url} ... {[output-file-opt] output-url} ...

其中, -i 表示输入参数.

主要参数

下表中:

  1. <> 包裹的表示由用户具体指定;以 [] 包裹的表示是可选参数,可以指定也可以省略。
  2. 括号内的 i 表示该参数用于输入流,o 表示用于输出流,i/o 表示均可,global 表示全局参数。
  3. 关键字 duration, positionoffset 满足:[-][HH:]MM:SS[.m...] 这种时间戳格式。或者以秒为单位的 SS[.m...] 格式。

常用的如下:

  • -b[:stream_specifier] (o):输出比特率。
  • -f <fmt> (i/o):指定 fmt 作为输入或输出的视频格式。一般会根据文件扩展名自动选择,但有时需要手动指定。
  • -i <filename> (i):指定 filename 作为源文件。
  • -y (global):文件存在时直接覆盖。
  • -n (global):文件存在时不覆盖并立即退出。
  • -bsf[:stream_specifier] <bitstream_filters> (o):设置比特流滤镜。bitstream_filters 是一个逗号分隔的滤镜列表。
  • -stream_loop <num> (i):指定输入流的循环次数。0 表示不循环,-1 表示无限循环。
  • -c[:stream_specifier] <codec> (i/o)-c可写为-codec。选择一个 codec ,即编码器(输出时)或一个解码器(输入时),参与到 stream_specifier 指定的一个或多个流的编码/解码中。在输出时,<codec> 可以被指定为 copy,表示复制数据流。
  • -t <duration> (i/o):(在参数 -i 之前指定)工作持续 duration 时长。一般用于指定剪辑数据流的范围。 它与 -to 参数相互冲突,但本参数优先。
  • -to <position> (o):到 position 位置后,终止输出。与 -t 参数冲突,本参数优先级低。
  • -fs <limit_size> (o):输出文件大小达到 limit_size 后停止输出,单位是 byte.
  • -ss <position> (i/o):(在参数 -i 之前指定)从 position 指定的位置开始工作。注意:大多数情形下,工作起始位置是不精确的。ffmpeg会找到其前部的一个点作为真正的起始,并在结束工作后将该点与用户指定点之间的内容抛弃。然而,如果你使用了 copy 参数,这部分内容却会被保留。
  • -sseof <position> (i/o):类似 -ss 参数,只不过是从数据流末端向前寻找 position。此时 0 表示数据流末。
  • -itsoffset <offset> (i):指定输入流以原时间戳加上 offset 作为其输入时间戳。
  • -metadata[:metadata_specifier] key=value (o):以键值对的形式设置元数据。
  • -frames[:stream_specifier] <num> (o):在输出 num 帧后停止写入。
  • -qscale[:stream_specifier] q (o):使用固定质量(VBR)。
  • stats (global):输出编码过程,是系统默认值。可以使用 -nostats 关闭。
  • -attach <filename> (o):将 filename 文件附加到输出文件。附件流作为文件的最后一个流,只有很少的文件类型被支持(例如字体)。

视频参数

  • -vframes <num>:文件的总帧数。-frames:v 的别名。
  • -r[:steam_specifier] <fps> (i/o):文件的帧率。
  • -s[:steam_specifier] <size> (i/o):帧尺寸。参数 size 需要满足格式 <width>x<height>,例如320x240。 -aspect[:steam_specifier] <asp> (o):宽高比,例如 4:3。如果使用了 -vcodec copy,那么指定容器的宽高比而不是视频的。
  • -vn (o):禁止输出视频。
  • -vcodec <codec> (o):设置视频编码器。-codec:v 的别名。

音频参数

  • -aframes <num> (o):文件的总帧数。-frames:a 的别名。
  • -ar[:stream_specifier] <freq> (i/o):采样率。默认输出等于输入。仅当输入文件为真实设备或者 raw 数据时,该参数才能用于输入过程。
  • -aq <q> (o):音频品质(VBR)。 -q:a 的别名。
  • -ac[:stream_specifier] <channel> (i/o):设置音频通道数。默认输出等于输入。仅当输入文件为真实设备或者 raw 数据时,该参数才能用于输入过程。
  • -an (o):禁止输出音频。
  • -acode <codec> (i/o):设置音频的解码器或编码器。-codec:a 的别名。

其他参数

以下直接在 ffmpeg 后使用,例如:ffmpeg -version

  • -bsfs:可用的比特流滤镜。
  • -h [arg]:帮助。arg 的内容可以是:
  • decoders:可用的解码器。或特指:decoder=。
  • encoders:可用的编码器。或特指:encoder=。
  • filters:所有滤镜。或特指:filter=。
  • formats:可用的分流器与混流器。或特指分流器:demuxer=,或特指混流器:muxer=。
  • -protocols:支持的协议。
  • -version:版本信息。

示例

编码

1. yuv -> h265

ffmpeg -s 3840x1920 -pix_fmt yuv420p -r 30 -i basketball_3840x1920.yuv -vframes 300 -c:v libx265 basketball.h265

2. yuv - > h265 全I帧编码

ffmpeg -s 3840x1920 -pix_fmt yuv420p -r 30 -i basketball_3840x1920.yuv -vframes 300 -c:v libx265 -x265-params keyint=1:ref=1:no-open-gop=1:weightp=0:weightb=0:cutree=0:rc-lookahead=0:bframes=0:scenecut=0:b-adapt=0:repeat-headers=1 -y basketball_3840x1920.h265

3. yuv -> h265 IPPP编码

  • 待续

解码

1. MP4 -> h265

ffmpeg -i shark.MP4 -s 3840x1920 -vcodec libx265 -y TestStream1_ViewPoint1.h265

2.MP4 -> yuv

ffmpeg -i basketball.MP4 -s 3840x1920 -y -pix_fmt yuv420p basketball_3840x1920.yuv

截取 / 上下采样

1. 切取YUV某个区域

ffmpeg.exe	-s 3840x1920 -r 30 -pix_fmt yuv420p	-i	AerialCityStr_3840x1920.yuv -vf crop=1280:320:0:0 -qscale 1 -s 320x320 -sws_flags lanczos -vframes 100 -r 30     enc_AerialCityStr_Tile_0.yuv  -y

/*
参数: 
源宽x源高 源帧率 源YUV为420 YUV源           
切割小块的宽:高:在源中左上角的坐标x: 左上角坐标y  
输出长宽              
插值方法    
帧数                
输出帧率          
输出路径
*/

2. 下采样

for 循环对YUV下采样,并264编码

set bitrate=(200,500,800,1500,3000)
set bitrate2=(200,500,800,1500,3000)
set target_resolution=720x360
set width=720
set height=360

rem 对文件名在filename1中30fps的文件YUV进行采样至目标分辨率
for %%a in %file_name1% do (for %%b in %bitrate% do (
if not exist %yuv_out%\%%a_sample_%target_resolution%.yuv (ffmpeg -s %initial_resolution% -i %yuv_in%\%%a.yuv -s %target_resolution% %yuv_out%\%%a_sample_%target_resolution%.yuv)
x264.exe -I 30 -i 30 --ref 1 --qpstep 2 --profile baseline --bitrate %%b --vbv-maxrate %%b --vbv-bufsize %%b --vbv-init 0.9 -m 1 --threads 1 --fps %fps1% -o %yuv_out%\%%a_%target_resolution%_%%brat_%fps1%fr.264 %yuv_out%\%%a_sample_%target_resolution%.yuv --input-res %target_resolution% ))
::del %yuv_out%\*.264
::del %yuv_out%\*.yuv

参考文献

FFmeg命令行

FFMPEG的像素格式

猜你喜欢

转载自blog.csdn.net/qjh5606/article/details/85233971