ffmpeg命令汇总

摘要:
1.查看ffmpeg信息:ldd`whichffmpeg`ffmpeg filterssfmpeg hfilter=drawtextmanffmpeg ffmpeg--help启用ffmpegglogffmpeg-gogleveltrace-ia.mkvout。yuv相关的日志级别如下:{“quiet”,AV_log_quiet},{“panic”,AV-log_panic},}“false

1. 查看ffmpeg信息:

ldd `which ffmpeg`

ffmpeg -filters

ffmpeg -h filter=drawtext

man ffmpeg

ffmpeg --help

开启ffmpeg log

ffmpeg -loglevel trace -i a.mkv out.yuv

相关log level等级如下:

{ "quiet" , AV_LOG_QUIET },
{ "panic" , AV_LOG_PANIC },
{ "fatal" , AV_LOG_FATAL },
{ "error" , AV_LOG_ERROR },
{ "warning", AV_LOG_WARNING },
{ "info" , AV_LOG_INFO },
{ "verbose", AV_LOG_VERBOSE },
{ "debug" , AV_LOG_DEBUG },
{ "trace" , AV_LOG_TRACE },

接口为:av_log_set_level(AV_LOG_TRACE);

2.码流信息查询

查看码流所有的frame
ffprobe -show_frames 640_480_Video_MPEG4_Audio_mp3.avi

-show_streams:查看track信息

-select_streams v:0:选取第一路视频

-show_entries "packet=pts_time,duration_time,stream_index : stream=index,codec_type":只显示pts_time duration_time stream_index相关信息

-print_format json按json格式打印
ffprobe -show_streams -select_streams v:0 -show_frames -show_entries "packet=pts_time,duration_time,stream_index : stream=index,codec_type" 640_480_Video_MPEG4_Audio_mp3.avi -print_format json

统计码流的frame数

ffprobe -show_frames 2017_0608_142115_0002_F.mp4 | grep media_type=video | wc -l

3. demux&decode

mp4文件转ts文件(h264 codec)

ffmpeg -i modify.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb out.ts

-vcodec copy 拷贝video的ES数据

-acodec copy 拷贝audio的ES数据

-vbsf h264_mp4toannexb 对video的ES数据增加sync头

mp4抽取ES data(h264&h265)

ffmpeg -i "Chocolate - 1280x720.mp4" -vcodec copy -f rawvideo -vbsf h264_mp4toannexb chocolate-1280x720.264

-vcodec copy 拷贝video的ES数据

-f rawvideo 指定输出video数据为ES数据

-vbsf h264_mp4toannexb 对video的ES数据增加sync头

ffmpeg -i 2017_04_18_11_23_0_alltime_0600.mkv -vcodec copy -an -f hevc out.265

-vcodec copy 拷贝video的ES数据

 -f hevc 指定输出video数据为H265 ES数据

抽取第二路视频的es数据,map信息要通过ffmpeg -i LOCK_2017_0420_175519_0054_F.mp4 这个命令获取
ffmpeg -i LOCK_2017_0420_175519_0054_F.mp4 -map 0:1 -vbsf h264_mp4toannexb out.264

-map 0:1 指定哪一路视频

-vbsf h264_mp4toannexb 对video的ES数据增加sync头

使用ffmpeg获取PCM数据

ffmpeg -i input.mpg -f s16le -ar 44100 -acodec pcm_s16le output.pcm

 -f s16le 指定输入格式为16位pcm

-ar 44100  设定采样率为44100

-acodec 设定audio codec

把AVI里的音频保存成mp3文件
ffmpeg -i source_video.avi -vn -ar 44100 -acodec libmp3lame -ac 2 -ab 192K -f mp3 sound.mp3

-vn 不处理视频

-ar 44100  设定采样率为44100

-acodec libmp3lame 设定audio codec

-ac 2 设定channels数

-ab 192K 设定bitrate

 -f mp3 设定输出格式

4. mux&encode

raw yuv编码成相应的container
ffmpeg -s 640*480 -pix_fmt nv12 -i 264_test.yuv -vcodec h264 out.ts

-s 指定宽高

-pix_fmt nv12 指定YUV数据格式

-vcodec h264 指定video codec


ffmpeg -s 640*480 -pix_fmt nv12 -i 264_test.yuv -vcodec mpeg4 out.ts

