題 如何使用ffmpeg拼接出xvid編碼的avi文件的一部分? (其他文件沒問題)


我使用以下命令,它適用於大多數文件,除了似乎是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分鐘開始。

它在00:01:00標記處進行START編碼,但由於某種原因它一直到文件的末尾,忽略了我只需要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
2018-06-05 02:57


起源


你在Windows上嗎?如果是這樣,我可以推薦另一種方法。 (哎呀,不,你不是。我看到上面的/ usr / bin。)抱歉。 :( - Pretzel
你可以在某個地方發布AVI,以便我可以重現並修復你的錯誤嗎? - whitequark


答案:


我認為你的“轉換為MP4”操作只是一個容器更改,而不是對A / V數據流的完全重新編碼。因此,FFmpeg可能會被那些AVI容器中破碎的東西掛斷。輸出中的這一行可能支持這一點:

[mpeg4 @ 0x17cf770]檢測到無效且效率低下的vfw-avi打包B幀

您可以嘗試創建一個新的AVI容器 - 讓FFmpeg複製整個文件,例如:

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

這應該創建一個新的AVI容器並複制數據流。然後再次嘗試你的命令。如果它有效,你就會破壞AVI(或者可能是一個FFmpeg錯誤) - 無論哪種方式,你都可以把你所有的視頻放到新的AVI容器中並以這種方式完成。

如果這不起作用,您可能會進一步了解損壞的XviD並查看它們的共同點。


2
2018-06-05 03:14



不,它完全重新編碼為iPhone兼容格式。文件本身很好。它發生在每個xvid編碼文件中(到目前為止我嘗試過3次)。嘗試根據上面的代碼創建一個新文件,沒有效果,並且該錯誤仍然存在。 - user11955
嘗試與#ffmpeg @ FreeNode中的一些人交談。 - Nitrodist
為我工作!謝謝! - teslasimus


我想知道你的問題是否和本文中的相同:
轉換iPod或iPhone的任何視頻文件

你想用你喜歡的新Apple   iPod視頻或Apple iPhone,但你   不知道如何轉換視頻所以它   會發揮。

Ubuntu 9.10(Karmic Koala)附帶   沒有libfaac的ffmpeg版本   因許可問題而獲得支持。   這意味著您需要編譯   ffmpeg自己。本指南解釋   怎麼樣。

本文逐步解釋瞭如何手動編譯ffmpeg或創建一個修改過的ffmpeg包,其中包括libfaac來支持 高級音頻編碼 (AAC)。


1
2018-06-13 19:28