ubuntu录屏转格式 webm转mp4

起因

想着将一些操作录屏记录下来。之前在win上面,使用EV录屏或者用CS(CamtasiaStudio)。这次用ubuntu,发现系统自带的录屏似乎就可以用,于是试了一下。操作确实很方便,但录屏生成的文件是.webm后缀,似乎要上传一些平台需要转格式。遂祭起AI大旗。

AI协助转格式

在Ubuntu上,你可以使用多种工具将WebM格式的录屏文件转换成其他格式,比如MP4、AVI等。其中最常用的一个工具是ffmpeg,它是一个非常强大的多媒体框架,可以用来记录、转换视频和音频流。

如果你还没有安装ffmpeg,可以通过以下命令来安装:

sudo apt update
sudo apt install ffmpeg

一旦你安装了ffmpeg,就可以使用它来转换你的WebM文件。下面是一些常见的转换示例:

转换成MP4格式

要将WebM文件转换为MP4格式,可以在终端中运行如下命令:

ffmpeg -i input.webm -c:v libx264 -c:a aac output.mp4

这里:

  • -i input.webm 指定了输入文件。
  • -c:v libx264 选择了H.264编码器来处理视频流。
  • -c:a aac 选择了AAC编码器来处理音频流。
  • output.mp4 是输出文件的名字。
转换成AVI格式

若要转换为AVI格式,可以使用如下命令:

ffmpeg -i input.webm -c:v libxvid -c:a mp3 output.avi

这里:

  • -c:v libxvid 选择XviD编码器用于视频。
  • -c:a mp3 选择MP3编码器用于音频。
自定义设置

ffmpeg 提供了大量的选项来自定义输出,例如调整分辨率、比特率等。你可以在官方文档或通过man ffmpeg查看更多详细信息。

按照说明操作

报错了!

 ffmpeg -i 录屏\ 2024-09-26\ 08-17-40.webm -c:v libx264 -c:a aac checkIP1.mp4
ffmpeg version 6.1.1-3ubuntu5+esm2 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu4)
  configuration: --prefix=/usr --extra-version=3ubuntu5+esm2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=3ubuntu5+esm2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared --enable-version3 --disable-doc --disable-programs --disable-static --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, matroska,webm, from '录屏 2024-09-26 08-17-40.webm':
  Metadata:
    encoder         : GStreamer matroskamux version 1.24.2
    creation_time   : 2024-09-26T00:17:40.675211Z
  Duration: 00:01:00.36, start: 0.010000, bitrate: 391 kb/s
  Stream #0:0(eng): Video: vp8, yuv420p(tv, bt709, progressive), 1081x711, SAR 1:1 DAR 1081:711, 1k tbr, 1k tbn (default)
    Metadata:
      title           : Video
Stream mapping:
  Stream #0:0 -> #0:0 (vp8 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x61d007072f80] width not divisible by 2 (1081x711)
