1

私はvlcv4l2 をオフにして何かを記録していました (それが違いを生む場合に備えて)。TS コンテナーを使用する mpeg2 である、機能する最初の形式を選択しました。vlc によって自動的に選択されるように、ファイルの拡張子は .ts になりました。その後、ビデオ ファイルをビデオ エディターに入れようとしたところ、ビデオの長さは 19,884 時間で、約 6 分 (サイズは ~80 MB) であると表示されました。xineで再生しようとすると、デュレーションが正しく表示され(vlcは表示されません)、次を使用するとffprobe

[mpegts @ 0x9b2c0a0] max_analyze_duration 5000000 reached at 5000000
Input #0, mpegts, from 'loopbacktestcap.ts':   Duration: N/A, start:
17978.139456, bitrate: N/A   Program 1 
     Stream #0:0[0x44](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30
tbr, 90k tbn, 60 tbc
     Stream #0:1[0x46](): Video: mpeg2video ([2][0][0][0] / 0x0002), 90k tbn

特に次の行に注意してください。

   Duration: N/A, start: 17978.139456, bitrate: N/A   Program 1 

調べてみたところ、持続時間の不足はコンテナに関係しているようです。しかし、再エンコードするためにいくつかのことを試みました(-vcodec copy、mpeg2、libx264 を試しました...)、取得できるのは 1.1mb から 1.8mb の 20 秒のファイルだけです。

では、このファイルを再エンコードして再生時間が表示されるようにするにはどうすればよいでしょうか。また、最初の 20 秒だけではなく、完全な 6 分を取得できます。

4

2 に答える 2

2

このリンクを見つけたとき、最初のマイルストーンに達しました:マップ - ffmpeg -- 例 #8試してみることにしました:

ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts

以下を生成します。

[mpegts @ 0x9980f40] max_analyze_duration 90000000 reached at 90000000
Input #0, mpegts, from 'loopbacktestcap.ts':
  Duration: 00:16:00.96, start: 17978.139456, bitrate: 695 kb/s
  Program 1 
    Stream #0:0[0x44](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:1[0x45](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc
    Stream #0:2[0x46](): Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), yuv420p, 640x480 [SAR 1:1 DAR 4:3], 104857 kb/s, 30 fps, 30 tbr, 90k tbn, 60 tbc

2 番目のストリーム (技術的には 3 番目のストリーム) に関する追加のストリームと詳細情報だけでなく、正しい期間も表示されるようになったことに注意してください。それで私は走った:

ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts  -map 0 -c copy map0.mp4

これで 79451050 バイトのファイルmap0.mp4が生成されました。 my_mpeg2_file.tsは 83499636 です。これを vlc で再生しようとすると、再生時間が 9:12 と表示されますが、再生位置をジョグすると、さらに 2 つの vlc ウィンドウが表示されます。開くと、vlc が異常な動作を開始します。再生位置インジケータは進行し続けますが、ビデオ表示領域はハングします。これは単なるバグのある vlc かもしれませんが、この時点で立ち往生しています。ここで私が見逃しているものを誰かが見たら教えてください。

xineただし、新しいファイルを再生することはできません (元のファイルを再生すると、6 分の長さであることが示されます。実際には、ファイルを再生すると継続時間カウンターが少しおかしくなり、絶えず変化するため、わかりません)。

それで、私が試した次のコマンドは次のとおりです。

ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts  -map 0 -c libx264 map0x264.mp4

結果のファイル(好奇心のために43652975バイト)を再生しようとすると、vlcで同じ奇妙な動作が発生し、ストリームごとに新しいウィンドウが開き、「ターン」になったときにストリームを再生していることがわかりますそれぞれのウィンドウで、他のウィンドウの他の表示領域をフリーズします。それらを閉じようとすると、すべての再生が停止し、2 つの余分なウィンドウが閉じます。3 つのストリームすべてを同じファイルに保持するのはナンセンスだと思います。

成功!

次の試みは:

ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts  -map 0:0 -c copy map0_0.ts
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts  -map 0:1 -c copy map0_1.ts
ffmpeg -probesize 90M -analyzeduration 90M -i my_mpeg2_file.ts  -map 0:2 -c copy map0_2.ts

その結果、ファイルのサイズは次のようになりました。

 4912 map0_0.ts
 5372 map0_1.ts
74728 map0_2.ts

map0_0.tsは 20 秒の長さ、map0_1.tsは 1:12 の長さの静止画像、 map0_2.tsは 9:12 です。まさに私が欲しかったものです!そして、私のビデオ編集者はそれらを問​​題なく受け入れます。解決しました!

于 2016-11-23T11:05:09.647 に答える
0

ビデオ処理インフラストラクチャでトランスポート ストリーム (ts) ビデオ ファイルをサポートするという同様の課題がありました。以前は、2 パス エンコーディングでファイルffmpegに変換tsしていました。mp4

コマンドの完全な長さ:

パス 1:

ffmpeg -i camera.ts -filter:v scale=-1:480,setsar=1/1 -pix_fmt yuv420p -threads 0 -r 25/1 -force_fps -c:v libx264 -profile:v baseline -preset slow -x264opts level=3.0:ref=1 -b:v 1000k -maxrate 1000k -bufsize 2000k -s hd480 -c:a libfaac -ar 16000 -ac 2 -ab 128000 -pass 1 -movflags faststart -y video.mp4

パス 2:

ffmpeg -i camera.ts -filter:v scale=-1:480,setsar=1/1 -pix_fmt yuv420p -threads 0 -r 25/1 -force_fps -c:v libx264 -profile:v baseline -preset slow -x264opts level=3.0:ref=1 -b:v 1000k -maxrate 1000k -bufsize 2000k -s hd480 -c:a libfaac -ar 16000 -ac 2 -ab 128000 -pass 2 -movflags faststart -y video.mp4 >>& ffmpeg.log

ビデオをhd480(852x480)にダウンスケールし、libx264ベースライン レベル 3 でビデオ ストリームを比較的低いビットレートとオーディオで再エンコードlibfaacし、web 互換性のために moov アトムをファイルの先頭に移動します ( -movflags faststart)

フラグの詳細については、FFMpeg のドキュメントを参照してください。

セットアップで機能するこのコマンドを掘り下げたことに注意してください: IPカメラからのトランスポートストリーム記録の処理. おそらく、解像度とビットレートをニーズに合わせて具体的に調整する必要があります。これがあなたを正しい方向に向けることを願っています。

于 2016-11-14T09:27:24.590 に答える