O Gnome possui uma ferramenta de screencast integrada usando ctrl
plus shift
plus alt
plus R
. É uma ótima ferramenta com saída de vídeo de qualidade consistente!
Mas preciso da saída em mp4. Eu tentei isso: ffmpeg -i screencast.webm -crf 0 screencast.mp4
conforme especificado em outras postagens do AskUbuntu, mas não funciona bem para mim, embora deva ser sem perdas.
Meu screencast em mp4 salta, congela em um único quadro e os tamanhos dos arquivos são drasticamente diferentes.
Preciso de h.264 mp4, de preferência com taxa de quadros constante, em alta definição.
Qual comando ffmpeg posso usar?
Aqui está um arquivo de exemplo:ffmpeg -i input.webm
$ ffmpeg -i Screencast\ from\ 03-18-2023\ 04\:57\:59\ PM.webm
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
WARNING: library configuration mismatch
avcodec configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared --enable-version3 --disable-doc --disable-programs --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, matroska,webm, from 'Screencast from 03-18-2023 04:57:59 PM.webm':
Metadata:
encoder : GStreamer matroskamux version 1.20.3
creation_time : 2023-03-18T20:57:59.129336Z
Duration: 00:16:48.47, start: 0.028000, bitrate: 858 kb/s
Stream #0:0(eng): Video: vp8, yuv420p(tv, bt709, progressive), 1920x1080, SAR 1:1 DAR 16:9, 1k tbr, 1k tbn, 1k tbc (default)
Metadata:
title : Video
At least one output file must be specified
Responder1
Isso funciona para gerar seu screencast como um mp4
que é reproduzido conforme o esperado emVLCe outros:
ffmpeg -i screencast.webm -filter:v "fps=30" screencast.mp4
Isso funciona em mais casos e evita ffmpeg
erros 'não divisíveis por 2':
ffmpeg -i screencast.webm -filter:v "scale=trunc(iw/2)*2:trunc(ih/2)*2,fps=30" screencast.mp4
O acima define uma taxa de quadros constante de 30 quadros por segundo ( fps
). Ele redimensiona seu vídeo em no máximo um pixel e garante que a largura e a altura de entrada ( iw
e ih
) sejam números pares.
Você também pode especificar opções de codec como -codec:v libx264
. Confiraffmpeg
Opções de vídeopara seus dados.
Suas perguntas e perguntas e respostas relacionadas que considero úteis durante esta pesquisa incluem:
(Uma essência que coloca toda essa resposta em uma função útil ~/.bashrc)https://gist.github.com/azeemh/de280db7ba71e1d69ed55c0e5855de50