起因
想着将一些操作录屏记录下来。之前在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 developersbuilt 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-sharedWARNING: library configuration mismatchavcodec 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-libsmbclientlibavutil 58. 29.100 / 58. 29.100libavcodec 60. 31.102 / 60. 31.102libavformat 60. 16.100 / 60. 16.100libavdevice 60. 3.100 / 60. 3.100libavfilter 9. 12.100 / 9. 12.100libswscale 7. 5.100 / 7. 5.100libswresample 4. 12.100 / 4. 12.100libpostproc 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.2creation_time : 2024-09-26T00:17:40.675211ZDuration: 00:01:00.36, start: 0.010000, bitrate: 391 kb/sStream #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"
是一个视频过滤器选项,用于确保输出视频的宽度和高度都是偶数。iw
和ih
分别代表输入视频的宽度和高度,trunc(iw/2)*2
和trunc(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 developersbuilt 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-sharedWARNING: library configuration mismatchavcodec 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-libsmbclientlibavutil 58. 29.100 / 58. 29.100libavcodec 60. 31.102 / 60. 31.102libavformat 60. 16.100 / 60. 16.100libavdevice 60. 3.100 / 60. 3.100libavfilter 9. 12.100 / 9. 12.100libswscale 7. 5.100 / 7. 5.100libswresample 4. 12.100 / 4. 12.100libpostproc 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.2creation_time : 2024-09-26T00:17:40.675211ZDuration: 00:01:00.36, start: 0.010000, bitrate: 391 kb/sStream #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.100Stream #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 : Videoencoder : Lavc60.31.102 libx264Side 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!