За время работы в разных проектах у меня накопился список полезных команд, связанных с использованием программы FFmpeg. Поэтому я решил оформить эти команды в справочник. Также планирую постепенно добавлять новые команды.
FFmpeg
Все команды запускались под ОС Linux Ubuntu 16.04.
В ОС Window они будут выглядеть примерно также.
Кодирование YUV, MP4 видео с определенным битрейтом (в данном примере с битрейтом 3000 Кбит/сек)
ffmpeg -video_size 1936×1088 -r 30 -i input-video.yuv -b:V 3000k -vcodec libx264 -preset fast -g 30 output-video.mp4
ffmpeg -i input-video.mp4 -b:V 3000k -vcodec libx264 -preset fast -g 30 output-video.mp4
Кодирование MP4 в YUV
ffmpeg -i input-video.mp4 -c:v rawvideo -pix_fmt yuv420p output-video.yuv
Кодирование YUV в MP4
ffmpeg -s 1024×768 -r 30 -i input-video.yuv -b:V 3000k -pix_fmt yuv420p -c:v libx264 -s:v 1024×768 -preset veryfast -g 30 output-video.mp4
Вычисление метрики PSNR
ffmpeg -s:v 256×144 -r 30 -i original.yuv -s:v 256×144 -r 30 -i measure.yuv -lavfi «[0:v][1:v]psnr» -f null —
Вычисление метрики SSIM
ffmpeg -s:v 256×144 -r 30 -i original.yuv -s:v 256×144 -r 30 -i measure.yuv -lavfi «[0:v][1:v]ssim» -f null —
Вычисление метрики VMAF
ffmpeg -i original.mpg -i measure.mpg -lavfi libvmaf -f null —
Разделить видео на сегменты длительностью 4 секунды
ffmpeg -i video.y4m -f segment -segment_time 4 output%d.y4m
без перекодирования: ffmpeg -i video.mp4 -c copy -segment_time 4 -f segment ./segments/output%04d.mp4
Конвертация 10-ти битного видео в 8-ми битное
ffmpeg -i input-video_10bit.y4m -pix_fmt yuv420p output-video_8bit.y4m
Вырезать часть видео (начиная с пятой секунды, 15 секунд)
ffmpeg -i input-video.y4m -ss 00:00:05 -t 00:00:15 output-video-15sec.y4m
для yuv видео надо указывать разрешение и FPS для входного видео
ffmpeg -s 1024×768 -r 30 -i input-video.yuv -ss 00:00:05 -t 00:00:15 output-video-15sec.yuv
Объединить PNG картинки в видео, при этом использовать lossless кодирование (без потери качества)
ffmpeg -framerate 30 -i ./images/1/%04d.png -c:v libx264 -crf 0 -r 30 -preset ultrafast -pix_fmt yuv420p output-video.mp4
Конкатенация MPEG-DASH init сегмента с MPEG-DASH видео сегментом
ffmpeg -i «concat:init.mp4|segment_1.m4s» -c copy output-video.mp4
ffmpeg -i «concat:init.mp4|segment_1.m4s» -c copy -bsf:a aac_adtstoasc output-video.mp4 // если есть AAC аудио
Lossless кодирование (без потери качества)
ffmpeg -i input-video.y4m -c:v libx264 -preset fast -crf 0 output-video.mp4
Добавить яркость в видео
ffmpeg -s 1920×1080 -r 30 -i input-video.yuv -vf eq=brightness=0.3:saturation=2 -b:V 5000k -pix_fmt yuv420p -c:v libx264 -s:v 1920×1080 -preset veryfast -g 30 output-video.mp4
Разделить видео на последовательности Group of Pictures (GOPs), каждый начинается с I-frame
ffmpeg -i input-video.mp4 -acodec copy -f segment -vcodec copy -reset_timestamps 1 -map 0 ./GOPs/OUTPUT%d.mp4
vlc —demux rawvideo —rawvid-fps 60 —rawvid-width 384 —rawvid-height 216 —rawvid-chroma I420 measure.yuv
Полезные ссылки
FFmpeg Encoding and Editing Course
Успехов!
Если у вас появились какие-то вопросы по медиа-серверам, пишите нам. Если вам нужно что-то настроить или получить консультацию по медиа-серверам и системам видео-вещания, также можете обращаться ко мне и нашей команде.
Приглашаю всех подписаться на новости моей публичной страницы ВКонтакте, ее адрес http://vk.com/itmultimedia. Буду рад видеть Вас в своих подписчиках.
Комментарии:
1 ping