Bootstrap

FFmpeg的一些应用实践-补充

前面写过一篇,最近整理了一下常用的剪辑视频的操作,再次补充罗列一下。

场景

前阵子,我们举办了很多场直播活动,然后,产生了很多的回放文件。开始的时候,回放文件是由运营人员来转码编辑的。后来因为直播太过紧密,人工操作效率太低,就考虑通过技术手段来自动化的完成转码操作。

因为我们是小公司,该省的还是要省,所以没有使用云服务提供的一些实时转码工具。还是利用的祖传的FFmpeg来进行的这项工作。

具体的步骤就是

1.先分割一下视频,把不重要,不需要,不易回放展示的部分先剪掉,这部操作会把一个完整的回放分割成多段

2.在把分割好的多段视频合并成1端

3.按需进行视频的转码操作,主要是分辨率,码率,帧率的平衡

4.打上防伪水印,分割成hls协议格式的多段小视频,也就是一个m3u8的索引文件,多个ts文件

视频分割

@echo off
rem 分割视频,需要调整的主要是,具体时间参数,文件名和输出文件名,第一个时间参数是开始分割的起始时间,第二个是分割时长,注意是时长
rem 第一个文件名参数是输入参数,第二个也就是最后一个参数是输出参数,注意文件名不要一致,也不用和目录内其他文件名一致
rem 可以连续分割多个视频
ffmpeg -ss 00:00:00 -t 00:03:01 -i input_1.flv -vcodec  copy -acodec copy output_1.flv
ffmpeg -ss 00:00:00 -t 00:11:01 -i input_2.flv -vcodec  copy -acodec copy output_2.flv
pause

视频合并

@echo off
rem 合并文件,这里需要把要合并的文件列表放入指定的txt文件中,回车分割,这里指定的是contect.txt,可以自定义文件名,最后一个参数是输出的合并后的文件名
ffmpeg -f concat -i contect.txt -c copy output-contect.flv
pause

视频转码

@echo off
ffmpeg -i input.flv -vcodec libx264 -preset fast -tune film -b:v 2000k -s 1280*720 -r 25 output_convert.flv
pause

打水印,分割

@echo off
rem 分割视频,同时打上logo水印,将要分割的文件放入list.txt(可自定义)中,回车分割
@echo off
if exist list.txt (
	for /f %%i in (list.txt) do (
	echo 开始分隔【%%i】...
    mkdir %%~ni    	
	  ffmpeg -i %%i -vf "movie=watermark.png [watermark]; [in][watermark] overlay=10:main_h-overlay_h-10 [out]"  -profile:v baseline -level 3.0 -start_number 0 -hls_time 10 -hls_list_size 0 -f hls %%~ni\%%~ni.m3u8	
	  echo %%i 分隔完成!
	)
	echo 此次任务结束
) else ( 
	echo 暂时没有最新的分隔文件
)

看一下效果图

这是最终在打水印,分割ts文件的截图和打好水印的截图

直接用ffmpeg来剪辑合并视频非常快,比常见的视频处理软件都快,这只是分布的操作,还可以借助ffmpeg开放的能力,编写一些程序代码,组合做出很多很有趣的工具来。