FFmpeg
ffmpeg -y -i input.mp4 output.avi
- 生成gif(低质量)
-pix_fmt(像素格式) -s(设置帧大小WxH)
ffmpeg -y -i input.mp4 -pix_fmt rgb8 -r 10 -s 320x240 output.gif
ffmpeg -y -i input.mp4 -pix_fmt rgb8 -r 10 -vf 'scale=320:-1' output.gif
- 生成gif(高质量)
-ss(开始时间偏移) -t(持续时间)
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif
ffmpeg -y -ss 5 -t 5 -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos,split[s0][s1];[s0]palettegen[p];[s1][p]paletteuse" -loop 0 output.gif
ffmpeg -i input.mp4 -r 1 -s 1024x768 -f image2 input-%03d.jpeg
ffmpeg -y -vsync 0 -i input.mp4 -vf select='eq(pict_type\,I)' -f image2 I-input-%03d.jpeg
ffmpeg -y -vsync 0 -i input.mp4 -vf select='eq(pict_type\,P)' -f image2 P-input-%03d.jpeg
ffmpeg -y -vsync 0 -i input.mp4 -vf select='eq(pict_type\,B)' -f image2 B-input-%03d.jpeg
ffmpeg -y -vsync 0 -i input.mts -vf "select='eq(pict_type,PICT_TYPE_I)'" -f image2 I-input-%03d.jpeg
ffmpeg -y -vsync 0 -i input.mts -vf "select='eq(pict_type,PICT_TYPE_P)'" -f image2 P-input-%03d.jpeg
ffmpeg -y -vsync 0 -i input.mts -vf "select='eq(pict_type,PICT_TYPE_B)'" -f image2 B-input-%03d.jpeg
for file in *.mp4
do
fname=`basename $file`
filename=${fname%%.*}
extname=${fname##*.}
ffmpeg -y -vsync 0 -i $file -vf select='eq(pict_type\,I)' -f image2 i-$filename-%03d.jpeg;
done
for file in *.jpg; do fname=`basename $file`; filename=${fname%%.*}; extname=${fname##*.}; ffmpeg -y -vsync 0 -i $file -vf select='eq(pict_type\,I)' -f image2 i-$filename-%03d.jpeg; done
ffmpeg -f image2 -framerate 3 -i input-%03d.jpeg -s 1024x768 input.avi
NVIDIA GPU 加速
ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
ffmpeg -y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda -i input.mp4 \
-vf scale_npp=1920:1080 -c:a copy -c:v h264_nvenc -b:v 5M output-1080p.mp4 \
-vf scale_npp=1280:720 -c:a copy -c:v h264_nvenc -b:v 8M output-720p.mp4
ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -vf "hwdownload,format=nv12" -r 1 input-%03d.jpeg
ffmpeg -y -hwaccel cuvid -c:v h264_cuvid -i input.mp4 -vf "scale_npp=format=yuv420p,hwdownload,format=yuv420p" -r 1 input-%03d.jpeg
FFmpeg容器
Alpine
docker run --rm -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg:4.3-alpine 参数
docker run --rm -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg:4.3-alpine \
-y -vsync 0 -i input.mp4 -vf select='eq(pict_type\,I)' \
-f image2 I-input-%03d.jpeg
NVIDIA
docker run --rm --runtime nvidia -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg:4.3-nvidia 参数
docker run --rm --runtime nvidia -v $(pwd):$(pwd) -w $(pwd) jrottenberg/ffmpeg:4.3-nvidia \
-y -vsync 0 -hwaccel cuda -hwaccel_output_format cuda \
-i input.mp4 -c:a copy -c:v h264_nvenc -b:v 5M output.mp4
参考资料