通过Docker部署的ffmpeg进行视频编辑
Docker基础知识与用法可以参考着一篇:《Docker入门》1. 安装ffmpeg在 hub.docker.com 上面搜索ffmpeg就可以了,我选的是下载量最大的jrottenberg/ffmpeg,然后通过命令行方式安装。PS C:\Users\MyName> docker pull jrottenberg/ffmpeg2. 运行docker容器PS C:\Users\MyName&
·
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
# 另一个目录映射
docker run -it --name app_ffmpeg -p 8080:8080 -v C:/Users/fm051/Videos/:/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处进行分割的。注意 -i 要写在 -ss 前面,否则可能会导致时间设置不生效。
# ffmpeg -i test_video.mp4 -ss 00:00:00 -t 00:37:50 test_video_1.mp4
# ffmpeg -i test_video.mp4 -ss 00:37:50 -t 01:17:29 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=200:100:80:60" -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
一次实战使用
// 截取画幅
ffmpeg -i original_pswc.mkv -filter:v "crop=1440:510:200:170" -c:a copy pswc.mkv
ffmpeg -i original_pswce.mkv -filter:v "crop=1440:510:200:170" -c:a copy pswce.mkv
# 截取时长
ffmpeg -i pswce.mkv -ss 00:00:21 -t 00:01:00 pswce_cut.mkv
ffmpeg -i pswc.mkv -ss 00:00:13 -t 00:01:00 pswc_cut.mkv
# 添加文字
ffmpeg -i "pswc_cut.mkv" -vf "
drawtext=text='PSWC (Port-Size-Weight-Category)':x=40:y=h-100:fontsize=20:fontcolor=yellow,
drawtext=text='stacking Strategy':x=40:y=h-60:fontsize=20:fontcolor=yellow,
" "pswc_txt.mkv"
ffmpeg -i "pswce_cut.mkv" -vf "
drawtext=text='Enhanced-PSWC':x=40:y=h-100:fontsize=20:fontcolor=yellow,
drawtext=text='stacking Strategy':x=40:y=h-60:fontsize=20:fontcolor=yellow,
" "pswce_txt.mkv"
# 垂直拼接
ffmpeg -i pswc_txt.mkv -i pswce_txt.mkv -filter_complex "[0:v][1:v]vstack=inputs=2[v]" -map "[v]" -map 0:a -c:a copy Demo4.mkv
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)