音视频和字幕处理

Author : zbzhen,       Last modification time : Wed Jun 28 22:42:43 2023

常见需求

  • 录制视频
  • 单个视频提取某个时间段
  • 多个视频的合并
  • 视频降噪并添加字幕
  • 视频压缩

最终目标: 体积小,视频和音频清晰,并且有字幕的mp4文件,
整个过程都可选用免费开源软件!

必备神器ffmpeg:

当然也可以用一些开源可视化的工具, 如果不做特效的话, 个人感觉用命令行会更方便, 也会更通用

本文主要参考gpt并且用平板自带录制功能录制视频,最后处理成功

1. 录制视频

推荐两款软件

视频录制错了, 就暂停, 然后从某个节点开始重新录制

然后对视频做后处理, 也就是要处理:

提取视频的某一时间段, 以及多个视频的合并

噪音方面

录制视频有个比较麻烦的问题就是噪声太大,如果有N卡的话,推荐使用N卡降噪声. 参考(页面有下载地址):

https://www.nvidia.com/en-us/geforce/guides/nvidia-rtx-voice-setup-guide/#Requirements

如果没有N卡,也可用腾讯会议录制,手机电脑分别加入会议, 需要注意的是一定要断开某个设备里腾讯会议的音频。

或者采用后面提到的视频后处理的方案

2. 单个视频提取某个时间段

下面命令表示提取视频input.mp4的00:00:00 -- 00:27:30输出为output.mp4

ffmpeg -ss 00:00:00 -t 00:27:30 -i input.mp4 -vcodec copy -acodec copy output.mp4

3. 合并多个视频

比较快且使用的方法是先转化为ts格式,然后拼接

ffmpeg -i 1.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 1.ts
ffmpeg -i 2.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb 2.ts
ffmpeg -i "concat:1.ts|2.ts" -acodec copy -vcodec copy -absf aac_adtstoasc output.mp4

不过在实践中, 这样的到的视频会被莫名奇妙的被旋转了90度,后续需要做个视频旋转处理

ffmpeg -i output.mp4 -metadata:s:v rotate="90" -codec copy output2.mp4

4. 视频降噪

推荐使用软件UVR:

https://github.com/Anjok07/ultimatevocalremovergui/releases

不过它依赖显卡(否则比较慢), 但是效果非常好, 可以直接提出视频中的MP3音频文件, 并且得到清晰音频; 甚至它可以用来分离歌曲中的人声和伴奏甚至合唱

不过接下来还需要一个操作:

把xx.mp4中的音频(有噪声)替换成1.MP3的音频(无噪声)

ffmpeg -i xx.mp4 -i 1.MP3 -c:v copy -c:a aac -map 0:v:0 -map 1:a:0 output.mp4

只需要一行简单的命令即可

5. 视频自动添加字幕

推荐在线软件:

  • 剪映(依赖网络,且需要把你的音频上传到它的服务器), 不过可用它做一些加单的特效

推荐离线软件:

通过上面的软件可以通过视频文件得到.srt字幕文件

接下来就是合并字幕文件1.srt和视频文件xxx.wmv

ffmpeg -i xxx.wmv -vf subtitles=1.srt xxx.mp4

6. 视频压缩

有时候视频体积大是因为视频帧数比较高, 因此可以通过降低视频帧数来减少视频体积:

ffmpeg -i input.mp4 -r 24 -c:v libx264 -crf 23 -preset medium output.mp4

解释一下这个命令:

  • -i input.mp4:指定输入视频文件的路径和文件名。
  • -r 24:设置输出视频的帧率为24帧/秒。你可以根据需要调整这个值。
  • -c:v libx264:指定使用libx264编码器进行视频压缩。
  • -crf 23:设置视频的质量。较低的值会产生更高质量的视频,但文件大小也会更大。较高的值会产生较低质量的视频,但文件大小会更小。一般推荐使用18-28之间的值,你可以根据需要调整这个值。
  • -preset medium:设置编码速度和压缩效率的预设值。可以选择的预设值有:ultrafast、superfast、veryfast、faster、fast、medium、slow、slower、veryslow。你可以根据需要选择适合的预设值。
  • output.mp4:指定输出视频文件的路径和文件名。

运行命令后,FFmpeg将会压缩输入视频并减少帧率,生成一个新的输出视频文件。你可以根据需要修改命令中的参数来调整压缩和帧率设置。

7. 其它

7.1. 视频提取音频

ffmpeg -i output2.mp4 -vn -ar 44100 -ac 2 -ab 128k -f mp3 "output.mp3"