5. filter相关

对jpeg图像进行crop裁剪

ffmpeg -i jpeg1.jpg -vf crop=iw/2:ih/2 ff_out.yuv
对yuv数据进行裁剪
ffmpeg -loglevel trace -s 1920*1088 -pix_fmt nv12 -i jpeg1.yuv -vf crop=iw/2:ih/2 ff_out.yuv

 ffmpeg加文字水印并控制水印显示时间或显示周期

#加水印 水印位置由x,y,w,h来控制
#ffmpeg编译时需--enable-libfreetype才能用此功能
#!/bin/bash
ffmpeg -y -i jiushu.mpg -acodec libfaac -b:a 30k -ar 44100 -r 15 -ac 2 -s 480x272 -vcodec libx264 -refs 2 -x264opts keyint=150:min-keyint=15 -vprofile baseline -level 20 -b:v 200k -vf "drawtext=fontfile=/mnt/hgfs/zm/simhei.ttf: text=‘来源:迅雷‘:x=100:y=x/dar:fontsize=24:fontcolor=yellow@0.5:shadowy=2" drawtext.mp4

-acodec libfaac

-b:a 30k

-ar 44100

-r 15

-ac 2

-s 480x272

-vcodec libx264

-refs 2

-x264opts keyint=150:min-keyint=15

-vprofile baseline

-level 20

-b:v 200k

-vf "drawtext=

  fontfile=/mnt/hgfs/zm/simhei.ttf:

  text=‘来源:迅雷‘:

  x=100:

  y=x/dar:

  fontsize=24:

  fontcolor=yellow@0.5:

  shadowy=2"
#加水印,显示10秒
#!/bin/bash
ffmpeg -y -i jiushu.mpg -acodec libfaac -b:a 30k -ar 44100 -r 15 -ac 2 -s 480x272 -vcodec libx264 -refs 2 -x264opts keyint=150:min-keyint=15 -vprofile baseline -level 20 -b:v 200k -vf "drawtext=fontfile=/mnt/hgfs/zm/simhei.ttf: text=‘来源:迅雷‘:x=100:y=x/dar:draw=‘if(gt(n,0),lt(n,250))‘:fontsize=24:fontcolor=yellow@0.5:shadowy=2" drawtext.mp4

draw=‘if(gt(n,0),lt(n,250))‘ 画水印的时间

最新使用ffmpeg textdraw没有draw接口,所以无法实现该功能。可以用第一节的命令查询filter的相关参数。 

加打时间戳

ffmpeg -i wildlife.wmv -vf "drawtext=fontfile=arial.ttf: text='fuck': timecode='09:57:00:00': r=25: x=(w-tw)/1.5: y=h-(20*lh):fontcolor=white: box=1: boxcolor=0x00000000@1" -an -y out.wmv

使用ffmpeg AVfilter 中的amix实现混音

ffmpeg -i INPUT1 -i INPUT2 -i INPUT3 -filter_complex amix=inputs=3:duration=first:dropout_transition=3 OUTPUT

inputs
The number of inputs. If unspecified, it defaults to 2.//输入的数量,如果没有指明,默认为2.

duration
How to determine the end-of-stream.//决定了流的结束

longest
The duration of the longest input. (default)//最长输入的持续时间

shortest
The duration of the shortest input.//最短输入的持续时间

first
The duration of the first input.//第一个输入的持续时间

dropout_transition
The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.
//输入流结束时(音频)容量重整化的转换时间(以秒为单位)。 默认值为2秒。

6. ffplay播放YUV数据

播放yuv数据,循环3次,帧率为3

ffplay -loop 3 -f rawvideo -video_size 1920*1080 -pix_fmt nv12 -framerate 3 out.yuv

-loop表示循环次数

-framerate表示帧率

ffmpeg -s 1920*1080 -pix_fmt nv12 -i _1920x1080_8bit_uv1.nv12_001.yuv -vf crop=iw/2:ih/2:0:0 ISP_1920x1080_nv12_001.yuv

7. 查看支持的pix_fmt

ffmpeg -pix_fmts

8. UDP串流

服务器端,发送h264裸流

ffmpeg -re -i out.h264 -vcodec copy -f h264 udp://192.168.0.179:1234

