通过Docker部署的ffmpeg进行视频分割与合并

Posted 皓月如我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过Docker部署的ffmpeg进行视频分割与合并相关的知识,希望对你有一定的参考价值。

Docker基础知识与用法可以参考着一篇:《Docker入门》

1. 安装ffmpeg

hub.docker.com 上面搜索ffmpeg就可以了,我选的是下载量最大的jrottenberg/ffmpeg,然后通过命令行方式安装。

PS C:\\Users\\MyName> docker pull jrottenberg/ffmpeg

2. 运行docker容器

PS C:\\Users\\MyName> docker run -it --name app_ffmpeg -p 8080:8080 -v F:/Downloads/ffmpeg/:/mnt/app/ --entrypoint='bash' jrottenberg/ffmpeg

然后在宿主机上检查容器是否已经正常运行

PS C:\\Users\\MyName> docker ps
CONTAINER ID   IMAGE                COMMAND   CREATED          STATUS          PORTS                    NAMES
7ba2af75f183   jrottenberg/ffmpeg   "bash"    10 minutes ago   Up 10 minutes   0.0.0.0:8080->8080/tcp   app_ffmpeg

3. 将需要处理的视频文件传输到容器中

PS C:\\Users\\MyName> docker cp F:\\Downloads\\test_video.mp4 app_ffmpeg:/tmp/workdir/

4. 在docker中使用ffmpeg命令进行文件分割

此处是从视频文件37:50处进行分割的。

# ffmpeg -ss 00:00:00 -t 00:37:50 -i test_video.mp4 -vcodec copy -acodec copy test_video_1.mp4
# ffmpeg -ss 00:37:50 -t 01:17:29 -i test_video.mp4 -vcodec copy -acodec copy test_video_2.mp4

5. 将分割好的文件从容器拷贝回宿主机

PS C:\\Users\\MyName> docker cp app_ffmpeg:/tmp/workdir/test_video_1.mp4 F:\\Downloads
PS C:\\Users\\MyName> docker cp app_ffmpeg:/tmp/workdir/test_video_2.mp4 F:\\Downloads

[注] ffmpeg 常用命令

1. 视频分割
ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy output.mp4
2. 视频合并:

先将需要合并的文件名依次存入文件列表文件list.txt中:

file split1.mp4
file split2.mp4

然后执行合并命令

ffmpeg -f concat -i list.txt -c copy concat.mp4
3. 更多:
// 去掉视频中的音频
ffmpeg -i input.mp4 -vcodec copy -an output.mp4
// -an: 去掉音频;-vcodec:视频选项,一般后面加copy表示拷贝

// 提取视频中的音频
ffmpeg -i input.mp4 -acodec copy -vn output.mp3
// -vn: 去掉视频;-acodec: 音频选项, 一般后面加copy表示拷贝

// 音视频合成
ffmpeg -y –i input.mp4 –i input.mp3 –vcodec copy –acodec copy output.mp4
// -y 覆盖输出文件

//剪切视频
ffmpeg -ss 0:1:30 -t 0:0:20 -i input.mp4 -vcodec copy -acodec copy output.mp4
// -ss 开始时间; -t 持续时间

// 视频截图
ffmpeg –i test.mp4 –f image2 -t 0.001 -s 320x240 image-%3d.jpg
// -s 设置分辨率; -f 强迫采用格式fmt;

// 视频分解为图片
ffmpeg –i test.mp4 –r 1 –f image2 image-%3d.jpg
// -r 指定截屏频率

// 将图片合成视频
ffmpeg -f image2 -i image%d.jpg output.mp4

//视频拼接
ffmpeg -f concat -i filelist.txt -c copy output.mp4

// 将视频转为gif
ffmpeg -i input.mp4 -ss 0:0:30 -t 10 -s 320x240 -pix_fmt rgb24 output.gif
// -pix_fmt 指定编码

// 将视频前30帧转为gif
ffmpeg -i input.mp4 -vframes 30 -f gif output.gif

// 旋转视频
ffmpeg -i input.mp4 -vf rotate=PI/2 output.mp4

// 缩放视频
ffmpeg -i input.mp4 -vf scale=iw/2:-1 output.mp4
// iw 是输入的宽度, iw/2就是一半;-1 为保持宽高比

//视频变速
ffmpeg -i input.mp4 -filter:v setpts=0.5*PTS output.mp4

//音频变速
ffmpeg -i input.mp3 -filter:a atempo=2.0 output.mp3

//音视频同时变速,但是音视频为互倒关系
ffmpeg -i input.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

// 视频添加水印
ffmpeg -i input.mp4 -i logo.jpg -filter_complex [0:v][1:v]overlay=main_w-overlay_w-10:main_h-overlay_h-10[out] -map [out] -map 0:a -codec:a copy output.mp4
// main_w-overlay_w-10 视频的宽度-水印的宽度-水印边距;

// 截取视频局部
ffmpeg -i in.mp4 -filter:v "crop=out_w:out_h:x:y" out.mp4
// 截取部分视频,从[80,60]的位置开始,截取宽200,高100的视频
ffmpeg -i in.mp4 -filter:v "crop=80:60:200:100" -c:a copy out.mp4
// 截取右下角的四分之一
ffmpeg -i in.mp4 -filter:v "crop=in_w/2:in_h/2:in_w/2:in_h/2" -c:a copy out.mp4
// 截去底部40像素高度
ffmpeg -i in.mp4 -filter:v "crop=in_w:in_h-40" -c:a copy out.mp4

docker安装部署ffmpeg

系统版本:Centos7

搭建ffmpeg
视频转码的工具可能有很多,但开源且使用人数最多的还是莫过于ffmpeg这个工具,具体功能笔者不在这里详细讲解;安装此工具的方式有很多,比如apt安装、源码安装、docker安装等等,不过docker是跨平台的,因此笔者这里将以docker方式安装为例
下载镜像:

docker pull jrottenberg/ffmpeg

当容器下载完毕之后,可以用一些命令进行验证是否能够正常运行,如下参考命令

docker run jrottenberg/ffmpeg

FFmpeg所支持的输入输出协议非常多,比如可以选择file协议作为来源,使用hls协议作为输出结果,具体所支持的协议可以通过如下命令查看

docker run jrottenberg/ffmpeg -protocols

创建并运行容器

docker run -it --name app_ffmpeg -p 8080:8080 -v /home/app_ffmpeg/:/mnt/app/ --entrypoint=‘bash’ jrottenberg/ffmpeg

docker ps -a #查询创建的容器进入容器
docker attach 44fc0f0582d9 #进入容器

把文件目录导入到docker容器目录中 :/tmp/workdir——容器名称

docker cp /usr/video/sss.mp4 :/tmp/workdir

循环推流

ffmpeg -re -stream_loop -1 -i 2minTransformers6281_trailer1080p.flv -vcodec copy -acodec copy -f flv rtmp://192.168.31.9:1935/live/test1

vlc访问地址就可以播放推流的视频了

rtmp://192.168.31.9:1935/live/test1
————————————————
版权声明:本文为CSDN博主「常名先生」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jiangbenchu/java/article/details/84253852

以上是关于通过Docker部署的ffmpeg进行视频分割与合并的主要内容,如果未能解决你的问题,请参考以下文章

想要使用ffmpeg来完成如下两个功能: 1.视频截图 2.视频分割功能

利用FFMPEG命令进行文件分割

ffmpeg视频压缩与分割

docker中的java程序运行ffmpeg拉流

docker中的java程序运行ffmpeg拉流

如何通过静音部分分割视频或音频