2016-08-12 32 views
4

私はffmpegにかなり新しいですが、この問題を検索して数日後、私は完全にレンガの壁にぶつかりました。どんな助けもありがとう。drawtextフィルタを使用した後のffmpeg連結

私の使用例:クライアントは複数の地域の動画をアップロードしたいと考えています。各動画は同じ形式、1920x1080、mp4になります。各地域では、ビデオの最後に別の画像を数秒間追加します。この画像にはロゴ、追加情報、可変コードが含まれています。アップロードされた動画とともにこのコードが入力されます。イメージは同じままなので、すでにサーバー上に存在しています。 基本的に、私は入力ビデオ、画像のビデオ、および小さなコードを持っています。このコードを画像のビデオ(定義済みの位置)に追加する必要があります。次に、結果のビデオを入力ビデオの最後に追加する必要があります。それが完了したら、1920x1080と1024x576でビデオを出力するだけです。

私はいくつかのことを試しましたが、連結されたステップは常に操作されたビデオで失敗します。私の最初の試みで

試み1

、私は画像から動画を作成するためのffmpegを使用して、指定された領域にテキストを追加します。

ffmpeg -y -f lavfi -i image.png -r 30 -t 10 -pix_fmt yuv420p -map 0:v -vf drawtext="fontfile=HelveticaNeue.dfont: text='GLNS/TEST/1234b': fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=7: x=179: y=805" imageVideo.mp4 

このコマンドは、10秒の期間で、正しいサイズののMP4ビデオを作成し、正しい場所にテキスト「GLNS/TESTを/ 1234b」が追加されます。

次に、次のコマンドを使用して2つのビデオを連結します。両方とも同じ解像度とコーデックを持っています。

ffmpeg -f concat -safe 0 -i config.txt -vf scale=1920:1080 outputHD.mp4 -vf scale=1024:576 outputSD.mp4 

のconfig.txtには、次のものが含まれています

file my_input_file.mp4 
file ImageVideo.mp4 

この連結は、通常のビデオで動作します。

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f86dc924600] Auto-inserting h264_mp4toannexb bitstream filtereed=0.509x  
[aac @ 0x7f86dc019e00] Number of bands (31) exceeds limit (5). 
Error while decoding stream #0:1: Invalid data found when processing input 
[aac @ 0x7f86dc019e00] Number of bands (27) exceeds limit (8). 
Error while decoding stream #0:1: Invalid data found when processing input 
[h264 @ 0x7f86dd857200] Error splitting the input into NAL units. 
[h264 @ 0x7f86dd829400] Invalid NAL unit size. 
[h264 @ 0x7f86dd829400] Error splitting the input into NAL units. 
[aac @ 0x7f86dc019e00] Number of bands (10) exceeds limit (1). 
Error while decoding stream #0:1: Invalid data found when processing input 
[h264 @ 0x7f86dd816800] Invalid NAL unit size. 
[h264 @ 0x7f86dd816800] Error splitting the input into NAL units. 
[aac @ 0x7f86dc019e00] Number of bands (24) exceeds limit (1). 
Error while decoding stream #0:1: Invalid data found when processing input 

#this goes on for a few hundred lines 

結果の出力は、入力映像と同じであるが、所望の画像の映像が含まれていない:私はImageVideo.mp4(最初のコマンドで作成されたもの)でそれを使用する場合しかし、私はこのエラーログを取得します最後に。上記の試みがうまくいかなかったので

試み2

は、私がAfter EffectsでのAdobeとのイメージの私たちのデザイナーのメイクを聞かせて映像を連結してみました。このビデオは、H264コーデックで.mp4として保存されました。私が入力ビデオとこれを連結すると、正しい結果が得られます。しかし、できるだけ早く私は、このコマンドで指定された領域にコードを追加する:

ffmpeg -i new_image_video.mp4 -vf drawtext="fontfile=HelveticaNeue.dfont: text='GLNS/TEST/1234b': fontcolor=black: fontsize=20: box=1: boxcolor=white: boxborderw=7: x=179: y=805" -c:v libx264 imageVideo.mp4 

