FFmpeg에서 비디오 썸네일을 가져오는 방법이 있습니까?
가장 가운데 있는 프레임을 비디오로 가져와서 썸네일로 사용하고 싶습니다. 동영상 길이를 알 수 없습니다.
썸네일의 크기를 지정하는 기능도 도움이 될 것입니다.
답변1
한 줄 명령 :
ffmpeg -i input.mp4 -vcodec mjpeg -vframes 1 -an -f rawvideo -ss `ffmpeg -i input.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d , | awk -F ':' '{print ($3+$2*60+$1*3600)/2}'` output.jpg
하위 명령은 입력 비디오의 총 지속 시간을 가져옵니다.
ffmpeg -i input.mp4 2>&1 | grep Duration | awk '{print $2}' | tr -d ,
그리고 이것을 파이프로 연결하여 awk
이렇게 기간/2를 계산합니다.
echo '00:01:30.000' | awk -F ':' '{print ($3+$2*60+$1*3600)/2}'
그래서 -ss 옵션에 몇 초를 주면 완료됩니다.
크기를 지정하려면 WxH와 같은 -s 옵션을 추가하세요. 여기서 W와 H는 정수 값(예: -s 800x600 또는 -s svga)입니다. 또는 ffmpeg 매뉴얼 페이지를 읽어 다른 사용 가능한 옵션이나 형식을 확인하세요.
답변2
다음을 사용하는 방법이 있습니다.
ffprobe
기간을 얻으려면bc
기간의 절반을 계산하려면ffmpeg
썸네일 이미지를 만들려면
예:
input=input.mp4; ffmpeg -ss "$(bc -l <<< "$(ffprobe -loglevel error -of csv=p=0 -show_entries format=duration "$input")*0.5")" -i "$input" -frames:v 1 half.png
답변3
우선, 항상 최신 버전의 FFmpeg를 사용하세요.
PHP에 액세스할 수 있는 경우 Stack Overflow에서 귀하의 질문에 대한 완벽한 답변을 얻을 수 있습니다.FFMpeg를 사용하여 비디오의 중간 프레임을 얻으시겠습니까?
$output = shell_exec("/usr/local/bin/ffmpeg -i {$path}");
preg_match('/Duration: ([0-9]{2}):([0-9]{2}):([^ ,])+/', $output, $matches);
$time = str_replace("Duration: ", "", $matches[0]);
$time_breakdown = explode(":", $time);
$total_seconds = round(($time_breakdown[0]*60*60) + ($time_breakdown[1]*60) + $time_breakdown[2]);
shell_exec("/usr/local/bin/ffmpeg -y -i {$path} -f mjpeg -vframes 1 -ss " . ($total_seconds / 2) . " -s {$w}x{$h} {$output_filename}";
그것이 할 일은 FFmpeg의 출력에서 지속 시간을 추출하고 이를 사용하여 중간 프레임의 타임코드를 결정하는 것입니다.
이를 다른 쉘에 쉽게 적용하고 다음 명령에 삽입하기만 하면 됩니다. 여기서 중간 프레임은 대략 534
초 단위입니다.
ffmpeg -y -i input.mp4 -f mjpeg -vframes 1 -ss 534 thumbnail.jpg
-s 480x320
옵션 뒤 어딘가에 삽입하여 원하는 크기에 따라 언제든지 크기를 변경할 수 있습니다 -i input.mp4
.
위의 해결책은 약간 부정확합니다. 즉시 결과를 제공하지만 원하는 프레임을 지정할 수는 없습니다. 추출하려는 정확한 프레임을 이미 알고 있는 경우 필터를 사용하십시오 select
(예: 프레임 번호 포함) 12345
.
ffmpeg -i input.mp4 -filter:v select="eq(n\,12345)" -vframes 1 thumbnail.jpg
이 명령은 특정 프레임을 추출하기 전에 지정된 프레임으로 건너뛰어야 하기 때문에 시간이 걸릴 수 있습니다.
답변4
간단한 해결책은 다음과 같습니다.
ffmpeg -i l1.mp4 -ss 00:00:14.435 -vframes 1 out.png