i am trying to convert some different video formats to flv using ffmpeg. But it seems that only some videos go through.

ffmpeg -i /var/www/tmp/91640.avi -ar 22050 -ab 32 -f flv /var/www/videos/91640.flv

here is some debug info:

Seems stream 0 codec frame rate differs from container frame rate: 23.98 (65535/2733) -> 23.98 (5000000/208541)
Input #0, avi, from '/var/www/tmp/91640.avi':
  Duration: 00:01:12.82, start: 0.000000, bitrate: 5022 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 1280x528 [PAR 1:1 DAR 80:33], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s
Output #0, flv, to '/var/www/videos/91640.flv':
    Stream #0.0: Video: flv, yuv420p, 1280x528 [PAR 1:1 DAR 80:33], q=2-31, 200 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: adpcm_swf, 22050 Hz, 5.1, s16, 0 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Error while opening codec for output stream #0.1 - maybe incorrect parameters such as bit_rate, rate, width or height

also, if i try to grab one frame ad convert it to jpeg i get an error as well

ffmpeg -i /var/www/tmp/91640.avi -an -ss 00:00:03 -t 00:00:01 -r 1 -y /var/www/videos/91640.jpg

debug info

...
[mpeg4 @ 0x1d7d810]Invalid and inefficient vfw-avi packed B frames detected
av_interleaved_write_frame(): I/O error occurred
Usually that means that input file is truncated and/or corrupted.

im thinking that the image fails because the video conversion failed in the first place, not sure though

any ideas what goes wrong?

有帮助吗?

解决方案

Bits, not kbits

From your console output:

WARNING: The bitrate parameter is set too low. It takes bits/s as argument, not kbits/s

Use 32k, not just 32.

Only stereo or mono is supported

The encoder adpcm_swf ony supports mono or stereo, so add -ac 2 as an output option. The console output would have suggested this if you were using a recent ffmpeg build.

Use -vframes 1 for single image outputs

Instead of -t 00:00:01 -r 1 use -vframes 1.

A better encoder

Instead of using the encoders flv and adpcm_swf, I recommend libx264 and libmp3lame:

ffmpeg -i input -vcodec libx264 -preset medium -crf 23 -acodec libmp3lame -ar 44100 -q:a 5 output.flv
  • -preset – Controls the encoding speed to compression ratio. Use the slowest preset you have patience for: ultrafast,superfast, veryfast, faster, fast, medium, slow, slower, veryslow.

  • -crf – Constant Rate Factor. A lower value is a higher quality. Range is 0-51 for this encoder. 0 is lossless, 18 is roughly "visually lossless", 23 is default, and 51 is worst quality. Use the highest value that still gives an acceptable quality.

  • -q:a – Audio quality for libmp3lame. Range is 0-9 for this encoder. A lower value is a higher quality.

Also see

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top