我使用以下 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"