web-dev-qa-db-ja.com

xvidでエンコードされたaviファイルの一部をffmpegでどのようにつなぎ合わせますか? (他のファイルには問題ありません)

次のコマンドを使用しています。これは、xvidでエンコードされているように見えるものを除いて、ほとんどのファイルで機能します。

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

したがって、これは基本的に、1分マークから開始して30秒のビデオ+オーディオをスプライスアウトする必要があります。

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
user11955

「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
quack quixote

あなたの問題はこの記事と同じであるかどうか疑問に思います:
iPodまたはiPhone用のビデオファイルを変換する

おしゃれな新しいApple iPodVideoまたはApple iPhoneを使用したいが、ビデオを変換して再生する方法がわからない。

Ubuntu 9.10(Karmic Koala)には、ライセンスの問題のため、libfaacをサポートしていないバージョンのffmpegが付属しています。これは、ffmpegを自分でコンパイルする必要があることを意味します。このガイドでは、その方法について説明します。

この記事では、ffmpegを手動でコンパイルする方法、またはサポートするlibfaacを含む変​​更されたffmpegパッケージを作成する方法を段階的に説明しています Advanced Audio Coding (AAC)。

1
harrymc