视频与音频

Author : zbzhen,        Modified : Sun Apr 28 13:33:38 2024

1. 音频转字幕文件

  1. 用简映生成字幕文件, 再通过 https://kz16.top/jy/ 把剪映的json转换成srt字幕

  2. 网易见外 https://jianwai.youdao.com/ , 它很方便

  3. 在线office的听写功能, 一个月有300分钟, 需要用python转换一下,
    python转换代码如下

    import os
    
    def get_path_and_file_name_list(path):
    	list = []
    	for root, dirs, files in os.walk(path):
    		for file in files:
    			list.append(root+'/'+file)
    	return list
    
    path = os.getcwd()
    files = get_path_and_file_name_list(path)
    
    endl = "\n"
    ms = ",100 --> "
    me = ",000\n"
    
    for filename in files:
    	if filename[-4:] == ".srt":
    		with open(filename,'r', encoding='UTF-8') as f:
    			lines = f.readlines()
    		n = len(lines)//4 + 1
    		fistline = lines[0].rstrip()
    		if fistline != "1": 
    			with open(filename,'w', encoding='UTF-8') as f:
    				for k in range(n-1):
    					t = k*4
    					newline = str(k+1) + endl
    					newline += lines[t][:8] + ms 
    					newline += lines[t+4][:8] + me  
    					newline += lines[t+2] + endl
    					f.writelines(newline)
    				newline = str(n) + endl
    				newline += lines[-3][:8] + ms
    				newline += lines[-3][:8] + ",999\n"
    				newline += lines[-1][:8]
    				f.writelines(newline)
    

2. 实测有用的方法

2.1. 软件下载

win 直接下载 https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z

推荐用7-zip解压 https://www.7-zip.org/

可以选择不添加环境变量, 比较简单的办法是

把视频文件和 ffmpeg.exe 文件都放到桌面

然后把下文指令中的ffmpeg替换成./ffmpeg

2.2. 添加字幕

实测下面的方法有效

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

ffmpeg -i subtitles.srt subtitles.ass

ffmpeg -i mymovie.mp4 -vf ass=subtitles.ass mysubtitledmovie.mp4

指定字幕字体

ffmpeg -i Video_2023-02-14_111636_edit.wmv -vf subtitles=1.srt:force_style='FontName=SmileySans-Oblique"'   xxx.mp4

2.3. 提取音频

实测下面的方法有效, 对常见格式的视频提取mp3都是有效的:

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

3. 重要的处理软件 ffmpeg

下面的命令并没有经过实测

3.1. 合并字幕

参考 https://www.jianshu.com/p/ba8670f09df0

ffmpeg -i movie.mkv -i sub2.srt -map 0:v -map 0:a -map 1:s -c copy output.mkv

参考 https://zhuanlan.zhihu.com/p/163652478

ffmpeg -i "1.mp4" -lavfi "subtitles=1.srt:force_style=\'Alignment=2,OutlineColour=&H100000000,BorderStyle=3,Outline=1,Shadow=0,Fontsize= 12,MarginV=5\'" -vcodec h264_nvenc  "sub_video.mp4"  -y

3.2. 视频裁剪

参考 https://blog.csdn.net/qq_36336003/article/details/90205336
ffmpeg -i origin.mp4 -vcodec copy -acodec copy -ss 00:01:26 -to 00:01:30 output.mp4 -y

3.3. 去水印

ffmpeg -i origin.mp4 -vf delogo=1000:32:260:86 output.mp4
解释:delogo=x:y:w:h, 其中x,y为距左上角坐标,w,h为水印的宽度和高度

  • 左上角:
    ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay output3.mp4
  • 右上角:
    ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay=W-w output4.mp4
  • 左下角:
    ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay=0:H-h output5.mp4
  • 右下角:
    ffmpeg -i output.mp4 -i pptv.png -filter_complex overlay=W-w:H-h output6.mp4