-re表示按时间截读取文件

客户端

ffplay -f h264 udp://192.168.0.179:1234

9. ffserver RTSP服务器配置(旧版ffmpeg才有)
配置ffserver.conf文件(初次接触可以参考ffmpeg源码中的doc/ffserver.conf,里边有详细的注释)
如下写一个示例

RTSPPort 5454
BindAddress 0.0.0.0
RTSPBindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
#MP3 audio
<Stream cry.mp3>
File "/media/sf_chuchen/ffmpeg/cry.mp3"
Format rtp
NoVideo
</Stream>
其中,以下两条必须指定
RTSPPort 5454  #rtsp server 端口

Format rtp  #格式为rtp,在http下,为流的格式(MP3)

vlc播放:

rtsp://ip_addr:5454/stream_name

10. RTP串流

服务器端推送

./ffmpeg -re -stream_loop -1 -i zhen_h264+mp2.ts -vcodec copy -an -f rtp rtp://10.10.50.90:9999 > h264.sdp

客户端接收

./ffplay -protocol_whitelist "file,rtp,udp" h264.sdp

实际上ffmpeg内部RTP默认使用UDP协议发送数据,所以可以指定单播或者组播地址。

对于RTP协议,sdp作为重要的流描述信息,是必须存在的

  • -re 该参数表示按照实际帧率发送,否则按照最快速度发送数据(视具体主机性能而定)
  • -stream_loop -1表示循环播放,这里的是数字-1(不是字母L),本地文件串流结束后直接从头开始
  • -vcodec copy/-acodec copy表示复制视频或者音频,不做转码
  • -vn/-an表示禁用视频或音频```````

免责声明:文章转载自《ffmpeg命令汇总》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux网络管理高德地图行政区域划分下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

4K Video Downloader V6.1.50版本发布(解决B站视频下载问题)

近日,B站算法更新,部分用户反映很多哔哩哔哩视频无法下载,经测试,该问题在4K Video DownloaderV6.1.50版本已完美解决, 需要的用户可以尽快升级到最新版本,以免影响正常下载。除了下载B站视频,4K Video Downloader还支持下载音乐,下载字幕,合并字幕与视频,批量将在线视频转换成MP3, MP4, MOV, AVI......

使用IOCTL代码实现LCD背光调节

国内这种代码找不到。于是參考了相关代码后完好例如以下代码,且实现方式通过IOCTL代码实现LCD背光调节的功能。 适合场合为平板电脑或者笔记本。主要还是要靠BIOS支持与否。 编译环境使用:Dev-cpp工具编写。 #include <stdio.h> #include <stdlib.h> #include <win...

计算视频播放的时间(pts)

http://yejun8500.blog.163.com/blog/static/463360020095298410979/ 在解码视频流的时候对每一个视频帧都会有一个时间戳pts(显示时间戳),得到这个pts的值,并记下最开始的一个pts值(pts_00),以后画面显示的时间就可以用当前播放的帧的时间戳(pts_now -pts_00)/90000获...

ffmpeg文档16-音频编码器

16 音频编码器 介绍当前可用的音频编码器 aac AAC(Advanced Audio Coding )编码器 当前原生(内置)编码器还处于实验阶段,而且只能支持AAC-LC(低复杂度AAC)。要使用这个编码器,必须选择 ‘experimental’或者'lower' 因为当前还处于实验期,所以很多意外可能发生。如果需要一个更稳定的AAC编码器,参考l...

ffmpeg常用转换命令,支持WAV转AMR

音频转换: 1.转换amr到mp3: ffmpeg -i shenhuxi.amr amr2mp3.mp3 2.转换amr到wav: ffmpeg -acodec libamr_nb -i shenhuxi.amr amr2wav.wav 3.转换mp3到wav: ffmpeg -i DING.mp3 -f wav test.wav 4.转换wav到amr...

vue video.js使用技巧

1 初始化 Video.js初始化有两种方式。 1.1 标签方式 一种是在<video>标签里面加上class="video-js"和data-setup='{}'属性。 注意,两者缺一不可。 刚开始的时候我觉得后面的值为空对象{},不放也行, 导致播放器加载不出来,后来加上来就可以了。 1.2 JS方式 另外一种初始化 video.js 的方...