ffmpeg PTSを取り除く方法は値エラーがありません


15

AVIファイルをMP4ファイルに変換しようとしています。ビデオストリームはXVIDですが、オーディオストリームはMP3です。

問題は、生成されたMP4ファイルがMacのQuickTime Playerで再生できないことです。VLCで再生されます。契約を破るわけではありませんが、このような問題をどのように引き起こすかを知りたいです。

コマンドとその出力は次のとおりです。

$ ffmpeg -i 103.avi -codec copy -f mp4 103.mp4

ffmpeg version N-60163-g78a9f18 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan 25 2014 14:03:47 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: 
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.100 / 55. 49.100
  libavformat    55. 26.100 / 55. 26.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  1.101 /  4.  1.101
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
Input #0, avi, from '103.avi':
  Metadata:
    encoder         : Lavf55.26.100
  Duration: 00:49:36.43, start: 0.000000, bitrate: 986 kb/s
    Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 512x368 [SAR 1:1 DAR 32:23], 23.98 tbr, 23.98 tbn, 23.98 tbc
    Stream #0:1: Audio: mp3 (U[0][0][0] / 0x0055), 48000 Hz, stereo, s16p, 121 kb/s
Output #0, mp4, to '103.mp4':
  Metadata:
    encoder         : Lavf55.26.100
    Stream #0:0: Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 512x368 [SAR 1:1 DAR 32:23], q=2-31, 11988 tbn, 23.98 tbc
    Stream #0:1: Audio: mp3 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 121 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
[mp4 @ 0x7fe5ca01fa00] pts has no value
    Last message repeated 1555 times
[mp4 @ 0x7fe5ca01fa00] pts has no value9kB time=00:01:17.70 bitrate=1458.0kbits/s    
    Last message repeated 1041 times
[mp4 @ 0x7fe5ca01fa00] pts has no value49kB time=00:02:08.42 bitrate=1661.6kbits/s    
    Last message repeated 1906 times
[mp4 @ 0x7fe5ca01fa00] pts has no value53kB time=00:03:40.39 bitrate=1537.1kbits/s    
    Last message repeated 2136 times
[mp4 @ 0x7fe5ca01fa00] pts has no value93kB time=00:05:35.80 bitrate=1307.4kbits/s    
    Last message repeated 3519 times
[mp4 @ 0x7fe5ca01fa00] pts has no value32kB time=00:08:32.18 bitrate=1150.5kbits/s    
    Last message repeated 2813 times
[mp4 @ 0x7fe5ca01fa00] pts has no value88kB time=00:11:18.01 bitrate=1090.9kbits/s    
    Last message repeated 3057 times
[mp4 @ 0x7fe5ca01fa00] pts has no value39kB time=00:14:00.42 bitrate=1028.7kbits/s    
    Last message repeated 3731 times
[mp4 @ 0x7fe5ca01fa00] pts has no value11kB time=00:16:57.72 bitrate= 991.0kbits/s    
    Last message repeated 2658 times
[mp4 @ 0x7fe5ca01fa00] pts has no value76kB time=00:19:25.70 bitrate= 978.1kbits/s    
    Last message repeated 2167 times
[mp4 @ 0x7fe5ca01fa00] pts has no value70kB time=00:21:17.11 bitrate= 990.8kbits/s    
    Last message repeated 3663 times
[mp4 @ 0x7fe5ca01fa00] pts has no value20kB time=00:24:42.06 bitrate= 938.1kbits/s    
    Last message repeated 2335 times
[mp4 @ 0x7fe5ca01fa00] pts has no value79kB time=00:26:53.90 bitrate= 950.6kbits/s    
    Last message repeated 4153 times
[mp4 @ 0x7fe5ca01fa00] pts has no value06kB time=00:30:59.94 bitrate= 895.4kbits/s    
    Last message repeated 3168 times
[mp4 @ 0x7fe5ca01fa00] pts has no value87kB time=00:33:35.43 bitrate= 888.5kbits/s    
    Last message repeated 1565 times
[mp4 @ 0x7fe5ca01fa00] pts has no value02kB time=00:34:56.47 bitrate= 914.0kbits/s    
    Last message repeated 2792 times
[mp4 @ 0x7fe5ca01fa00] pts has no value10kB time=00:37:34.42 bitrate= 909.6kbits/s    
    Last message repeated 2503 times
[mp4 @ 0x7fe5ca01fa00] pts has no value49kB time=00:39:48.76 bitrate= 916.2kbits/s    
    Last message repeated 1714 times
[mp4 @ 0x7fe5ca01fa00] pts has no value70kB time=00:41:16.64 bitrate= 928.7kbits/s    
    Last message repeated 2060 times
[mp4 @ 0x7fe5ca01fa00] pts has no value79kB time=00:43:04.79 bitrate= 935.2kbits/s    
    Last message repeated 1349 times
