2016-06-28 4 views
0

一般的な入力ソースから2つの異なるビデオを生成する必要があります。 semplicityのために、開始時刻と継続時間が異なるだけですが、生産コードがより複雑で、filter_complexを使用する必要があるので、-ss -toオプションは使用できません。ffmpegを使用したマルチビデオ出力のトリミングの違いfilter_complex

これは私の現在のスクリプトです:

/Users/Luca/Downloads/ffmpeg-macosx -y \ 
-i "/Users/Luca/Downloads/2_dongiovanni_mov.mov" \ 
-filter_complex "\ 
[0:v]split=2[v1][v4];\ 
[v1]\ 
scale='if(gt(a,1.7777777777778),640,-2)':'if(gt(a,1.7777777777778),-2,360)',\ 
trim=start=4:duration=10,\ 
setpts=PTS-STARTPTS\ 
[vout1];\ 
[v4]\ 
scale='if(gt(a,1.7777777777778),640,-2)':'if(gt(a,1.7777777777778),-2,360)',\ 
trim=start=0:duration=247,\ 
setpts=PTS-STARTPTS\ 
[vout4];\ 
[0:a]asplit=2[a1][a4];\ 
[a1]\ 
atrim=start=4:duration=10,\ 
asetpts=PTS-STARTPTS\ 
[aout1];\ 
[a4]\ 
atrim=start=0:duration=247,\ 
asetpts=PTS-STARTPTS\ 
[aout4]" \ 
-map [vout1] -map [aout1] -codec:v libx264 -b:v 1000k -codec:a aac -b:a 384k -strict experimental "/Users/Luca/Downloads/preview.mp4" \ 
-map [vout4] -map [aout4] -codec:v libx264 -b:v 5000k -codec:a aac -b:a 384k -strict experimental "/Users/Luca/Downloads/large.mp4" \ 
2>&1 

preview.mp4([V1] [A1]セグメント)それだけで10秒間続くと、okです(そしてそれは、元の映像の第四秒で起動します) 。オーディオもOKです。

large.mp4([v4] [a4])は247秒間持続しますが、オーディオは問題ありません(凍結なしで247秒間、正確に14秒(つまり最初の出力の4 + 10) )。

作品期待通り:

1)私は、 "スケール" のフィルター

OR

2)の両方を削除私はffmpegのは、最初に最長を処理することができます基本的にので、フィルタを "トリム" 入れ替えます(下のコードを参照してください)

/Users/Luca/Downloads/ffmpeg-macosx -y \ 
-i "/Users/Luca/Downloads/2_dongiovanni_mov.mov" \ 
-filter_complex "\ 
[0:v]split=2[v1][v4];\ 
[v1]\ 
scale='if(gt(a,1.7777777777778),640,-2)':'if(gt(a,1.7777777777778),-2,360)',\ 
trim=start=0:duration=247,\ 
setpts=PTS-STARTPTS\ 
[vout1];\ 
[v4]\ 
scale='if(gt(a,1.7777777777778),640,-2)':'if(gt(a,1.7777777777778),-2,360)',\ 
trim=start=4:duration=10,\ 
setpts=PTS-STARTPTS\ 
[vout4];\ 
[0:a]asplit=2[a1][a4];\ 
[a1]\ 
atrim=start=0:duration=247,\ 
asetpts=PTS-STARTPTS\ 
[aout1];\ 
[a4]\ 
atrim=start=4:duration=10,\ 
asetpts=PTS-STARTPTS\ 
[aout4]" \ 
-map [vout1] -map [aout1] -codec:v libx264 -b:v 1000k -codec:a aac -b:a 384k -strict experimental "/Users/Luca/Downloads/preview.mp4" \ 
-map [vout4] -map [aout4] -codec:v libx264 -b:v 5000k -codec:a aac -b:a 384k -strict experimental "/Users/Luca/Downloads/large.mp4" \ 
2>&1 

これは誰でも説明できますか?

答えて

2

奇妙な動作です。最近のWindowsバイナリでここを再現できます。バグレポートを提出する必要があります。

#1プレイススケール分割プロセス子供が所望の順序でストリームの前に。

[0:v]scale='if(gt(a,16/9),640,-2)':'if(gt(a,16/9),-2,360)',split=2[v1][v4];\ 

#2プロセスの子は、所望の順序でストリームが、トリム後のスケールを配置します。

[v1]trim=..., scale=..., setpts=PTS-STARTPTS[vout1]; \ 
[v4]trim=..., scale=..., setpts=PTS-STARTPTS[vout2]; \ 

#3分割する入力に直接作業、不要であれば。

[0:v]scale=..., trim=..., setpts=PTS-STARTPTS[vout1]; \ 
[0:v]scale=..., trim=..., setpts=PTS-STARTPTS[vout2]; \ 
+0

回避策2は正しい出力を生成します。 Windowsでもこれを試していただきありがとうございます(私はMacを持っています)。 – LucaM

関連する問題