Skip to content

Instantly share code, notes, and snippets.

@Philmist
Created January 27, 2023 09:20
Show Gist options
  • Save Philmist/5b3590c1ee5721619ad5668c523dcbd7 to your computer and use it in GitHub Desktop.
Save Philmist/5b3590c1ee5721619ad5668c523dcbd7 to your computer and use it in GitHub Desktop.
PowerShellとわかりあえなかったffmpegクロスフェード編集
$movies = @(
@{FileName=".\2023-01-27 15-29-36.mkv";FadeInTime=0;From=0;Time=5},
@{FileName=".\2023-01-27 15-29-36.mkv";FadeInTime=1;From=63;Time=29},
@{FileName=".\2023-01-27 15-32-51.mkv";FadeInTime=1;From=0;Time=3},
@{FileName=".\2023-01-27 15-32-51.mkv";FadeInTime=1;From=55;Time=29},
@{FileName=".\2023-01-27 15-40-44.mkv";FadeInTime=1;From=13;Time=10}
)
$filter_complex_v = ""
$filter_complex_a = ""
$offset_v_sum = 0
# Create filter_complex
for ($i = 1; $i -lt ($movies.Count); $i++) {
#Write-Debug $i
if ($i -eq 1) {
$offset_v_sum = $movies[$i-1].Time - $movies[$i].FadeInTime
# Write-Host ('[{0}:v][{1}:v]xfade=transition=fade:duration={2}[fv{0}]' -f $i, ($i+1), ($movies[$i + 1].FadeInTime))
$now_filter_v = ('[{0}:v][{1}:v]xfade=transition=fade:offset={2}:duration={3}[fv{1}]' -f ($i-1), $i, $offset_v_sum, ($movies[$i].FadeInTime))
$filter_complex_v = $filter_complex_v + $now_filter_v
$now_filter_a = ('[{0}:a][{1}:a]acrossfade=d={2}[fa{1}]' -f ($i-1), ($i), ($movies[$i].FadeInTime))
$filter_complex_a = $filter_complex_a + $now_filter_a
} else {
$offset_v_sum = $offset_v_sum + $movies[$i-1].Time - ($movies[$i].FadeInTime)
$now_filter_v = ('[fv{0}][{1}:v]xfade=transition=fade:offset={2}:duration={3}[fv{1}]' -f ($i-1), $i, $offset_v_sum, ($movies[$i].FadeInTime))
$filter_complex_v = $filter_complex_v + ";" + $now_filter_v
$now_filter_a = ('[fa{0}][{1}:a]acrossfade=d={2}[fa{1}]' -f ($i-1), $i, ($movies[$i].FadeInTime))
$filter_complex_a = $filter_complex_a + ";" + $now_filter_a
}
}
Write-Host "f-v" $filter_complex_v
Write-Host "f-a" $filter_complex_a
$filter_complex = $filter_complex_v + ";" + $filter_complex_a
Write-Debug $filter_complex
$AllArgs = @()
for ($i = 0; $i -lt $movies.Count; $i++) {
<# Action that will repeat until the condition is met #>
$AllArgs += '-ss'
$AllArgs += $movies[$i].From
$AllArgs += '-t'
$AllArgs += $movies[$i].Time
$AllArgs += '-i'
$AllArgs += $movies[$i].FileName
}
$AllArgs += '-filter_complex'
$AllArgs += ('{0}' -f $filter_complex)
$AllArgs += '-map'
$AllArgs += ('[fv{0}]' -f ($movies.Count - 1))
$AllArgs += '-map'
$AllArgs += ('[fa{0}]' -f ($movies.Count - 1))
$AllArgs += '-c:v'
$AllArgs += 'h264_nvenc'
$AllArgs += '-b:v'
$AllArgs += '10M'
$AllArgs += '-shortest'
$AllArgs += 'twitter.mp4'
& 'ffmpeg' $AllArgs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment