4

Я использую следующую команду, которая работает для большинства файлов, за исключением того, что, кажется, закодированные xvid

/usr/bin/ffmpeg -sameq -i file.avi -ss 00:01:00 -t 00:00:30 -ac 2 -r 25 -copyts output.avi

Так что это должно в основном склеить 30 секунд видео + аудио, начиная с отметки в 1 минуту.

Он выполняет START-кодирование с отметкой 00:01:00, но почему-то доходит до конца файла, игнорируя то, что мне нужно всего 30 секунд.

Вывод выглядит так.

FFmpeg version git-ecc4bdd, Copyright (c) 2000-2010 the FFmpeg developers
  built on May 31 2010 04:52:24 with gcc 4.4.3 20100127 (Red Hat 4.4.3-4)
  configuration: --enable-libx264 --enable-libxvid --enable-libmp3lame --enable-libopenjpeg --enable-libfaac --enable-libvorbis --enable-gpl --enable-nonfree --enable-libxvid --enable-pthreads --enable-libfaad --extra-cflags=-fPIC --enable-postproc --enable-libtheora --enable-libvorbis --enable-shared
  libavutil     50.15. 2 / 50.15. 2
  libavcodec    52.67. 0 / 52.67. 0
  libavformat   52.62. 0 / 52.62. 0
  libavdevice   52. 2. 0 / 52. 2. 0
  libavfilter    1.20. 0 /  1.20. 0
  libswscale     0.10. 0 /  0.10. 0
  libpostproc   51. 2. 0 / 51. 2. 0
[mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected
Input #0, avi, from 'file.avi':
  Metadata:
    ISFT            : VirtualDubMod 1.5.10.2 (build 2540/release)
  Duration: 00:02:00.00, start: 0.000000, bitrate: 1587 kb/s
    Stream #0.0: Video: mpeg4, yuv420p, 672x368 [PAR 1:1 DAR 42:23], 25 tbr, 25 tbn, 25 tbc
    Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 448 kb/s
File 'lol6.avi' already exists. Overwrite ? [y/N] y
Output #0, avi, to 'lol6.avi':
  Metadata:
    ISFT            : Lavf52.62.0
    Stream #0.0: Video: mpeg4, yuv420p, 672x368 [PAR 1:1 DAR 42:23], q=2-31, 200 kb/s, 25 tbn, 25 tbc
    Stream #0.1: Audio: mp2, 48000 Hz, 2 channels, s16, 64 kb/s
Stream mapping:
  Stream #0.0 -> #0.0
  Stream #0.1 -> #0.1
Press [q] to stop encoding
[mpeg4 @ 0x17cf770]Invalid and inefficient vfw-avi packed B frames detected
[buffer @ 0x184b610]Buffering several frames is not supported. Please consume all available frames before adding a new one.
frame= 1501 fps=104 q=0.0 Lsize=   15612kB time=30.02 bitrate=4259.7kbits/s    ts/s
video:15303kB audio:235kB global headers:0kB muxing overhead 0.482620%

если я, например, преобразую этот файл в mp4, а затем выполню то же действие, он отлично работает.

2 ответа2

2

Я предполагаю, что ваша операция "конвертировать в MP4" - это просто изменение контейнера, а не полное перекодирование потоков данных A/V. Так что, возможно, FFmpeg зацикливается на чем-то сломанном в этих контейнерах AVI. Эта строка в вашем выводе может поддерживать это:

[mpeg4 @ 0x17cf770] Обнаружены неверные и неэффективные упакованные B-кадры vfw-avi

Вы можете попробовать создать новый контейнер AVI - пусть FFmpeg скопирует весь файл, например, с помощью:

ffmpeg -i input.avi -vcodec copy -acodec copy output.avi

Это должно создать новый контейнер AVI и скопировать потоки данных. Затем попробуйте свою команду снова. Если это работает, у вас сломаны AVI (или, возможно, ошибка FFmpeg) - в любом случае, вы можете поместить все свои видео в новые контейнеры AVI и сделать это таким образом.

Если это не сработает, вы можете заглянуть в разбитые XviD и посмотреть, что у них общего.

1

Интересно, ваша проблема такая же, как в этой статье:
Конвертируйте любой видеофайл для iPod или iPhone

Вы хотите использовать новый модный Apple iPod Video или Apple iPhone, но не знаете, как конвертировать видео, чтобы оно воспроизводилось.

Ubuntu 9.10 (Karmic Koala) поставляется с версией ffmpeg без поддержки libfaac из-за проблем с лицензированием. Это означает, что вам нужно будет скомпилировать ffmpeg самостоятельно. Это руководство объясняет как.

В статье пошагово объясняется, как скомпилировать ffmpeg вручную или создать модифицированный пакет ffmpeg, который включает libfaac для поддержки Advanced Audio Coding (AAC).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .