如何使用 Linux 中的 ffmpeg 从视频中提取多个特定帧并将其编号保存在文件名中?

如何使用 Linux 中的 ffmpeg 从视频中提取多个特定帧并将其编号保存在文件名中?

我使用以下 ffmpeg 命令从视频中提取多个帧。

ffmpeg -i myvideo.MP4  -vf "select='eq(n\,1315)+eq(n\,1607)'"  -vsync drop "filename%03d.png"

但是,我想将它们的数字保存在文本文件中,例如 200,500,600,100,然后在选择选项中使用该文本文件。

我怎样才能做到这一点?

例如。

frms=$(cat frames.txt); ffmpeg -i myvideo.MP4  -vf "select='eq(n\,$frms)'"  -vsync drop "filename%03d.png"

答案1

将帧编号逐一保存在文件中。然后,运行 sed 以使其适合 ffmpeg select 命令。然后,运行 ffmpeg 以提取将从您保存的给定文件中读取的选定帧。

sed -i 's/^/eq(n\\,/' frm.txt; #adds eq(n\,
sed -i 's/$/)\+/'     frm.txt; #adds )+ at the end of each line
sed -i '$ s/.$//'     frm.txt; # remove + in last line (last digit)
frms=$(cat frm.txt); ffmpeg -i myvideo.MP4  -vf "select='$frms'"  -vsync drop "filename%03d.bmp"

相关内容