通过docker部署的ffmpeg进行视频分割与合并(代码片段)

皓月如我 皓月如我     2023-04-01     803

关键词:

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

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

...用的mediafoundation,都已经实现了,上述两个功能的实现,通过网络搜索,知道使用ffmpeg的命令行工具ffmpeg.exe可以实现。并且我也新手实践了一下,通过实例化一个Process确实可以做到。可是,问题出来了。。。。。我不想使用命... 查看详情

利用ffmpeg命令进行文件分割

ffmpeg-ss00:00:00-iinput.mp4-ccopy-t60output.mp4-ss表示视频分割的起始时间,-t表示分割时长,同时也可以用00:01:00表示注意:-ss要放在-i之前对于普通的视频分割这个命令可能够用了 但是如果你想要连续风格一段视频,简单的使用此命... 查看详情

docker中的java程序运行ffmpeg拉流

...,需要开启ffmpeg拉流,然后想将这个程序部署在docker。不料颇多波折。幸而最后成功,差点就放弃了。记录如下。一、基本情况1、我们写了个视频拉流控制程序,依赖JDK1.8。运行过程中,需要启动操作系统的f... 查看详情

srs流媒体服务进行视频推送拉取(代码片段)

...址https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started2.Linux环境下docker方式部署192.168.3.10为流媒体服务地址exportCANDIDATE="192.168.3.10"dockerrun--rm-it-p1935:1935-p1985:1985-p8080:8080-p1990:1990-p8088:8088\\--envCANDIDATE=$CANDIDATE-p8000:8000/udp\\registry.cn... 查看详情

ffmpeg视频压缩与分割(代码片段)

ffmpeg-i1.mov-vcodeclibx264-crf20out.mp4--分辨率不动进行压缩ffmpeg-i1024.mp4-ccopy-c:vlibx264-vfscale=-2:720720.mp4--修改分辨率ffmpeg-ss00:00:00-t00:02:25-i720.mp4-vcodeccopy-acodeccopy72001.mp4--分割ffmpeg-ss00:02:2 查看详情

FFmpeg:如何有效地分割视频?

】FFmpeg:如何有效地分割视频?【英文标题】:FFmpeg:Howtosplitvideoefficiently?【发布时间】:2011-08-0419:57:23【问题描述】:我希望将一个大的avi视频分成两个较小的连续视频。我正在使用ffmpeg。一种方法是两次运行ffmpeg:ffmpeg-iinput.... 查看详情

ffmpeg视频分割和合并

FFMPEG视频分割和合并一、分割ffmpeg-ss00:00:00-t00:00:30-itest.mp4-vcodeccopy-acodeccopyoutput.mp4-ss指定从什么时间开始-t指定需要截取多长时间-i指定输入文件这个命令就是从00秒开始裁剪到00+30=30秒结束,总共30秒的视频。这个命令执行很快... 查看详情

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

】如何通过静音部分分割视频或音频【英文标题】:Howtosplitvideooraudiobysilentparts【发布时间】:2016-07-0414:35:50【问题描述】:我需要自动按单词分割演讲视频,所以每个单词都是一个单独的视频文件。你知道有什么方法可以做到... 查看详情

ffmpeg进阶:生成视频的缩略图(代码片段)

...些帧组成一个图片作为视频的缩略图。这里介绍一下如何通过FFmpeg生成视频的缩略图。其实原理很简单,比如我们需要一个6X6的视频缩略图,也就是需要36帧。首先我们将视频按时长分成6X6+1份,这样视频中间就会... 查看详情

使用 ffmpeg 按大小分割视频文件 [关闭]

】使用ffmpeg按大小分割视频文件[关闭]【英文标题】:Usingffmpegtosplitvideofilesbysize[closed]【发布时间】:2016-11-1014:28:02【问题描述】:我正在尝试使用ffmpeg编写一个批处理文件,以自动执行多余的日常任务,即从以4gb块(这是大多... 查看详情

awsffmpeg+lambda来完成视频stream的截图pythondocker版(代码片段)

...开发。文本讨论的是在AWS无服务架构的Lambda上,如何通过Docker部署FFmpeg二进制程序。1确定Lambda运行时环境Lambda运行时决定了其运行的CPU架构、操作系统和辅助软件。不同语言的运行时环境不同,相同语言的不同版本的运... 查看详情

使用 ffmpeg-python 将视频分割成图像

】使用ffmpeg-python将视频分割成图像【英文标题】:Splitvideointoimageswithffmpeg-python【发布时间】:2021-01-1611:14:42【问题描述】:据我了解ffmpeg-python是Python中的主要包,可以直接操作ffmpeg。现在我想拍摄一个视频并将其帧保存为单独... 查看详情

springboot整合ffmpeg进行视频分片上传(linux)(代码片段)

...理:使用ffmpeg,把视频文件切片成m3u8,并且通过springboot,可以实现在线的点播。客户端上传视频到服务器,服务器对视频进行切片后& 查看详情

ffmpeg视频剪切时长不正确

参考技术A在windows下使用ffmpeg以下命令剪切视频时,发现剪切后的时长都会比设置的时长长ffmpeg-ss00:10-t30-i0.mp4-ccopy2.mp4以上的命令是从10s开始剪30s时长的视频,不过实际出来的时长32s左右-ccopy就是没有重新编码,直接裁剪视频,... 查看详情

基于ffmpeg的简单android视频播放器(代码片段)

...现3.播放控制4.音视频同步5.总结之前的博客中已经使用了FFmpeg进行音频文件的解码,并且基于OpenSLES实现了一个简单的音乐播放器。最近正在学习《音视频开发进阶指南》,看到了视频部分。不如就干脆再写一个视频播放... 查看详情

如何使用 FFMPEG 分割视频,以便每个块都以关键帧开头?

】如何使用FFMPEG分割视频,以便每个块都以关键帧开头?【英文标题】:HowtosplitavideousingFFMPEGsothateachchunkstartswithakeyframe?【发布时间】:2012-12-0922:01:09【问题描述】:我们需要将大型实时WMV视频馈送分成大小相同的小块。我们制... 查看详情

通过 Github 操作在 AWS ECS 上使用 Docker Compose 进行部署

】通过Github操作在AWSECS上使用DockerCompose进行部署【英文标题】:DeploywithDockerComposeonAWSECSwithGithubactions【发布时间】:2022-01-0105:36:35【问题描述】:我最近开始尝试使用ECS、DockerCompose和上下文,这真的很有趣。我已经设法通过我... 查看详情

FFmpeg - 连接不知道格式的视频

...在PHP中使用CMS(这是开发应用程序所使用的语言)我需要通过这些部分上传生成一个独特的视频。通过FFmpeg,我正在从命令行进行测试:ffmpeg-iconcat:IMG_1916. 查看详情