Gnome verfügt über ein integriertes Screencast-Tool mit ctrl
plus shift
plus alt
plus R
. Es ist ein großartiges Tool mit gleichbleibend hoher Videoausgabequalität!
Aber ich brauche die Ausgabe im MP4-Format. Ich habe Folgendes versucht: ffmpeg -i screencast.webm -crf 0 screencast.mp4
wie in anderen AskUbuntu-Posts angegeben, aber es funktioniert bei mir nicht gut, obwohl es verlustfrei sein soll.
Mein Screencast im MP4-Format springt hin und her, friert bei einem einzelnen Frame ein und die Dateigrößen unterscheiden sich erheblich.
Ich brauche h.264 mp4, idealerweise mit konstanter Bildrate und in hoher Auflösung.
Welchen ffmpeg-Befehl kann ich verwenden?
Hier ist eine Beispieldatei: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
Antwort1
Auf diese Weise wird Ihr Screencast als ein Video ausgegeben, mp4
das wie erwartet abgespielt wird inVLCund andere:
ffmpeg -i screencast.webm -filter:v "fps=30" screencast.mp4
Dies funktioniert in mehr Fällen und vermeidet ffmpeg
die Ausgabe von „nicht durch 2 teilbar“-Fehlern:
ffmpeg -i screencast.webm -filter:v "scale=trunc(iw/2)*2:trunc(ih/2)*2,fps=30" screencast.mp4
Oben wird eine konstante Bildrate von 30 Bildern pro Sekunde ( fps
) festgelegt. Dadurch wird die Größe Ihres Videos um höchstens ein Pixel geändert und sichergestellt, dass Ihre Eingabebreite und -höhe ( iw
und ih
) gerade Zahlen sind.
Sie können auch Codec-Optionen angeben wie -codec:v libx264
. Schauen Sie sich anffmpeg
Videooptionenfür Ihre Angaben.
Zu Ihren Fragen und den damit verbundenen Fragen und Antworten, die ich während dieser Recherche hilfreich fand, gehören:
(Eine Zusammenfassung, die die gesamte Antwort in eine praktische ~/.bashrc-Funktion packt)https://gist.github.com/azeemh/de280db7ba71e1d69ed55c0e5855de50