dongquweng5152
dongquweng5152
2011-04-17 10:26

ffmpeg编码像视频预览一样

已采纳

I want to mimic the bing video preview functionality, with a thumbnail preview, then onMouseOver, load and play a video file. I plan to use VideoJS (html5 + flash) for the video playback. I need to use ffmpeg to produce these video files.

How can I create a mp4 preview with video only, which contains 1s of every other minute of the full clip, and shrink resolution to a fixed width (maintaining aspect ratio, preferably with zoom crop) using php + ffmpeg command line?

I'm assuming it can be done somehow along the lines of cutting 1s clips, then combine the smaller clips, and re-encode for a final rescaled output.

*Edit: Using ffmpeg is a design requirement. Pulling out 1s clips, should be fairly easy, but combining them seems to be somewhat complex with ffmpeg. I don't want cycling thumbnails, I want a video preview which contains a number of 1s clips. Eg. runtime in seconds: 100-101, and 200-201 combined in a heavily compressed clip. I am asking for a command line example of how to do this in an efficient manner.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • douza19870617 douza19870617 10年前

    I managed to do this now, by pulling out 1s clips, and convert them to mpeg. Then combine these mpeg files, by appending them into a single file. Then convert til mpeg file to mp4

    点赞 评论 复制链接分享
  • dtcmadj31951 dtcmadj31951 10年前

    I've an approach and i think that will work...

    Using ffmpeg you can get thumbnails of the video at specific intervals.

    So i will take about 5 to 10 thumbnails in the interval of 2 seconds and store them on my server with a unique name that identifies the video.

    So when I mouse over i call the function which will load these images sequentially(which makes the user feel the video is fast forwarding..)

    But in this format, we can't play sound when we mouse over ..

    I don't know whether this is good but i know this will work..

    Update:

    I think it will be better to create a video using ffmpeg using the extracted images and play them while we mouse over.. This will be quite faster than loading a sequence of images. ffmpeg can be used to create a new video from a list of images.

    点赞 评论 复制链接分享
  • dongshaidu2456 dongshaidu2456 10年前

    One way to do this in Windows (or wine) would be to use an Avisynth script. This would allow you to do all your desired transformations in one step. It's been a little while since I've used Avisynth but a very simple script might look like:

    DirectShowSource("C:\file\to\encode.avi", audio=false) # Or another source filter
    SelectRangeEvery(1440, 24) # outputs 24 frames every 1440 frames
    BilinearResize(320,240) # resize to your desired resolution
    Crop(...) # crop to reach desired aspect ratio
    

    This could be extended to support various framerates and aspect ratios instead of hardcoding everything. The resulting .avs file can then be used as an input file to ffmpeg, provided that it has been compiled with --enable-avisynth.

    点赞 评论 复制链接分享