3.5. 提取

  1. 提取封面
    ffmpeg -i output.mp4 -ss 00:00:00 -t 1 -r 1 -q:v 2 -f image2 cover.jpg
    解释:ffmpeg -i 原始视频文件 -ss 00:00:00 -t 1 -r 1 -q:v 2 -f image2 封面图片文件,-ss开始时间,-t共需多少时间,-r代表每秒的帧数,-q:v代表存储图片质量。这里为了简单,我们将第一帧的图片作为我们的封面。

  2. 提取音频
    示例:ffmpeg -i origin.mp4 -acodec copy -vn voice.aac
    解释:ffmpeg -i 原始视频文件 -acodec copy -vn 输出音频文件

  3. 提取视频

    • 示例:ffmpeg -i origin.mp4 -vcodec copy -an video0.mp4
      解释:ffmpeg -i 原始视频文件 -acodec copy -vn 输出视频文件

    • 成功的例子: ffmpeg -i input.mka -vn -ar 44100 -ac 2 -ab 128k -f mp3 "output.mp3"

3.6. 合并视频与音频

ffmpeg -i video.mp4 -i audio.mp4 -c:v copy -c:a aac -strict experimental output.mp4

ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a copy output.mp4

3.7. 合并多个视频

参考 https://www.cnblogs.com/duanxiaojun/articles/6904878.html

  • 方法一: 对于 MPEG 格式的视频,可以直接连接:
    ffmpeg -i "concat:input1.mpg|input2.mpg|input3.mpg" -c copy output.mpg

  • 方法二: 先创建一个文本文件filelist.txt

    file 'input1.mkv'
    file 'input2.mkv'
    file 'input3.mkv'
    

    然后:
    ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

3.8. 减小视频体积

FFmpeg是一个非常强大的工具,可以用来处理视频和音频文件。如果你想要减小MP4文件的体积,大致有以下几种方法:

  1. 降低比特率:这是减小视频文件大小最直接的方法。比特率越低,视频文件越小,但视频质量也会相应降低。

    ffmpeg -i input.mp4 -b:v 1000k -bufsize 1000k output.mp4
    

    这里的-b:v是指定视频比特率,1000k表示1000kbps。-bufsize也设置为1000k,这有助于控制输出文件的大小。

  2. 改变分辨率:减小视频的分辨率也会减小文件的大小。

    ffmpeg -i input.mp4 -s 1280x720 output.mp4
    

    -s后面跟的是新的分辨率大小。

  3. 转换编码器:某些编码器比其他编码器更有效率。例如,H.265/HEVC通常能比H.264/AVC提供更小的文件大小,在相同的质量下。

    ffmpeg -i input.mp4 -c:v libx265 -crf 28 output.mp4
    

    -c:v libx265指定使用x265编码器,-crf是常量速率因子,数字越大,压缩越高,质量越低。

  4. 移除音轨:如果视频文件中的音频不是必须的,移除音轨可以进一步减小文件大小。

    ffmpeg -i input.mp4 -c:v copy -an output.mp4
    

    -an参数指示ffmpeg忽略音频流。

  5. 使用2-pass编码:2-pass编码可以在给定的比特率下提供更好的质量。这会让编码过程运行两次,第一次分析视频,第二次进行实际的编码。

    ffmpeg -y -i input.mp4 -c:v libx264 -b:v 1000k -pass 1 -an -f mp4 /dev/null && \
    ffmpeg -i input.mp4 -c:v libx264 -b:v 1000k -pass 2 -c:a aac -b:a 128k output.mp4
    

    第一行命令是第一遍编码,它会生成一个日志文件,不会输出视频。第二行命令是第二遍编码,它会使用第一遍编码生成的日志文件来优化视频编码。

使用上述方法时,需要注意的是,视频质量和文件大小之间总是存在权衡。你可能需要进行一些实验,以找到适合你需要的设置。另外,FFmpeg的各个版本可能支持不同的编码器和选项,所以请确保你使用的FFmpeg版本支持你想要使用的功能。