私はこのエラーを取得する:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7ff94c800000] Auto-inserting h264_mp4toannexb bitstream filter97x  
[h264 @ 0x7ff94b053800] top block unavailable for requested intra mode -1 
[h264 @ 0x7ff94b053800] error while decoding MB 0 0, bytestream 49526 
[h264 @ 0x7ff94b053e00] number of reference frames (1+3) exceeds max (3; probably corrupt input), discarding one 
[h264 @ 0x7ff94b053e00] chroma_log2_weight_denom 28 is out of range 
[h264 @ 0x7ff94b053e00] illegal long ref in memory management control operation 2 
[h264 @ 0x7ff94b053e00] cabac_init_idc 32 overflow 
[h264 @ 0x7ff94b053e00] decode_slice_header error 
[h264 @ 0x7ff94b053e00] no frame! 
[h264 @ 0x7ff94b053800] concealing 8160 DC, 8160 AC, 8160 MV errors in I frame 
[h264 @ 0x7ff94b072a00] reference overflow 22 > 15 or 0 > 15 
[h264 @ 0x7ff94b072a00] decode_slice_header error 
[h264 @ 0x7ff94b072a00] no frame! 
[h264 @ 0x7ff94b01a400] illegal modification_of_pic_nums_idc 20 
[h264 @ 0x7ff94b01a400] decode_slice_header error 
[h264 @ 0x7ff94b01a400] no frame! 
[h264 @ 0x7ff94b01aa00] illegal modification_of_pic_nums_idc 20 
[h264 @ 0x7ff94b01aa00] decode_slice_header error 
[h264 @ 0x7ff94b01aa00] no frame! 
Error while decoding stream #0:0: Invalid data found when processing input 
[h264 @ 0x7ff94b053800] deblocking_filter_idc 8 out of range 
[h264 @ 0x7ff94b053800] decode_slice_header error 
[h264 @ 0x7ff94b053800] no frame! 
Error while decoding stream #0:0: Invalid data found when processing input 
[h264 @ 0x7ff94b053e00] illegal memory management control operation 8 
[h264 @ 0x7ff94b053e00] co located POCs unavailable 
[h264 @ 0x7ff94b053e00] error while decoding MB 2 0, bytestream -35 
[h264 @ 0x7ff94b053e00] concealing 8160 DC, 8160 AC, 8160 MV errors in B frame 
[h264 @ 0x7ff94b072a00] number of reference frames (1+3) exceeds max (3; probably corrupt input), discarding one 

# this goes on for a while... 

