Usually, when FFmpeg converts a video the result does not have a thumbnail on my computer, only showing the default blank 'mp4' thumb. I am trying to make a command line that will convert videos and also give the output a thumbnail. I've found a lot of examples of how to pull an image from a video, but not how to in-line make sure it has a thumbnail.
The main function I want is for any type of video to be converted to hevc_nvenc/aac/mov_text.
Currently, my command looks like this:
ffmpeg -i "pth_in.mp4" -i "pth_in.mp4" -movflags faststart -map 0:v:0 -map 1:v -c:v hevc_nvenc -preset slow -map 1:a? -c:a aac -b:a 128k -map 1:s? -c:s ssa -filter:v:0 thumbnail,scale=360:-1,trim=end_frame=1 -c:v:0 mjpeg -disposition:0 attached_pic "pth_out.mp4"
where the double input and -filter:v:0 thumbnail,scale=360:-1,trim=end_frame=1 -c:v:0 mjpeg -disposition:0 attached_pic
is supposed to create the thumbnail. It DOES, however, as it stands this command will also cause the video's seek bar to malfunction, only working for about 3 seconds using MPC-HC and VLC, although the video will still play in its entirety.
Is there any way to do this in 'one' pass like I'm trying? Or do I have to split it up and do something else? Is there any other faux pas I'm making? Thanks for any help!
Try this:
ffmpeg -i pth_in.mp4 \
-movflags faststart \
-filter_complex [0:v]thumbnail,trim=end_frame=1,scale=360:-1[thumb] \
-map 0:v -c:v:0 hevc_nvenc -preset slow \
-map [thumb] -frames:v:1 1 -c:v:1 mjpeg -disposition:v:1 attached_pic \
-map 0:a? -c:a aac -b:a 128k \
-map 0:s? -c:s ssa
pth_out.mp4
]
)
Using a complex filtergraph, you need to specify the input video only once, and careful stream specification of video output options should let you get everything done in one shot.