2012-05-31 9 views
0

Я работаю с ffmpeg, чтобы конвертировать видео в FLV-файлы по php. Те тесты, которые я выполнил, не работают для конверсий mp4. У меня 13-секундное видео (видео будет ограничено до 15 секунд), когда он будет загружен, и я проверю «продолжительность» видео, которое выйдет за 300 секунд. Я попытался изменить вокруг, как я обрабатываю видео:ffmpeg не дает правильной длительности mp4

// original 
exec('ffmpeg -i <path>/<filename> 2>&1', $output); 

// current 
exec('ffmpeg -i <path>/<filename> 2>&1 | grep "Duration" | cut -d \' \' -f 4 | sed s/,//', $output); 

оригинальный метод не работает для файлов миль на галлон, но второй делает, но ни дает мне «правильную» продолжительность mp4 видео. Есть ли «специальный» способ обработки файлов mp4?

Благодарим вас за внимание и помощь.

Update:

Командная строка

ffmpeg -i ./custom_scraping.mp4 2>&1 | grep "Duration" | cut -d ' ' -f 4 | sed s/,// 
00:05:15.84 

Полный выход (отформатирован как можно лучше)

ffmpeg -i ./custom_scraping.mp4 2>&1 
FFmpeg version 0.6.5, Copyright (c) 2000-2010 the FFmpeg developers 
built on Jan 29 2012 23:55:02 with gcc 4.1.2 20080704 (Red Hat 4.1.2-51) 
configuration: --prefix=/usr --libdir=/usr/lib64 --shlibdir=/usr/lib64 --mandir=/usr/share/man --incdir=/usr/include --disable-avisynth --extra-cflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' --enable-avfilter --enable-avfilter-lavf --enable-libdirac --enable-libfaac --enable-libfaad --enable-libfaadbin --enable-libgsm --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-gpl --enable-nonfree --enable-postproc --enable-pthreads --enable-shared --enable-swscale --enable-vdpau --enable-version3 --enable-x11grab 
libavutil  50.15. 1/50.15. 1 
libavcodec 52.72. 2/52.72. 2 
libavformat 52.64. 2/52.64. 2 
libavdevice 52. 2. 0/52. 2. 0 
libavfilter 1.19. 0/1.19. 0 
libswscale  0.11. 0/0.11. 0 
libpostproc 51. 2. 0/51. 2. 0 

Seems stream 1 codec frame rate differs from container frame rate: 5994.00 (5994/1) -> 29.97 (2997/100) 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from './custom_scraping.mp4': 
Metadata: 
major_brand  : mp42 
minor_version : 1 
compatible_brands: mp42avc1 
Duration: 00:05:15.84, start: 0.000000, bitrate: 36 kb/s 
Stream #0.0(eng): Audio: aac, 44100 Hz, stereo, s16, 2 kb/s 
Stream #0.1(eng): Video: h264, yuv420p, 480x360, 36 kb/s, 1.04 fps, 29.97 tbr, 2997 tbn, 5994 tbc 

По крайней мере, один выходной файл должен быть указан

Дон Не знаю, помогает ли это, sting файла в Linux: 1432471 31 мая 13:33 custom_scraping.mp4

Сообщите мне, если что-то еще необходимо.

+0

Сначала отключите хмель PHP и используйте ffmpeg напрямую. Как только он будет работать в ffmpeg, попробуйте его в PHP. Также включите фактические примеры и выходы консоли, чтобы мы могли легко их дублировать и точно видеть, в чем проблема. – LordNeckbeard

+0

ffmpeg жалуется на некоторую несогласованность. Правильно ли кодируется файл и воспроизводится ли он так, как ожидалось? –

+0

Я играю файл в vlc и quicktime, и он отлично играет. Это общее видео, которое я снял с Интернета для тестирования. – oach

ответ

0

Использование недавно FFmpeg обеспечит правильную длительность:

$ ffmpeg -i custom_scraping.mp4 
ffmpeg version N-41105-g7a2ae76 Copyright (c) 2000-2012 the FFmpeg developers 
    built on May 29 2012 21:41:27 with gcc 4.7.0 20120505 (prerelease) 
    configuration: --prefix=/usr --enable-gpl --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libutvideo --enable-libvorbis --enable-libx264 --enable-nonfree --enable-x11grab 
    libavutil  51. 55.100/51. 55.100 
    libavcodec  54. 23.100/54. 23.100 
    libavformat 54. 6.101/54. 6.101 
    libavdevice 54. 0.100/54. 0.100 
    libavfilter  2. 77.100/2. 77.100 
    libswscale  2. 1.100/2. 1.100 
    libswresample 0. 15.100/0. 15.100 
    libpostproc 52. 0.100/52. 0.100 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'custom_scraping.mp4': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 1 
    compatible_brands: mp42avc1 
    creation_time : 2011-08-17 21:14:16 
    Duration: 00:00:11.11, start: 0.000000, bitrate: 1031 kb/s 
    Stream #0:0(eng): Audio: aac (mp4a/0x6134706D), 44100 Hz, stereo, s16, 2 kb/s 
    Metadata: 
     creation_time : 2011-08-17 21:14:16 
     handler_name : Apple Sound Media Handler 
    Stream #0:1(eng): Video: h264 (Main) (avc1/0x31637661), yuv420p, 480x360, 36 kb/s, 1.04 fps, 29.97 tbr, 2997 tbn, 5994 tbc 
    Metadata: 
     creation_time : 2011-08-17 21:14:16 
     handler_name : Apple Video Media Handler 
At least one output file must be specified 

Когда вы сталкиваетесь неожиданное поведение, первое, что нужно сделать, это попробовать самую последнюю FFmpeg. В противном случае вы, возможно, будете тратить свое время на борьбу с ошибкой, которая уже решена. Разработка FFmpeg очень активна. Если ошибка возникла в недавнем FFmpeg, сообщите об этом на bug tracker.

Получение FFmpeg от Git обычно предпочтительнее для обычных пользователей. Релизы больше нацелены на дистрибутивы, которые «требуют» так называемого релиза.

В FFmpeg Wiki есть сборники для CentOS (и, следовательно, Red Hat) и Ubuntu.

Смежные вопросы