我正在尝试将SRT文件和时间码值刻录(硬编码)到MP4文件,但无济于事。
我目前正在使用以下命令刻录srt和时间码:
刻录SRT
ffmpeg -i input.mp4 -vf subtitles=subs.srt out.mp4
刻录时间码
ffmpeg -i input.mp4 -filter_complex "drawtext=fontfile=/Windows/Fonts/arial.ttf:x=320:y=main_h-50:fontsize=32:fontcolor='white':timecode='00\:00\:00\:00':rate=29.97" -y output.mp4
但是,我无法将两者合并为一个命令,因为ffmpeg不允许同时使用-vf和-filter_complex。
有解决方法吗?
答案 0 :(得分:1)
您可以将系列中的过滤器链接在一起。这会创建filterchain。一系列连接的过滤链是一个过滤器图。
ffmpeg -i input.mp4 -vf "drawtext,subtitles" -c:a copy output.mp4
-vf
用于simple (video) filtergraphs,其中包含一个输入和一个输出。
-filter_complex
用于complex filtergraphs,其由一个或多个输入和/或一个或多个输出组成。但是,我不认为使用-filter_complex
进行简单的过滤图会导致任何问题。
由于您的输入和输出是MP4,我将-c:a copy
添加到stream copy任何音频,因为您可能不需要或想要重新编码它。
为了提高准确性,请考虑使用rate=ntsc
或rate=30000/1001
代替rate=29.97
。
答案 1 :(得分:0)
适合任何遇到此问题的人。您可以使用.srt文件以与.as文件相同的方式执行此操作。唯一的区别是.ass文件使我们能够更好地控制字体颜色和其他内容。我找不到.srt一个,所以我将分享.ass一个为我工作,我使用hls输出,但你可以再次使用mp4一个:
ffmpeg -i INPUT_VIDEO_FILE.mp4 -profile:v baseline -level 4.0 -vf "scale=-2:360,subtitles='dynamic_subtitle.ass':force_style='FontName=Aaargh/Aaargh.ttf,PrimaryColour=&H664c4c4c" -start_number 0 -hls_time 10 -hls_list_size 0 -f hls /s3_temp/video_360.m3u8