2025年3月26日 星期三 甲辰(龙)年 月廿五 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 云技术 > Docker

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

时间:04-20来源:作者:点击数:52

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
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门