[mp4 @ 0x7fe5ca01fa00] pts has no value46kB time=00:44:06.57 bitrate= 951.6kbits/s    
    Last message repeated 2354 times
[mp4 @ 0x7fe5ca01fa00] pts has no value67kB time=00:45:56.33 bitrate= 967.9kbits/s    
    Last message repeated 2668 times
[mp4 @ 0x7fe5ca01fa00] pts has no value50kB time=00:48:14.72 bitrate= 964.9kbits/s    
    Last message repeated 1655 times
frame=71363 fps=5738 q=-1.0 Lsize=  355528kB time=00:49:36.43 bitrate= 978.5kbits/s    
video:309630kB audio:44196kB subtitle:0 global headers:0kB muxing overhead 0.481011%

その後、再びmp4をコピーすると、次の結果が得られます。

$ ffmpeg -i 103.mp4 -codec copy -f mp4 103-new.mp4

ffmpeg version N-60163-g78a9f18 Copyright (c) 2000-2014 the FFmpeg developers
  built on Jan 25 2014 14:03:47 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
  configuration: 
  libavutil      52. 63.100 / 52. 63.100
  libavcodec     55. 49.100 / 55. 49.100
  libavformat    55. 26.100 / 55. 26.100
  libavdevice    55.  5.102 / 55.  5.102
  libavfilter     4.  1.101 /  4.  1.101
  libswscale      2.  5.101 /  2.  5.101
  libswresample   0. 17.104 /  0. 17.104
[mpeg4 @ 0x7fcddb018000] Video uses a non-standard and wasteful way to store B-frames ('packed B-frames'). Consider using a tool like VirtualDub or avidemux to fix it.
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '103.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf55.26.100
  Duration: 00:49:36.44, start: 0.000000, bitrate: 978 kb/s
    Stream #0:0(und): Video: mpeg4 (Advanced Simple Profile) (mp4v / 0x7634706D), yuv420p, 512x368 [SAR 1:1 DAR 32:23], 852 kb/s, 23.98 fps, 23.98 tbr, 11988 tbn, 23.98 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (mp4a / 0x6134706D), 48000 Hz, stereo, s16p, 121 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Output #0, mp4, to '103-new.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2mp41
    encoder         : Lavf55.26.100
    Stream #0:0(und): Video: mpeg4 ( [0][0][0] / 0x0020), yuv420p, 512x368 [SAR 1:1 DAR 32:23], q=2-31, 852 kb/s, 23.98 fps, 11988 tbn, 11988 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: mp3 (i[0][0][0] / 0x0069), 48000 Hz, stereo, 121 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=71363 fps=5505 q=-1.0 Lsize=  355528kB time=00:49:36.43 bitrate= 978.5kbits/s    
video:309567kB audio:44196kB subtitle:0 global headers:0kB muxing overhead 0.498835%

回答:


25

まず、このエラーが存在する理由の背景。AVIは、可変フレームレートビデオをサポートしていません。そのため、ファイルの先頭のどこかにフレームレートが記録されます。mp4は可変フレームレートをサポートしているため、各フレームの長さがわかっている必要があります。ffmpegでは、固定フレームレートビデオのPTS生成は通常、デコーダーによって処理されます。ただし、を使用-codec copyすると、デコーダーをバイパスします。

解決策は指定しています-fflags +genpts(入力ファイルがで指定される前でなければなりません-i)。


背景の詳細​​と提案された解決策に感謝します。それは少し説明します。だから何かのようなffmpeg -i 103.avi -fflags +genpts -codec copy -f mp4 103.mp4?ここに投稿する前に実際に試してみましたが、私の場合は問題を解決しませんでした。avidemux2番目のログで示唆されているように、この問題を修正する方法を知っていますか?
ウマルファルークカワジャ14

5
@UmarFarooqKhawaja -fflags +genptsは前に行く必要があります-i
アンドリューマーシャル14

それはうまくいきましたが、結果のmp4ファイルはクイックタイムプレーヤーではシークできません..手がかり..?
トニートーマス14

1
私の謙虚な意見では、これはquicktimeプレーヤーが愚かなためです(より正確な説明は、おそらくインデックスが欠落しているということです)。
Wyatt8740 14

6
これは比較的古い質問/回答です。私はこの同じ問題の解決策を探してそれに出会いました。残念ながら、-fflags +genpts問題は解決しません。まったく同じエラーが発生します。OSXで実行していて、ソースからffmpegをコンパイルしました。
アレックスG

1

フレームレートをハードコーディングすると、この問題が解決されることがわかりました。

ffmpeg -r 25 -i test.h264 -codec copy testout25.mp4

(「ストリーム0のパケットにタイムスタンプが設定されていません」という警告がまだ表示されますが、結果のファイルはMacのQuicktime Playerでシーク可能です。)


宣言の-fflags +nofillin前にオプションを使用して-i、報告してください。
林正浩
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.