[h264 @ 0x7ff94b01a400] concealing 4962 DC, 4962 AC, 4962 MV errors in B frame 
Error while decoding stream #0:0: Invalid data found when processing input 
frame= 2553 fps= 17 q=-1.0 Lsize= 26995kB time=00:01:42.16 bitrate=2164.6kbits/s dup=0 drop=60 speed=0.697x  
video:25258kB audio:1661kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.285236% 
[libx264 @ 0x7ff94b810400] frame I:35 Avg QP:17.45 size: 55070 
[libx264 @ 0x7ff94b810400] frame P:711 Avg QP:19.73 size: 18712 
[libx264 @ 0x7ff94b810400] frame B:1807 Avg QP:21.53 size: 5884 
[libx264 @ 0x7ff94b810400] consecutive B-frames: 3.4% 5.0% 4.9% 86.6% 
[libx264 @ 0x7ff94b810400] mb I I16..4: 38.2% 49.3% 12.5% 
[libx264 @ 0x7ff94b810400] mb P I16..4: 12.4% 14.0% 1.0% P16..4: 29.6% 4.8% 1.9% 0.0% 0.0% skip:36.2% 
[libx264 @ 0x7ff94b810400] mb B I16..4: 1.5% 1.2% 0.1% B16..8: 27.3% 1.6% 0.1% direct: 1.8% skip:66.4% L0:45.8% L1:51.4% BI: 2.8% 
[libx264 @ 0x7ff94b810400] 8x8 transform intra:49.5% inter:85.4% 
[libx264 @ 0x7ff94b810400] coded y,uvDC,uvAC intra: 21.2% 22.3% 2.5% inter: 4.6% 7.0% 0.0% 
[libx264 @ 0x7ff94b810400] i16 v,h,dc,p: 23% 26% 10% 41% 
[libx264 @ 0x7ff94b810400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 19% 35% 3% 3% 3% 3% 3% 2% 
[libx264 @ 0x7ff94b810400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 31% 20% 16% 5% 7% 6% 5% 5% 4% 
[libx264 @ 0x7ff94b810400] i8c dc,h,v,p: 67% 16% 15% 2% 
[libx264 @ 0x7ff94b810400] Weighted P-Frames: Y:7.3% UV:4.2% 
[libx264 @ 0x7ff94b810400] ref P L0: 66.3% 8.7% 17.9% 7.0% 0.1% 
[libx264 @ 0x7ff94b810400] ref B L0: 88.2% 10.1% 1.7% 
[libx264 @ 0x7ff94b810400] ref B L1: 94.9% 5.1% 
[libx264 @ 0x7ff94b810400] kb/s:2026.12 
[aac @ 0x7ff94b072400] Qavg: 635.626 

結果の出力が入力された映像と同じですが、含まれていません。最後に所望の画像ビデオ。私が気づいた

一つのこと:私はMac上でビデオファイルを検査するとき、彼らは常に「詳細情報」で、これらの行が含まれている(情報の取得):しかし

Dimensions: 1920 x 1080 
Codecs: H.264, AAC 
Color profile: HD(1-1-1) 
Duration: 01:42 
Audio channels: 2 
Last opened: Today 11:02 

を、のDrawTextフィルターを通過した映像の

Dimensions: 1920 x 1080 
Codecs: AAC, H.264 
Duration: 00:10 
Audio channels: 2 
Last opened: Today 11:07 

ご覧のとおり、カラープロファイルのエントリはなく、コーデックの場所が切り替わっています。私はこれが私の問題に関連していると思っていますが、私はその問題を解決できないようです。

PS:アプリケーションはphp環境(Symfony)で動作します。私はconcatコマンドがsymfonyバンドルでffmpegで利用できないことに気づいたので、私は通常のターミナルコマンドを使用しています。私はこれらをphpを使って実行します。同僚のアドバイスに

EDIT 試み3

、私は期待して、これはのDrawTextフィルタによって含まれるすべての破損や余分な情報を失うことになる、.AVIするためにビデオを変換し、.MP4する再変換しようとしました。これはまったく異なるエラーを吐き出します。

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f812413da00] Auto-inserting h264_mp4toannexb bitstream filtereed=0.516x  
[concat @ 0x7f8124009a00] DTS 1569260 < 2551000 out of order 
[h264 @ 0x7f8124846800] left block unavailable for requested intra4x4 mode -1 
[h264 @ 0x7f8124846800] error while decoding MB 0 0, bytestream 47919 
[h264 @ 0x7f8124846800] concealing 8160 DC, 8160 AC, 8160 MV errors in I frame 
[aac @ 0x7f8125809a00] Queue input is backward in time 
[aac @ 0x7f8125815a00] Queue input is backward in time 
[h264 @ 0x7f8124846e00] number of reference frames (1+3) exceeds max (3; probably corrupt input), discarding one 
[h264 @ 0x7f8124846e00] chroma_log2_weight_denom 26 is out of range 
[h264 @ 0x7f8124846e00] deblocking_filter_idc 32 out of range 
[h264 @ 0x7f8124846e00] decode_slice_header error 
[h264 @ 0x7f8124846e00] no frame! 
[mp4 @ 0x7f8124802200] Non-monotonous DTS in output stream 0:1; previous: 4902912, current: 4505491; changing to 4902913. This may result in incorrect timestamps in the output file. 
[mp4 @ 0x7f8125813000] Non-monotonous DTS in output stream 1:1; previous: 4902912, current: 4505491; changing to 4902913. This may result in incorrect timestamps in the output file. 
[h264 @ 0x7f8124803400] reference overflow 20 > 15 or 0 > 15 
[h264 @ 0x7f8124803400] decode_slice_header error 
[h264 @ 0x7f8124803400] no frame! 
[mp4 @ 0x7f8124802200] Non-monotonous DTS in output stream 0:1; previous: 4902913, current: 4506515; changing to 4902914. This may result in incorrect timestamps in the output file. 
[mp4 @ 0x7f8125813000] Non-monotonous DTS in output stream 1:1; previous: 4902913, current: 4506515; changing to 4902914. This may result in incorrect timestamps in the output file. 
[mp4 @ 0x7f8124802200] Non-monotonous DTS in output stream 0:1; previous: 4902914, current: 4507539; changing to 4902915. This may result in incorrect timestamps in the output file. 
[mp4 @ 0x7f8125813000] Non-monotonous DTS in output stream 1:1; previous: 4902914, current: 4507539; changing to 4902915. This may result in incorrect timestamps in the output file. 

# Again, this continues for quite a while. 

答えて

2

代わりにconcatフィルタを使用し、1つのコマンドで実行します。

ffmpeg -i main.mp4 -loop 1 -framerate 30 -t 10 -i image.png 
     -filter_complex "[1]drawtext=fontfile=HelveticaNeue.dfont:text='GLNS/TEST/1234b': 
          fontcolor=black:fontsize=20:box=1:boxcolor=white:boxborderw=7: 
          x=179:y=805[it]; 
         [0:v][it]concat,split[hd][sd]" 
     -map "[hd]" -map 0:a combined1080p.mp4 
     -map "[sd]" -map 0:a -s 1024x576 combined576p.mp4 

私はあなたのメインビデオと画像がすでに1920x1080であると仮定します。

+1

私たちの間のnoobsについては、なぜこの動作はしますが、もう一方は失敗しますか? – vrwim

+0

ありがとう、たくさんの男、魅力的に働いた。 –

+1

私は決定的にあなたのコマンドをデバッグすることはできませんが、concat demuxerはストリームの順序を一致させる必要があります。コーデック、解像度、ピクセルフォーマット(ただし色空間ではない)のようなストリームプロパティにマッチするだけでなく、AEのようなアプリケーションではタイムベース、0開始PTSなどのプロパティも変更できないか、新しいFFmpegユーザが指定することはできません。同じソースから生成されたセグメントをステッチングするときは、コンカルトデマルチプレクサを使用します。 – Mulvya

関連する問題