Como posso converter meu screencast webm para mp4?

Como posso converter meu screencast webm para mp4?

O Gnome possui uma ferramenta de screencast integrada usando ctrlplus shiftplus altplus 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.mp4conforme 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 mp4que é reproduzido conforme o esperado emVLCe outros:

ffmpeg -i screencast.webm -filter:v "fps=30" screencast.mp4

Isso funciona em mais casos e evita ffmpegerros '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 ( iwe ih) sejam números pares.

Você também pode especificar opções de codec como -codec:v libx264. ConfiraffmpegOpções de vídeopara seus dados.

Suas perguntas e perguntas e respostas relacionadas que considero úteis durante esta pesquisa incluem:

informação relacionada