通常,当我更改帧速率时,我会使用 Adobe Premiere 并将视频素材解释为新的帧速率,因此持续时间会发生变化。这很好。但因为这是一个我想转换的 mkv 文件,所以我使用 ffmpeg。
但是在添加时间码时,我遇到了 ffmpeg 的一个奇怪的问题。
我使用的代码如下所示:
/Applications/ffmpeg -probesize 50M -analyzeduration 100M -i "$f" -map 0:0 -map 0:1 -c:a pcm_s24le -async 1 -c:v dnxhd -b:v 36000k -r 25 -s 1920x1080 -aspect 16:9 -pix_fmt yuv422p -coder ac -trellis 0 -colorspace bt709 -color_range mpeg -subq 6 -me_range 16 -sc_threshold 40 -keyint_min 25 -g 50 -metadata creation_time=now -af atempo=1/0.95904 -vf setpts="0.95904*PTS" -vf drawtext="fontsize=30:fontfile=/library/fonts/tahoma.ttf: timecode='01\:00\:00\:00': r=25: x=main_w-180: y=30: fontcolor=white@1: box=1: boxcolor=0x00000000@1" -sn -y "/Volumes/videos/$FILENAME.mov"
制作的视频长约42分钟。
当我渲染没有 drawtext 的视频时:
/Applications/ffmpeg -probesize 50M -analyzeduration 100M -i "$f" -map 0:0 -map 0:1 -c:a pcm_s24le -async 1 -c:v dnxhd -b:v 36000k -r 25 -s 1920x1080 -aspect 16:9 -pix_fmt yuv422p -coder ac -trellis 0 -colorspace bt709 -color_range mpeg -subq 6 -me_range 16 -sc_threshold 40 -keyint_min 25 -g 50 -metadata creation_time=now -af atempo=1/0.95904 -vf setpts="0.95904*PTS" -sn -y "/Volumes/videos/$FILENAME.mov"
渲染后的视频时长为 40 分 59 秒。这正是我想要的时长,与 Adobe 创建的时长相同。
为什么在图片中绘制时间码的情况下,视频时长比没有绘制时间码的情况下更长?
请问我怎样才能使用 ffmpeg 将 mkv 转换为具有 25fps 和刻录时间码的 DNxHD,正确的方法是什么?
答案1
您的日志显示:
Multiple -filter, -af or -vf options specified for stream 0, only the last option '-filter:v drawtext' will be used.
这意味着您的设定被忽略,因此持续时间更长。
仅使用其中一个-vf
或-filter_complex
同时用于音频和视频过滤:
/Applications/ffmpeg -probesize 50M -analyzeduration 100M -i "$f" -map 0:0 -map 0:1 -c:a pcm_s24le -async 1 -c:v dnxhd -b:v 36000k -r 25 -s 1920x1080 -aspect 16:9 -pix_fmt yuv422p -coder ac -trellis 0 -colorspace bt709 -color_range mpeg -subq 6 -me_range 16 -sc_threshold 40 -keyint_min 25 -g 50 -metadata creation_time=now -af atempo=1/0.95904 -vf setpts="0.95904*PTS,drawtext=fontsize=30:fontfile=/library/fonts/tahoma.ttf: timecode='01:00:00:00': r=25: x=main_w-180: y=30: fontcolor=white@1: box=1: boxcolor=0x00000000@1" -sn -y "/Volumes/videos/$FILENAME.mov"
- 您可能必须更改
timecode='01:00:00:00'
为timecode='01\:00\:00\:00'
。 - 看滤波简介。