FFmpeg相关命令

批量转码当前目录下所有文件

for %%a in ("*.*") do ffmpeg -i "%%a" -c:v libx264 .\output\%%a

给视频添加内嵌字幕

SRT字幕用

ffmpeg -i input.mp4 -vf subtitles=subtitles.srt output.mp4

ASS字幕用

ffmpeg -i input.mp4 -vf ass=subtitles.ass output.mp4

封装字幕到MKV文件

ffmpeg -i input.mp4 -i subtitles.srt -c copy output.mkv

从MKV封装文件中提取字幕

ffmpeg -i input.mkv output.srt

为ASS硬字幕使用字体(Windows)

1. 下载配置文件fonts.conf

2. 为配置文件路径设置变量,变量名为FONTCONFIG_FILE

3. 在系统中安装对应的字体

生成HLS

点播

ffmpeg -i source.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_time 10 out%03d.ts

直播

ffmpeg -re -i source.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list playlist.m3u8 -segment_list_flags +live -segment_list_size 6 -segment_time 10 out%03d.ts

segment_list_flags +live 以示直播
re ffmpeg将会按照source.mp4的播放速率进行转码
segment_list_size 列表最大文件数量

HLS模块

ffmpeg -re -i source.mp4 -codec:v libx264 -codec:a libfaac -map 0 -f hls  -hls_list_size 6 -hls_wrap 10 -hls_time 10 playlist.m3u8

hls_list_size 列表最大文件数量
hls_wrap 最大的TS循环数

文件合并

FFmpeg concat 协议

ffmpeg -i "concat:1.mp4|2.mp4|3.mp4" -c copy output.mp4

FFmpeg concat 分离器

先创建列表文件list.txt,内容为:

file '1.mp4'
file '2.mp4'
file '3.mp4'

然后进行合并

ffmpeg -f concat -i list.txt -c copy output.mp4

隔行扫描转换为逐行扫描

使用-deinterlace参数

FFmpeg RTMP推流

ffmpeg -re -i test.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/test

FFmpeg采集摄像头并进行RTMP推流

ffmpeg -re -i test.mp4 -c:v libx264 -c:a aac -f flv rtmp://127.0.0.1/live/test

查看本机设备

ffmpeg -list_devices true -f dshow -i dummy

采集摄像头并推流

ffmpeg -f dshow -i video="Lenovo EasyCamera":audio="麦克风 (Realtek High Definition Audio)" -c:v libx264 -c:a aac -preset:v ultrafast -tune:v zerolatency -f flv rtmp://127.0.0.1/live/cam

使用Nginx搭建RTMP服务器

Windows可以直接从
http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zip
下载

Linux需要在编译安装的时候添加
https://github.com/arut/nginx-rtmp-module
模块

在编译的时候添加参数

./configure --add-module=/root/nginx-rtmp-module

编译完成后修改配置文件nginx.conf

再最后面添加配置,开启RTMP和HLS功能

rtmp {
     server {
         listen 1935;
         application live {
             live on;
             record off;
             hls on;
             wait_key on;
             hls_path "D:\Media\hls\video";
             hls_fragment 60s;
             hls_playlist_length 300s;
             hls_continuous on;
             hls_cleanup on;
             hls_nested on;
         }
     }
 }