今天试用了一下ffmpeg,作文以备忘。
一、安装
由于我是在windows平台下面使用,所以安装这一块就不是太简单。幸好网上已经有教程。
首先是下载:https://ffmpeg.zeranoe.com/builds/,然后解压到C:\Program Files\ffmpeg文件夹,然后再将“C:\Program Files\ffmpeg\bin”设置为系统的环境变量。
但是我在cmd窗口中输入“ffmpeg -version”,却提示错误,后来使用“Anaconda Prompt”窗口才显示成功。不过后来不知怎么原因,又好了。
二、把多张图片和音频转为视频
ffmpeg -threads 2 -y -r 10 -i 33.mp3 -f image2 -framerate 12 -r 0.2 -i image/imag%d.jpg foo.avi
参数解释:-r 0.5 表示1张图显示2秒
foo.avi 最终的视频名称
三、添加字幕
ffplay foo.avi -vf drawtext="textfile=textfile.txt:fontfile=vista.ttf:x=100:y=100:fontcolor=white:fontsize=30"
执行以上命令,出现如下错误:
SDL_OpenAudio (1 channels, 16000 Hz): WASAPI can't initialize audio client: CoInitialize has not been called. No more combinations to try, audio open failed Fontconfig error: Cannot load default config file sq= 0B f=0/0 [Parsed_drawtext_0 @ 00000000052ea000] Cannot find a valid font for the family S ans Error initializing filter 'drawtext' with args 'textfile=textfile.txt:fontfile=a rial.ttf:x=100:y=100:fontcolor=white:fontsize=30'
Cannot find a valid font for the family Sans错误的原因是当前文件夹下面没有这个字体,后来下载字体并复制到当前文件夹,解决。
然后用下面的命令:
ffmpeg -i a.mp4 -vf "[in]drawtext=fontfile=msyh.ttf:fontsize=30:fontcolor=red:x=(w-text_w)/2:y=h-t*60:textfile='textfile.txt'[out]" -c:v libx264 -t 10 foo.mp4
但是有音频的视频不行,没有音频的视频就可以。
注意:textfile.txt必须存为utf-8的格式,不然会乱码。
四、根据一张图片及mp3生成视频:
ffmpeg -loop 1 -i imag7.jpg -i 33.mp3 -c:a copy -c:v libx264 -shortest out3.mp4
五、根据一张图片生成限定时间的视频
ffmpeg -loop 1 -i imag7.jpg -c:a copy -c:v libx264 -shortest -t 80 out4.mp4
备注:80代表80秒
备注:
添加字幕的时候又遇到了一个坑,本来avi等视频文件,直接在相同目录下放一个同名的srt字幕文件,播放时就可以自动加载了,可是我试了半个晚上,硬是试不出来,第二天从网上下载了mp4文件再试,才显示出字幕。
然后再用mp4试,发现自己生成的mp4还是不行,用没有声音的mp4就可以。
六、合并字幕与视频
ffmpeg -i dd.mp4 -vf subtitles=dd.srt dd_out.mp4
字幕文件必须存为utf-8,否则会报错。
[srt @ 0000000003c20fc0] Invalid UTF-8 in decoded subtitles text; maybe missing
-sub_charenc option
[Parsed_subtitles_0 @ 000000000418fdc0] Error decoding: Invalid data found when
processing input (ignored)
[AVFilterGraph @ 000000000418fbc0] Error initializing filter 'subtitles' with ar
gs 'dd.srt'
Error reinitializing filters!
Failed to inject frame into filter network: Invalid data found when processing i
nput
Error while processing the decoded data for stream #0:0
[aac @ 0000000000441d40] Qavg: 6159.643
[aac @ 0000000000441d40] 2 frames left in the queue on closing
Conversion failed!
至此终于成功,不过这里也遭遇了两个坑,一是原来字幕文件没有从1开始;二是字幕文件多了“/”这个字符。
第二天测试的时候又出现了如下的错误:
Too many packets buffered for output stream 0:1.
[aac @ 00000000027947c0] Qavg: 31907.262
[aac @ 00000000027947c0] 2 frames left in the queue on closing
Conversion failed!
给过查询,通过加上“-threads 2”解决。
ffmpeg -threads 2 -i out4.mp4 -vf subtitles=out4.srt out_zimu.mp4