[vost#0:0/libx264 @ 0x61d007072b80] Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.
Error while filtering: Generic error in an external library
[out#0/mp4 @ 0x61d007073600] Nothing was written into output file, because at least one of its streams received no packets.
frame=    0 fps=0.0 q=0.0 Lsize=       0kB time=N/A bitrate=N/A speed=N/A    
Conversion failed!

继续丢给AI

AI分析报错

从你提供的错误信息来看,问题出在视频的宽度(1081像素)不是2的倍数,这导致了libx264编码器无法处理。H.264编码通常要求宽度和高度都是偶数,以保证宏块(macroblock)对齐。

要解决这个问题,你可以使用ffmpeg来调整视频的分辨率,使其宽度成为偶数。这里有一个修改后的命令示例,它会将视频缩放到最近的偶数宽度,并保持原始宽高比:

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -c:v libx264 -c:a aac checkIP1.mp4

这里的-vf "scale=trunc(iw/2)*2:trunc(ih/2)*2"是一个视频过滤器选项,用于确保输出视频的宽度和高度都是偶数。iwih分别代表输入视频的宽度和高度,trunc(iw/2)*2trunc(ih/2)*2则确保结果是偶数。

如果你希望指定一个特定的分辨率,比如1080p (1920x1080),你可以直接替换为:

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1920:1080 -c:v libx264 -c:a aac checkIP1.mp4

请根据你的具体需求选择合适的分辨率。如果这个命令解决了你的问题,请告诉我。如果有其他问题或需要进一步的帮助,随时让我知道!

使用特定分辨率输出文件

$ ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1920:1080 -c:v libx264 -c:a aac checkIP1.mp4
ffmpeg version 6.1.1-3ubuntu5+esm2 Copyright (c) 2000-2023 the FFmpeg developers
  built with gcc 13 (Ubuntu 13.2.0-23ubuntu4)
  configuration: --prefix=/usr --extra-version=3ubuntu5+esm2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared
  WARNING: library configuration mismatch
  avcodec     configuration: --prefix=/usr --extra-version=3ubuntu5+esm2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --disable-omx --enable-gnutls --enable-libaom --enable-libass --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libharfbuzz --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-openal --enable-opencl --enable-opengl --disable-sndio --enable-libvpl --disable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-ladspa --enable-libbluray --enable-libjack --enable-libpulse --enable-librabbitmq --enable-librist --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libx264 --enable-libzmq --enable-libzvbi --enable-lv2 --enable-sdl2 --enable-libplacebo --enable-librav1e --enable-pocketsphinx --enable-librsvg --enable-libjxl --enable-shared --enable-version3 --disable-doc --disable-programs --disable-static --enable-libaribb24 --enable-libopencore_amrnb --enable-libopencore_amrwb --enable-libtesseract --enable-libvo_amrwbenc --enable-libsmbclient
  libavutil      58. 29.100 / 58. 29.100
  libavcodec     60. 31.102 / 60. 31.102
  libavformat    60. 16.100 / 60. 16.100
  libavdevice    60.  3.100 / 60.  3.100
  libavfilter     9. 12.100 /  9. 12.100
  libswscale      7.  5.100 /  7.  5.100
  libswresample   4. 12.100 /  4. 12.100
  libpostproc    57.  3.100 / 57.  3.100
Input #0, matroska,webm, from '录屏 2024-09-26 08-17-40.webm':
  Metadata:
    encoder         : GStreamer matroskamux version 1.24.2
    creation_time   : 2024-09-26T00:17:40.675211Z
  Duration: 00:01:00.36, start: 0.010000, bitrate: 391 kb/s
  Stream #0:0(eng): Video: vp8, yuv420p(tv, bt709, progressive), 1081x711, SAR 1:1 DAR 1081:711, 1k tbr, 1k tbn (default)
    Metadata:
      title           : Video
File 'checkIP1.mp4' already exists. Overwrite? [y/N] y
Stream mapping:
  Stream #0:0 -> #0:0 (vp8 (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[libx264 @ 0x57a737bdafc0] using SAR=1081/1264
[libx264 @ 0x57a737bdafc0] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
[libx264 @ 0x57a737bdafc0] profile High, level 6.1, 4:2:0, 8-bit
[libx264 @ 0x57a737bdafc0] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=18 lookahead_threads=3 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to 'checkIP1.mp4':
  Metadata:
    encoder         : Lavf60.16.100
  Stream #0:0(eng): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt470bg/bt709/bt709, progressive), 1920x1080 [SAR 1081:1264 DAR 1081:711], q=2-31, 1k fps, 16k tbn (default)
    Metadata:
      title           : Video
      encoder         : Lavc60.31.102 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame=  689 fps=109 q=33.0 size=     256kB time=00:00:00.68 bitrate=3057.6kbits/[vost#0:0/libx264 @ 0x57a737bdabc0] More than 1000 frames duplicated
frame= 1586 fps=216 q=33.0 size=     512kB time=00:00:01.58 bitrate=2648.2kbits/frame= 2431 fps=152 q=33.0 size=     768kB time=00:00:02.42 bitrate=2590.3kbits/frame= 2465 fps=102 q=33.0 size=     768kB time=00:00:02.46 bitrate=2554.5kbits/frame= 2824 fps=110 q=33.0 size=    1024kB time=00:00:02.82 bitrate=2972.7kbits/
......
frame=59057 fps=103 q=33.0 size=   22528kB time=00:00:59.05 bitrate=3125.0kbits/frame=59058 fps=103 q=33.0 size=   22528kB time=00:00:59.05 bitrate=3125.0kbits/frame=60335 fps=103 q=33.0 size=   23040kB time=00:01:00.33 bitrate=3128.4kbits/[out#0/mp4 @ 0x57a737bdb640] video:23213kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 3.050443%
frame=60398 fps=103 q=-1.0 Lsize=   23921kB time=00:01:00.39 bitrate=3244.6kbits/s dup=59859 drop=0 speed=0.103x    
[libx264 @ 0x57a737bdafc0] frame I:242   Avg QP:16.82  size: 60812
[libx264 @ 0x57a737bdafc0] frame P:15220 Avg QP:22.53  size:   265
[libx264 @ 0x57a737bdafc0] frame B:44936 Avg QP:38.25  size:   112
[libx264 @ 0x57a737bdafc0] consecutive B-frames:  0.8%  0.0%  0.0% 99.2%
[libx264 @ 0x57a737bdafc0] mb I  I16..4: 31.0% 55.1% 13.9%
[libx264 @ 0x57a737bdafc0] mb P  I16..4:  0.1%  0.1%  0.0%  P16..4:  0.2%  0.1%  0.0%  0.0%  0.0%    skip:99.5%
[libx264 @ 0x57a737bdafc0] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8:  0.7%  0.0%  0.0%  direct: 0.0%  skip:99.3%  L0:35.7% L1:64.2% BI: 0.0%
[libx264 @ 0x57a737bdafc0] 8x8 transform intra:53.4% inter:57.9%
[libx264 @ 0x57a737bdafc0] coded y,uvDC,uvAC intra: 16.6% 15.8% 10.6% inter: 0.0% 0.0% 0.0%
[libx264 @ 0x57a737bdafc0] i16 v,h,dc,p: 44% 54%  1%  1%
[libx264 @ 0x57a737bdafc0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 72% 12% 12%  0%  0%  0%  1%  0%  1%
[libx264 @ 0x57a737bdafc0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 38% 34%  9%  3%  4%  3%  4%  3%  4%
[libx264 @ 0x57a737bdafc0] i8c dc,h,v,p: 76% 16%  7%  1%
[libx264 @ 0x57a737bdafc0] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x57a737bdafc0] ref P L0: 88.6%  5.1%  4.9%  1.4%
[libx264 @ 0x57a737bdafc0] ref B L0: 19.6% 80.2%  0.1%
[libx264 @ 0x57a737bdafc0] ref B L1: 98.7%  1.3%
[libx264 @ 0x57a737bdafc0] kb/s:3148.32

差不多1分钟的视频,耗费了不少时间,文件体积也大了不少。继续调整ffmpeg转换参数。

继续提问AI

如果你希望加快视频转换的速度,可以调整ffmpeg的一些参数来优化性能。以下是一些可以提高转换速度的方法:

1. 使用更快的预设

libx264编码器提供了一系列预设,从最慢(最高质量)到最快(最低质量)。默认情况下,ffmpeg使用的是中等速度的预设。你可以通过设置-preset选项来选择一个更快的预设,比如veryfast

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1280:720 -c:v libx264 -preset veryfast -c:a aac checkIP1.mp4
2. 减少比特率

降低输出视频的比特率可以减少处理时间,但这会牺牲一些视频质量。可以通过-b:v选项来指定视频比特率。

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1280:720 -c:v libx264 -preset veryfast -b:v 1000k -c:a aac checkIP1.mp4

这里-b:v 1000k设置了视频比特率为1000 kbps。你可以根据需要调整这个值。

3. 使用硬件加速

如果你的计算机支持硬件加速(例如Intel Quick Sync, NVIDIA NVENC, AMD VCE),你可以利用这些功能来显著加快编码速度。下面是一个使用NVIDIA GPU的例子:

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale_npp=1280:720 -c:v h264_nvenc -c:a aac checkIP1.mp4

对于Intel和AMD的硬件加速,命令会有所不同,请查阅ffmpeg文档以获取具体的支持情况和正确的命令行参数。

4. 并行处理

如果你有多个CPU核心,确保ffmpeg能够充分利用它们。通常ffmpeg会自动检测并使用所有可用的核心,但你可以通过-threads选项手动设置线程数。

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1280:720 -c:v libx264 -preset veryfast -threads 4 -c:a aac checkIP1.mp4

这里的-threads 4指定了使用4个线程进行编码。你可以根据你的CPU核心数量来调整这个值。

5. 减少音频质量

如果你不介意稍微降低音频质量,可以通过降低音频比特率来加快转换速度。

ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1280:720 -c:v libx264 -preset veryfast -c:a aac -b:a 64k checkIP1.mp4

这里的-b:a 64k设置了音频比特率为64 kbps。

结合以上方法,你可以找到适合你需求的平衡点,在保证一定质量的同时加快转换速度。希望这些建议对你有帮助!如果还有其他问题或需要进一步的帮助,请告诉我。

综合AI方案
$ ffmpeg -i "录屏 2024-09-26 08-17-40.webm" -vf scale=1280:720 -c:v libx264 -preset veryfast -c:a aac -b:a 64k checkIP2.mp4

速度快了些,体积也降到了10MB。

新技能GET!
=但是===================================================================================
在win系统使用EV录屏

不用转格式,体积也就2MB多点。

posted @ 2024-09-26 09:02  科里布  阅读(122)  评论(0编辑  收藏  举报