Difference between revisions of "ffmpeg"
m |
|||
Line 63: | Line 63: | ||
<pre> | <pre> | ||
ffmpeg -i video_input.mp4 -filter_complex "[0:v] drawtext='x=20:y=40:fontcolor=white:fontsize=32:text=%{pts}'" video_output.mp4 | ffmpeg -i video_input.mp4 -filter_complex "[0:v] drawtext='x=20:y=40:fontcolor=white:fontsize=32:text=%{pts}'" video_output.mp4 | ||
+ | </pre> | ||
+ | |||
+ | Blank video with black screen (320x240 10 FPS), keep audio, embed time code. Notice that the '''-filter_complex''' uses '''[1:v]''', which is created by the '''lavfi''' filter that precedes it. | ||
+ | <pre> | ||
+ | ffmpeg -i video_input.mp4 -f lavfi -i color=c=black:s=320x240:r=10 -map 1 -map 0:a -shortest -filter_complex "[1:v] drawtext='x=20:y=40:fontcolor=white:fontsize=32:text=%{pts}'" video_output.mp4 | ||
+ | </pre> | ||
+ | |||
+ | Blank video with audio and multiple lines of text including multiple formats of timecode output. | ||
+ | <pre> | ||
+ | ffmpeg -i video_input.mp4 -f lavfi -i color=c=black:s=320x240:r=10 -map 1 -map 0:a -shortest -filter_complex "[1:v] drawtext='x=10:y=40:fontcolor=white:fontsize=32:text=%{pts\:hms}', drawtext='x=134:y=80:fontcolor=white:fontsize=18:text=%{pts}', drawtext='x=22:y=110:fontcolor=white:fontsize=24:text=AUDIO 2020-03-25'" video_output.mp4 | ||
</pre> | </pre> |
Revision as of 15:23, 31 March 2020
Contents
Extract original JPEG images from MJPEG video
You can check if your video is in MJPEG format using ffprobe. You should get the output codec_name=mjpeg.
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name -of default=nw=1 input.mov
You can extract lossless individual JPEG images from an MJPEG file. Note the two form of syntax that may be required depending on the version of ffmpeg being used.
ffmpeg -i input.mov -codec:v copy -bsf:v mjpeg2jpeg frame-%04d.jpg
Alternate syntax:
ffmpeg -i input.mov -vcodec copy frame-%04d.jpg
Extract the best quality of still images from a video
Note, if your video is in MJPEG format then see #MJPEG for even better best quality still image extraction.
See the options -qscale:v or the alias -q:v for ffmpeg.
ffmpeg -i input.mp4 -qscale:v 1 frame-%04d.jpg # or the alias: ffmpeg -i input.mp4 -q:v 1 frame-%04d.jpg
Note that some people say to use 1 for the quality value, but others say to use 2. I found that 1 seemed to work.
ffmpeg -i input.mp4 -qscale:v 1 frame-%04d.jpg
Create video from a sequence of images
If there is no format to the images you want to convert then you must use the pattern_type option:
ffmpeg -pattern_type glob -i "image-*.jpg" video_output.mov
This sets the framerate and format options.
ffmpeg -framerate 10 -pattern_type glob -i "*.jpg" -c:v libx264 -pix_fmt yuv420p -crf 23 video_output.mp4
Create slideshow video that is most compatible across many devices -- it will play back under QuickTime
This will create a video that displays a slideshow of all the JPEG images in the current directory. The specified framerate will show each slide for 4 seconds.
ffmpeg -framerate 0.25 -pattern_type glob -i "*.jpg" video_output.mp4
video with timecode
Playback with H:M:S time format starting at 0.
ffplay -i video_input.mp4 -vf "drawtext='x=10:y=10:fontcolor=white:fontsize=32:text=%{pts\:gmtime\:0\:%T}'"
Re-encode video with hard embedded time code showing seconds with decimals starting at 0. Notice that -vf becomes -filter_complex and [0:v] (with a space) is prefixed to the expression.
ffmpeg -i video_input.mp4 -filter_complex "[0:v] drawtext='x=20:y=40:fontcolor=white:fontsize=32:text=%{pts}'" video_output.mp4
Blank video with black screen (320x240 10 FPS), keep audio, embed time code. Notice that the -filter_complex uses [1:v], which is created by the lavfi filter that precedes it.
ffmpeg -i video_input.mp4 -f lavfi -i color=c=black:s=320x240:r=10 -map 1 -map 0:a -shortest -filter_complex "[1:v] drawtext='x=20:y=40:fontcolor=white:fontsize=32:text=%{pts}'" video_output.mp4
Blank video with audio and multiple lines of text including multiple formats of timecode output.
ffmpeg -i video_input.mp4 -f lavfi -i color=c=black:s=320x240:r=10 -map 1 -map 0:a -shortest -filter_complex "[1:v] drawtext='x=10:y=40:fontcolor=white:fontsize=32:text=%{pts\:hms}', drawtext='x=134:y=80:fontcolor=white:fontsize=18:text=%{pts}', drawtext='x=22:y=110:fontcolor=white:fontsize=24:text=AUDIO 2020-03-25'" video_output.mp4