我有许多视频文件(500 多个),其中包含我不需要的语言的大量音频和字幕流,因此希望将其删除以节省存储空间。
我对 进行了修改ffmpeg
,但通过处理一个又一个文件来删除流结果非常耗时。脚本编写也没有运气,因为视频文件包含不同顺序的不同流,这使得通过索引删除变得困难且容易出错。
必须有一个既更快又适用于包含不同流的文件的解决方案,对吧?任何帮助将非常感激。
我有许多视频文件(500 多个),其中包含我不需要的语言的大量音频和字幕流,因此希望将其删除以节省存储空间。
我对 进行了修改ffmpeg
,但通过处理一个又一个文件来删除流结果非常耗时。脚本编写也没有运气,因为视频文件包含不同顺序的不同流,这使得通过索引删除变得困难且容易出错。
必须有一个既更快又适用于包含不同流的文件的解决方案,对吧?任何帮助将非常感激。
我家 ip camera 的 rtsp url 就是这种格式rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0
。我可以用SMPlayer
gui 窗口打开它。为什么不能用SMPlayer
cli 打开?
smplayer rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0
/usr/bin/mpv --no-config --no-quiet --terminal --no-msg-color --input-ipc-server=/tmp/smplayer-mpv-44c1 --msg-level=ffmpeg/demuxer=error --no-fs --hwdec=no --sub-auto=fuzzy --no-input-default-bindings --input-vo-keyboard=no --no-input-cursor --cursor-autohide=no --no-keepaspect --wid=69206033 --monitorpixelaspect=1 --osd-level=1 --osd-scale=1 --osd-bar-align-y=0.6 --sub-ass --embeddedfonts --sub-ass-line-spacing=0 --sub-scale=1 --sub-font=Arial --sub-color=#ffffffff --sub-shadow-color=#ff000000 --sub-border-color=#ff000000 --sub-border-size=0.75 --sub-shadow-offset=2.5 --sub-font-size=50 --sub-bold=no --sub-italic=no --sub-margin-y=8 --sub-margin-x=20 --sub-codepage=ISO-8859-1 --sub-pos=100 --volume=55 --cache=auto --screenshot-template=cap_%F_%p_%02n --screenshot-format=jpg --screenshot-directory=/home/debian/Pictures/smplayer_screenshots --audio-pitch-correction=yes --volume-max=110 --ytdl --term-playing-msg=MPV_VERSION=${=mpv-version:}
INFO_VIDEO_WIDTH=${=width}
INFO_VIDEO_HEIGHT=${=height}
INFO_VIDEO_ASPECT=${=video-params/aspect}
INFO_VIDEO_FPS=${=container-fps:${=fps}}
INFO_VIDEO_FORMAT=${=video-format}
INFO_VIDEO_CODEC=${=video-codec}
INFO_AUDIO_FORMAT=${=audio-codec-name}
INFO_AUDIO_CODEC=${=audio-codec}
INFO_AUDIO_RATE=${=audio-params/samplerate}
INFO_AUDIO_NCH=${=audio-params/channel-count}
INFO_LENGTH=${=duration:${=length}}
INFO_DEMUXER=${=current-demuxer:${=demuxer}}
INFO_SEEKABLE=${=seekable}
INFO_TITLES=${=disc-titles}
INFO_CHAPTERS=${=chapters}
INFO_TRACKS_COUNT=${=track-list/count}
METADATA_TITLE=${metadata/by-key/title:}
METADATA_ARTIST=${metadata/by-key/artist:}
METADATA_ALBUM=${metadata/by-key/album:}
METADATA_GENRE=${metadata/by-key/genre:}
METADATA_DATE=${metadata/by-key/date:}
METADATA_TRACK=${metadata/by-key/track:}
METADATA_COPYRIGHT=${metadata/by-key/copyright:}
INFO_MEDIA_TITLE=${=media-title:}
INFO_STREAM_PATH=${stream-path}
--audio-client-name=SMPlayer --term-status-msg=STATUS: ${=time-pos} / ${=duration:${=length:0}} P: ${=pause} B: ${=paused-for-cache} I: ${=core-idle} VB: ${=video-bitrate:0} AB: ${=audio-bitrate:0}
rtsp://admin:[email protected]:554/cam/realmonitor?channel=1
[ffmpeg/demuxer] rtsp: method DESCRIBE failed: 404 Not Found
[lavf] avformat_open_input() failed
Failed to recognize file format.
Exiting... (Errors when loading file)
我正在尝试根据固定的帧数(例如)将视频video.avi
(N
总帧数)拆分为连续的块M = 100
。具体来说,这个过程应该产生:
video_0.avi
: 帧 0 到M-1
video_1.avi
: 帧M
到2M-1
video_2.avi
: 帧2M
到3M-1
重要的是每个块video_*.avi
都有精确的M
帧。N
因此,如果不能被 整除,则可以丢弃最后一个块M
。
我发现了相关问题(例如,使用 ffmpeg 将视频文件拆分为片段),但发现自己很难在几秒钟内用帧数替换规范。
这是我在 Debian 测试中使用的 ffmpeg 版本 -
$ ffmpeg -version
ffmpeg version 4.4.1-2+b1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Debian 11.2.0-12)
configuration: --prefix=/usr --extra-version=2+b1 --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
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
这是我试图使用的命令 -
$ ffmpeg -ss 00:22:20 -t 60 -i 123.mkv 456.mkv
这来自从视频文件的特定部分提取/复制音频,可能吗?这是我多年前问过的。
我还看了一下FFMpeg :创建一个大约的视频剪辑。没有音频的视频持续时间未知的 10 秒- 但如果我尝试使用其中显示的时间戳,它会出错说 -
Invalid duration specification for ss: 00:22:20:0.0
我正在播放的媒体文件大约是 50 多分钟,我只想要 22:20 秒和一分钟后的一分钟文件。
ffmpeg 或它处理事物的方式发生了变化。我显然已经更改了文件名。尽管如此,这就是它显示文件的内容,就好像我把它放在 mkvinfo 下一样
$ mkvinfo 456.mkv
+ EBML head
|+ EBML version: 1
|+ EBML read version: 1
|+ Maximum EBML ID length: 4
|+ Maximum EBML size length: 8
|+ Document type: matroska
|+ Document type version: 4
|+ Document type read version: 2
+ Segment: size 6959454
|+ Seek head (subentries will be skipped)
|+ EBML void: size 81
|+ Segment information
| + Timestamp scale: 1000000
| + Title: 123
| + Multiplexing application: Lavf58.76.100
| + Writing application: Lavf58.76.100
| + Segment UID: 0x19 0xba 0x01 0xe0 0xed 0x6f 0x79 0xef 0xfb 0x9d 0xe6 0xcd 0x2b 0xad 0x2f 0x79
| + Duration: 00:23:54.905000000
|+ Tracks
| + Track
| + Track number: 1 (track ID for mkvmerge & mkvextract: 0)
| + Track UID: 4989308985802999081
| + "Lacing" flag: 0
| + Name: abcd
| + Language: und
| + Codec ID: V_MPEG4/ISO/AVC
| + Track type: video
| + Default duration: 00:00:00.041708333 (23.976 frames/fields per second for a video track)
| + Video track
| + Pixel width: 1280
| + Pixel height: 720
| + Interlaced: 2
| + Video colour information
| + Horizontal chroma siting: 1
| + Vertical chroma siting: 2
| + Codec's private data: size 45 (H.264 profile: High @L3.1)
| + Track
| + Track number: 2 (track ID for mkvmerge & mkvextract: 1)
| + Track UID: 5858605359486045911
| + "Lacing" flag: 0
| + Name: abcd
| + Language: eng
| + Codec ID: A_VORBIS
| + Track type: audio
| + Audio track
| + Channels: 2
| + Sampling frequency: 48000
| + Bit depth: 32
| + Codec's private data: size 3959
| + Track
| + Track number: 3 (track ID for mkvmerge & mkvextract: 2)
| + Track UID: 6757137498994684877
| + "Lacing" flag: 0
| + Name: abcd
| + Language: eng
| + Codec ID: S_TEXT/ASS
| + Track type: subtitles
| + Codec's private data: size 576
|+ Tags
| + Tag
| + Targets
| + Simple
| + Name: COMMENT
| + String: abcd
| + Simple
| + Name: ENCODER
| + String: Lavf58.76.100
| + Tag
| + Targets
| + Track UID: 4989308985802999081
| + Simple
| + Name: BPS
| + String: 1050683
| + Simple
| + Name: BPS
| + Tag language: eng
| + String: 1050683
| + Simple
| + Name: DURATION
| + Tag language: eng
| + String: 00:47:01.110000000
| + Simple
| + Name: NUMBER_OF_FRAMES
| + String: 67639
| + Simple
| + Name: NUMBER_OF_FRAMES
| + Tag language: eng
| + String: 67639
| + Simple
| + Name: NUMBER_OF_BYTES
| + String: 370511729
| + Simple
| + Name: NUMBER_OF_BYTES
| + Tag language: eng
| + String: 370511729
| + Simple
| + Name: _STATISTICS_WRITING_APP
| + String: mkvmerge v13.0.0 ('The Juggler') 64bit
| + Simple
| + Name: _STATISTICS_WRITING_APP
| + Tag language: eng
| + String: mkvmerge v13.0.0 ('The Juggler') 64bit
| + Simple
| + Name: _STATISTICS_WRITING_DATE_UTC
| + String: 2018-09-20 14:51:30
| + Simple
| + Name: _STATISTICS_WRITING_DATE_UTC
| + Tag language: eng
| + String: 2018-09-20 14:51:30
| + Simple
| + Name: _STATISTICS_TAGS
| + String: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
| + Simple
| + Name: _STATISTICS_TAGS
| + Tag language: eng
| + String: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
| + Simple
| + Name: ENCODER
| + String: Lavc58.134.100 libx264
| + Simple
| + Name: DURATION
| + String: 00:01:00.022000000
| + Tag
| + Targets
| + Track UID: 5858605359486045911
| + Simple
| + Name: BPS
| + String: 640000
| + Simple
| + Name: BPS
| + Tag language: eng
| + String: 640000
| + Simple
| + Name: DURATION
| + Tag language: eng
| + String: 00:47:01.120000000
| + Simple
| + Name: NUMBER_OF_FRAMES
| + String: 88160
| + Simple
| + Name: NUMBER_OF_FRAMES
| + Tag language: eng
| + String: 88160
| + Simple
| + Name: NUMBER_OF_BYTES
| + String: 225689600
| + Simple
| + Name: NUMBER_OF_BYTES
| + Tag language: eng
| + String: 225689600
| + Simple
| + Name: _STATISTICS_WRITING_APP
| + String: mkvmerge v13.0.0 ('The Juggler') 64bit
| + Simple
| + Name: _STATISTICS_WRITING_APP
| + Tag language: eng
| + String: mkvmerge v13.0.0 ('The Juggler') 64bit
| + Simple
| + Name: _STATISTICS_WRITING_DATE_UTC
| + String: 2018-09-20 14:51:30
| + Simple
| + Name: _STATISTICS_WRITING_DATE_UTC
| + Tag language: eng
| + String: 2018-09-20 14:51:30
| + Simple
| + Name: _STATISTICS_TAGS
| + String: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
| + Simple
| + Name: _STATISTICS_TAGS
| + Tag language: eng
| + String: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
| + Simple
| + Name: ENCODER
| + String: Lavc58.134.100 libvorbis
| + Simple
| + Name: DURATION
| + String: 00:01:00.003000000
| + Tag
| + Targets
| + Track UID: 6757137498994684877
| + Simple
| + Name: BPS
| + String: 40
| + Simple
| + Name: BPS
| + Tag language: eng
| + String: 40
| + Simple
| + Name: DURATION
| + Tag language: eng
| + String: 00:46:08.244000000
| + Simple
| + Name: NUMBER_OF_FRAMES
| + String: 636
| + Simple
| + Name: NUMBER_OF_FRAMES
| + Tag language: eng
| + String: 636
| + Simple
| + Name: NUMBER_OF_BYTES
| + String: 14113
| + Simple
| + Name: NUMBER_OF_BYTES
| + Tag language: eng
| + String: 14113
| + Simple
| + Name: _STATISTICS_WRITING_APP
| + String: mkvmerge v13.0.0 ('The Juggler') 64bit
| + Simple
| + Name: _STATISTICS_WRITING_APP
| + Tag language: eng
| + String: mkvmerge v13.0.0 ('The Juggler') 64bit
| + Simple
| + Name: _STATISTICS_WRITING_DATE_UTC
| + String: 2018-09-20 14:51:30
| + Simple
| + Name: _STATISTICS_WRITING_DATE_UTC
| + Tag language: eng
| + String: 2018-09-20 14:51:30
| + Simple
| + Name: _STATISTICS_TAGS
| + String: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
| + Simple
| + Name: _STATISTICS_TAGS
| + Tag language: eng
| + String: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES
| + Simple
| + Name: ENCODER
| + String: Lavc58.134.100 ssa
| + Simple
| + Name: DURATION
| + String: 00:23:54.905000000
|+ Cluster
现在我可以从上面推断出,ffmpeg 只是剪切了视频,因此显示了旧版本的属性,包括时间,尽管我创建的媒体文件大约是一分钟。
反正有没有做得更好,这意味着它从今天开始使用 ffmpeg 版本并给出相同的结果,持续时间也会更改为一分钟而不是它显示的 23 分钟?
FWIW,我当前系统中的 mkvmerge 是 -
$ mkvmerge --veion
mkvmerge v64.0.0 ('Willows') 64-bit
我正在跟进
加快播放速度
https://trac.ffmpeg.org/wiki/How%20to%20speed%20up%20/%20slow%20down%20a%20video
但是,当我将播放速度提高 1.5 倍时,我预计视频的大小会减少到与/大约相同的水平,然而,这就是我得到的:
-rwxrwxr-x 1 me me 10000000 2021-10-10 16:56 original_video.mp4*
-rwxrwxr-x 1 me me 10060896 2022-01-02 16:27 speed_up_output.mkv*
即,文件大小更大。
是否可以加快播放速度并将视频大小减小到相同程度?
简而言之:无法在 Chrome 中启用硬件视频加速。我的台式机集成了 GPU Intel UHD 750 和 Core i5 11600,它运行 Kubuntu 20.04。
最初,我根本没有硬件加速,所以即使是 VLC 播放视频也没有加速,尽管我已经intel-media-va-driver-non-free
安装了。的输出vainfo
是
libva info: VA-API version 1.7.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_7
libva info: va_openDriver() returns 1
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_6
libva info: va_openDriver() returns -1
我搜索了解决方案,但没有找到有同样问题的人。我决定就相关问题遵循一些建议。首先,我将内核从 5.11 更新到 5.15,但这并没有帮助。然后我添加了一个 repo 来安装英特尔驱动程序的 21.xx 版本,如此处评论中所建议的:https ://githubmemory.com/repo/HaveAGitGat/Tdarr/issues/452 。在升级了一些软件包并安装了一些保留的软件包后,我得到了视频加速。的当前输出vainfo
为
libva info: VA-API version 1.12.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_12
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.12 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 21.3.3 (6fdf88c)
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
等等。
下一步是在 Chrome 中启用硬件加速。我按照这里的说明https://www.linuxupprising.com/2021/01/how-to-enable-hardware-accelerated.html但没有帮助。该chrome://gpu
选项卡显示以下内容
图形功能状态
检测到的问题
我还尝试在 Firefox 中启用视频加速,但失败了。此外,我安装了 Chromium,chrome://gpu
现在显示几乎所有功能都已启用,但视频加速未启用。
请帮忙!
目标:
我正在尝试使我的 linux 笔记本电脑(带有 Libreboot 的 T400 ThinkPad)无论盖子是打开还是关闭,其行为方式都完全相同。换句话说,我试图模拟一台笔记本电脑的盖子开关坏了,该开关始终处于“盖子打开”位置。我正在寻找一种不需要特定 init 系统或特定电源管理器的低级解决方案——只需要任何 GNU/Linux 系统中预期存在(或可用)的软件。
我的两个操作系统是运行 Xorg 和 Fluxbox 的 Devuan ASCII(64 位)和 Tiny Core Linux 10.1(64 位),以防万一。内核版本为 4.16.2 (Devuan) 和 4.19.10 (Tiny Core Linux)。
测试:
我正在使用 xscreensaver(设置为在 1 分钟不活动后开始播放动画)作为我的测试应用程序,因为我注意到 xscreensaver 在盖子关闭时不会启动并开始播放动画。因此,当我可以合上盖子时,稍等一分钟,重新打开盖子,发现正在播放 xscreensaver 动画,我就知道我找到了解决方案。
到目前为止我尝试了什么:
机械的。我的笔记本电脑是 T400,它使用蓝牙 LED 上方的小磁铁作为盖子开关。在该位置放置一个小型冰箱磁铁会导致盖子开关卡在“关闭”位置,并且 xscreensaver 测试失败。使用button.lid_init_state=open内核引导参数引导没有帮助。
按键模块启动参数。这个内置模块是笔记本电脑盖子开关的驱动程序。使用button.lid_report_interval=0或=-1或=500000没有帮助。
i915 模块启动参数。Devuan 中的内核支持i915.panel_ignore_lid引导参数。将其设置为 -2 无助于通过 xscreensaver 测试。
视频模块启动参数。使用video.report_key_events=0没有帮助。
ACPI。使用acpi=off内核引导参数禁用它无助于通过测试。
禁用盖子开关。令人惊讶的是,禁用盖子开关并没有帮助。很难禁用按钮模块,因为它内置在内核中(即,它显示为ls /sys/module但不显示为lsmod)。但是,可以在系统启动后取消绑定所有使用按钮模块的设备:
# 1. find the devices that use the button driver:
$ ls /sys/bus/acpi/drivers/button
LNXPWRBN:00 PNP0C0D:00 PNP0C0E:00 bind uevent unbind
# 2. disable the devices one by one:
$ echo "LNXPWRBN:00" | sudo tee /sys/bus/acpi/drivers/button/unbind
LNXPWRBN:00
$ echo "PNP0C0D:00" | sudo tee /sys/bus/acpi/drivers/button/unbind
PNP0C0D:00
$ echo "PNP0C0E:00" | sudo tee /sys/bus/acpi/drivers/button/unbind
PNP0C0E:00
# 3. satisfy oneself that the devices are gone:
$ ls /sys/bus/acpi/drivers/button
bind uevent unbind
即使这样,xscreensaver 动画会在盖子打开时启动,但不会在盖子关闭时启动。
捕获触摸板事件。通过观察cat /dev/input/event5的输出,我注意到打开和关闭笔记本电脑盖会导致突触触摸板生成一些输入。使用evtest --grab /dev/input/event5 >/dev/null 获取所有输入并没有帮助。
告诉X不要挡道。X 启动后,我在引导时以普通用户身份运行这些命令:xset s off; xset -dpms; xset 的 noblank。这些命令告诉 X 我不想要它的空白屏幕屏幕保护程序,我不想要 DPMS,并且它永远不应该使屏幕空白。它没有帮助。
BIOS。我已经搜索了在 BIOS(在我的情况下为 Libreboot)级别禁用盖子开关的方法,但没有找到任何相关的内容。
这就是我到目前为止所尝试的全部。即使结合了以上所有,用户态应用程序(xscreensaver 是它们的代表)仍然会根据笔记本电脑盖是打开还是关闭而表现不同。(在 xscreensaver 的情况下,它只在笔记本电脑盖打开时开始播放动画,而在它关闭时从不播放。)
当然,必须有一种方法可以通过软件完全禁用笔记本电脑的盖子开关,并让用户级应用程序认为笔记本电脑的盖子总是打开的。我错过了什么?