설명:

설명:

중간에 약 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초) hflipsetpts지속 시간 문제를 방지하기 위해(다음으로 트림하여 출력 [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초 사이에 발생합니다.
이 예에서는 수평 뒤집기가 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

관련 정보