
중간에 약 30초 동안 왼쪽에서 오른쪽으로만 뒤집힌 짧은 3분짜리 클립이 있습니다.
따라서 모든 것이 왼쪽에서 오른쪽으로 바뀌면 다음을 적용하고 싶습니다.
ffmpeg -i 3min.mp4 -vf hflip flipped_3min.mp4
그러나 부분적으로만 반전되었으므로 단일 ffmpeg 명령에서 해당 hflip 필터에 대한 시간 세그먼트(1:30-2:00)를 적용하는 방법이 있습니까?
나는 이것에 대한 몇 가지 문서를 찾고 있는데 그런 종류의 것을 찾을 수 없습니다. FFmpeg에서 불가능한지 궁금합니다.
답변1
를 사용하여 비디오의 하위 섹션만 뒤집으려면 어떻게 해야 합니까 ffmpeg
?
여기,-filter_complex
필터링된 입력 체인을 생성할 수 있으므로 친구입니다. 우리는 hflip
필터 그래프의 질문에 언급된 필터를 계속 사용할 것입니다 .
다음과 같이 하위 섹션에 신청할 수 있습니다.
ffmpeg -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];\
[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];\
[b]hflip[c];\
[a][c]concat[d];\
[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];\
[d][e]concat[out1]" -map [out1] flip.mp4
쉽게 복사하고 붙여넣을 수 있는 한 줄:
ffmpeg -i input.mp4 -filter_complex "[0:v]trim=start=0:duration=90[a];[0:v]trim=start=90:duration=30,setpts=PTS-STARTPTS[b];[b]hflip[c];[a][c]concat[d];[0:v]trim=start=120:duration=60,setpts=PTS-STARTPTS[e];[d][e]concat[out1]" -map [out1] flip.mp4
설명:
필터 그래프를 사용하는 것은 일련의 작업을 만드는 것과 약간 비슷하며 이에 대한 멋진 시각적 설명이 있습니다 .'필터링 소개' 섹션필터 문서 중. 필터는 다음과 함께 작동합니다.입력- 이는 필터 이전에 표시되는 비트입니다(예: [0:v]
(첫 번째 입력 스트림의 비디오) 또는 [a]
(이름이 생성된 출력 a
) - 및출력. 즉,입력또는입력a에 따라 변환된 filter
다음 다음 중 하나로 출력됩니다.산출또는출력.
여기에는 간단한 작업 세트가 있으며 이를 순서대로 진행하면 입력과 출력의 필터 그래프를 구축할 수 있습니다.
세그먼트
[0:v]
다음을 사용하여 입력에서 비디오 세그먼트 3개를 만듭니다 trim
.
- 첫 번째 세그먼트(90초), 아무것도 수행하지 않음(로 출력
[a]
) - 두 번째 세그먼트(30초)
hflip
및setpts
지속 시간 문제를 방지하기 위해(다음으로 트림하여 출력[b]
하여 로hflip
출력[c]
)
그런 다음 이 두 개를 concat
함께 사용하여 출력을 만듭니다 [a]+[c] -> [d]
(지속 시간: 120초).
- 세 번째 세그먼트(60초), PTS를 다시 설정합니다( 로 출력
[e]
).
세그먼트를 결합하여 출력을 만들고 [d] + [e] -> [out1]
이를 -map
파일의 최종 출력으로 만듭니다.
이는 원본(180초)과 동일한 지속 시간의 비디오를 제공하지만 중간에 가로로 뒤집힌 30초 섹션이 있습니다 2 .
1 :
시각적 표현ffmpeg
필터 문서
에서
libavfilter
필터는 여러 입력과 여러 출력을 가질 수 있습니다. 가능한 종류를 설명하기 위해 다음 필터 그래프를 고려합니다.
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
이 필터 그래프는 입력 스트림을 두 개의 스트림으로 분할한 다음 하나의 스트림을 자르기 필터와 vflip 필터를 통해 보낸 다음 위에 오버레이하여 다른 스트림과 다시 병합합니다.
2 다음을 사용하여 테스트됨ffmpeg version N-72939-g5b0f55a
답변2
이 예에서는 수평 뒤집기가 2~3초 사이에 발생합니다.
일부 필터는 다음을 통해 타임라인을 지원합니다.옵션 활성화.
필터 목록과 필터가 타임라인을 지원하는지 여부를 확인할 수 있습니다 ffmpeg -filters
. 필터 이름 앞의 " T
"는 타임라인 편집을 지원함을 나타냅니다. 원하는 필터에 타임라인 지원이 없으면 ffmpeg
필터를 업데이트하여 이를 지원하도록 업데이트하는 경우도 있습니다. 그렇지 않으면 다른 답변에 설명된 대로 트림 필터를 사용하십시오.
ffmpeg
예:
ffmpeg -i input -vf "hflip=enable='between(t,90,120)'" -c:a copy output
ffplay
예:
ffplay -vf "hflip=enable='between(t,90,120)'" input