使用 ffmpeg 命令进行视频的编辑

使用 ffmpeg 命令进行视频的编辑

      • 摘要
      • 涉及的 ffmpeg 命令
        • 预设的配置值
        • 为视频添加字幕
        • 根据输入文件内容,拼接音频并输出到指定路径:
        • 保留原声合并音(视)频[^3]
        • 截取时间段内的音频
        • 调整音频速率[^4]
        • 去除音视频的原声
        • 为不带音频的视频文件添加音频
        • 生成指定长度的空白音频
        • 视频转音频,wav 格式
        • 生成视频封面图
        • 改变音频文件的音量
        • 获取音视频时长
        • 获取视频帧图
        • 修改视频分辨率[^5]
        • 2-pass 压制视频可自定义码率[^6] = 可自定义大小
        • 生成纯色视频
        • 循环图片生成视频
      • 参考资料

摘要

最近项目用到 ffmpeg 的命令对视频或音频进行编辑,在这里由项目需求出发做一个归纳。
通过雷霄骅先生的一篇博文1 可以了解关于 ffmpeg 详尽的知识和用途,让人不由得对这位先驱产生敬意。
文末的参考资料中可以看到一些文档以及教程。通过这些文档和教程,就可以在满足了需求之后再回头学习各个命令的意义和作用,从而在遇到新需求时能够更加快速的找到解决方案。

涉及的 ffmpeg 命令

预设的配置值
	//质量参数, 0~50, 越小质量越高. 18~23 肉眼不可分辨的变化private $crf = 16;//编码预设值 preset: 可选:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placeboprivate $preset = 'ultrafast';

质量参数 crf 越小,质量越高,输出的文件就越大;编码预设值 preset 可以理解为压制程度与时间的关系值,时间越长,压制程度就要高,输出的文件就越小,反之同理。
项目需要对视频进行一系列的操作,最终输出处理后的视频。所以,在这个一系列操作的过程中,我把编码预设值设成了 ultrafast ,是希望尽量缩短这个过程所耗费的时间。当然,这是由操作所需的临时空间换来的。操作完成后,再由 2-pass 压制视频为所需的文件大小输出。
而关于质量参数的值,系统默认的好像是 18,但是经过多次操作后,视频的质量还是有了肉眼可分辨的下降。设为 16 是可满足我项目的需求的一个值。

为视频添加字幕
ffmpeg -i {$originFileTmpPath} -vf subtitles={$subtitlePath} -crf {$this->crf} -preset {$this->preset} {$subFilePath}
根据输入文件内容,拼接音频并输出到指定路径:

(此处用的是博文2的方法二「FFmpeg concat 分离器」)

ffmpeg -f concat -safe 0 -i {$fileListPath} -c copy {$finalFilePath}

这里多了 -safe 0 ,原因是:

在 filelist.txt 里面加入/的话会报一个不安全文件路径的错误
Unsafe file path
只要加上 -safe 0 就可以解决啦

保留原声合并音(视)频3
                        


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部