Запись видео с помощью ffmpeg - PullRequest
2 голосов
/ 07 ноября 2011

Я задал другой вопрос (/4625736/k-sozhaleniy-eto-video-ne-mozhet-byt-vosproizvedeno-potokovoe-mp4-na-android#4625749) о воспроизведении видео в Android с использованием VideoView. Очевидно, что проблема связана с тем, как мое видео кодируется, так как другое видео (512Kb mp4 из Интернета) воспроизводится правильно с использованием моего кодаПоскольку видео загружаются моими конечными пользователями на веб-сайт, я не имею никакого контроля над самими видео, однако у меня есть контроль над их перекодированием. Я перекодирую их, используя ffmpeg, чтобы привести их кстандартный формат MP4 (H.264 + AAC) и масштабируйте их до одинакового размера (320x240).

Вот информация ffmpeg о видео, которое не будет воспроизводиться:

sh-3.2$ ffmpeg -i video.bad.mp4
FFmpeg version SVN-r25679-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
  built on Nov  5 2010 09:34:37 with gcc 4.3.2
  configuration: --prefix=/usr --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libgsm --enable-x11grab --enable-libx264 --enable-libtheora --extra-cflags=-Wall --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --disable-altivec --disable-armv5te --disable-armv6 --disable-vis --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
  libavutil     50.32. 6 / 50.32. 6
  libavcore      0.12. 0 /  0.12. 0
  libavcodec    52.94. 3 / 52.94. 3
  libavformat   52.84. 0 / 52.84. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.56. 0 /  1.56. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.bad.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf52.84.0
  Duration: 00:00:45.93, start: 0.000000, bitrate: 591 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 320x240 [PAR 1:1 DAR 4:3], 535 kb/s, 15 fps, 15 tbr, 15 tbn, 30 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 51 kb/s

Ивот информация ffmpeg о видео, которое воспроизводится правильно:

sh-3.2$ ffmpeg -i video.mp4
FFmpeg version SVN-r25679-snapshot, Copyright (c) 2000-2010 the FFmpeg developers
  built on Nov  5 2010 09:34:37 with gcc 4.3.2
  configuration: --prefix=/usr --enable-shared --enable-libmp3lame --enable-gpl --enable-libvorbis --enable-pthreads --enable-libfaac --enable-libxvid --enable-postproc --enable-libgsm --enable-x11grab --enable-libx264 --enable-libtheora --extra-cflags=-Wall --enable-swscale --enable-libdc1394 --enable-nonfree --disable-mmx --disable-stripping --enable-avfilter --disable-altivec --disable-armv5te --disable-armv6 --disable-vis --enable-nonfree --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3
  libavutil     50.32. 6 / 50.32. 6
  libavcore      0.12. 0 /  0.12. 0
  libavcodec    52.94. 3 / 52.94. 3
  libavformat   52.84. 0 / 52.84. 0
  libavdevice   52. 2. 2 / 52. 2. 2
  libavfilter    1.56. 0 /  1.56. 0
  libswscale     0.12. 0 /  0.12. 0
  libpostproc   51. 2. 0 / 51. 2. 0
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'video.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: mp41
    title           : crazytown - http://www.archive.org/details/Cartoon-Crazytown
    encoder         : Lavf51.10.0
  Duration: 00:07:50.40, start: 0.000000, bitrate: 578 kb/s
    Stream #0.0(und): Video: h264, yuv420p, 320x240, 510 kb/s, 25 fps, 25 tbr, 25 tbn, 50 tbc
    Stream #0.1(und): Audio: aac, 48000 Hz, stereo, s16, 63 kb/s

У меня есть два вопроса, на самом деле: во-первых, какие из деталей в моем "плохом" видео не нравятся Android? И, во-вторых, чтопараметры, которые я должен использовать с ffmpeg для перекодирования моих видео? В настоящее время я использую это:

ffmpeg -i $input_video_file -y -s 320x240 -vcodec libx264 -vpre medium -acodec libfaac -b 510K -ar 48000 -aspect 4:3 $tmpfile.mp4
qt-faststart $tmpfile.mp4 $output_video_file.mp4

Но это производит видео, которое не воспроизводится на Android. Любая помощь очень ценится.

1 Ответ

6 голосов
/ 08 ноября 2011

Во-первых, вашей версии ffmpeg больше года.С прошлого года многое улучшилось с ffmpeg и H.264.Попробуйте обновить хотя бы до ffmpeg-0.7.

Трудно сказать точно, в чем проблема, потому что ffmpeg не отображает все параметры, переданные в x264 для кодирования H.264.Попробуйте увеличить многословность вывода ffmpeg (используя -v 1 или -v 2 где-то в начале команды ffmpeg).Но, исходя из моего опыта использования ffmpeg для перекодирования видео для Android, я предполагаю, что вы не используете базовый профиль H.264 (см. статью в Википедии о H.264 , если вам интересно).Попробуйте добавить -profile baseline, если у вас есть ffmpeg-0.7 или новее.

Если вы не можете обновить свой ffmpeg по тем или иным причинам, вы можете указать базовый профиль, используя опцию -vpre baseline после того, как вы укажете-vpre medium.Если по какой-либо причине вы получаете сообщение об ошибке, пытаясь использовать предустановку базовой линии, вы можете вручную принудительно настроить параметры базовой линии, указав -coder 0 -bf 0 -flags2 -wpred-dct8x8 в командной строке после -vpre medium.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...