Как склеить часть файла AVI, закодированного в xvid, с помощью ffmpeg? (нет проблем с другими файлами)

2547
user11955

Я использую следующую команду, которая работает для большинства файлов, за исключением того, что, кажется, закодированные 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, а затем выполню то же действие, он отлично работает.

4
Вы на Windows? Если это так, я могу порекомендовать другой способ сделать это. (Ой, нет, это не так. Я вижу / usr / bin выше.) Извините. :( Pretzel 13 лет назад 0
Можете ли вы опубликовать этот AVI где-нибудь, чтобы я мог воспроизвести и исправить вашу ошибку? whitequark 13 лет назад 0

2 ответа на вопрос

2
quack quixote

Я предполагаю, что ваша операция «конвертировать в 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 и посмотреть, что у них общего.

Нет, это полное перекодирование в формат, совместимый с iPhone. И сам файл в порядке. Это происходит с каждым закодированным xvid файлом (я пробовал 3 до сих пор). Попытка создания нового файла на основе кода выше, безрезультатно, и эта ошибка все еще там. user11955 13 лет назад 0
Попробуйте поговорить с некоторыми людьми в #ffmpeg @ FreeNode. Nitrodist 13 лет назад 0
работал на меня! поблагодарить! teslasimus 11 лет назад 0
1
harrymc

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

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

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

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

Похожие вопросы