音视频播放
OMXPlayer
在debian10系统以及更早的系统中使用此软件播放音视频。
在Raspberry Pi上播放音频和视频的最简单方法是使用已安装的OMXPlayer应用程序。
此软件支持硬件加速,可以播放许多流行的音频和视频文件格式。OMXPlayer使用OpenMAX(omx)硬件加速接口(API),这是Raspberry Pi上官方支持的媒体API。OMXPlayer由科迪项目的埃德加·胡切克开发。
OMXPlayer应用程序
最简单的命令行是omxplayer<媒体文件名>。媒体文件可以是音频或视频,也可以是两者。对于以下示例,我们使用了标准Raspberry Pi OS安装中包含的H264视频文件。
omxplayer /opt/vc/src/hello_pi/hello_video/test.h264
默认情况下,音频被发送到模拟端口。如果您使用的是带有扬声器的HDMI显示设备,则需要告诉omxplayer通过HDMI链路发送音频信号。
omxplayer --adev hdmi /opt/vc/src/hello_pi/hello_video/test.h264
显示视频时,整个显示器将用作输出。您可以使用窗口选项指定要显示视频的显示部分。
omxplayer --win 0,0,640,480 /opt/vc/src/hello_pi/hello_video/test.h264
您还可以指定要显示的视频部分:这称为裁剪窗口。除非您也使用窗口选项,否则视频的这部分将放大以匹配显示。
omxplayer --crop 100,100,300,300 /opt/vc/src/hello_pi/hello_video/test.h264
如果您使用的是树莓派触摸显示器,并且希望将其用于视频输出,请使用显示选项指定要使用的显示器。HDMI为5,触摸屏为4。使用树莓派4,您有两个HDMI输出选项。对于HDMI0,n为2,对于HDMI1,n为7。
omxplayer --display n /opt/vc/src/hello_pi/hello_video/test.h264
音频播放
要播放MP3文件,请使用cd导航到终端中.MP3文件的位置,然后键入以下命令:
omxplayer example.mp3
这将通过显示器的内置扬声器或通过耳机插孔连接的耳机播放音频文件example.mp3。
如果需要示例文件,可以使用以下命令从此处下载:
wget https://raw.githubusercontent.com/raspberrypilearning/burping-jelly-baby/master/data/la.mp3 -O example.mp3 --no-check-certificate
如果听不到任何声音,请确保耳机或扬声器连接正确。注意,omxplayer不使用ALSA,因此忽略了raspi-config或amixer设置的音频配置。
如果omxplayer对正确音频输出设备的自动检测失败,您可以通过HDMI强制输出:
omxplayer -o hdmi example.mp3
或者,您可以通过耳机插孔强制输出:
omxplayer -o local example.mp3
您甚至可以通过耳机插孔和HDMI强制输出:
omxplayer -o both example.mp3
视频播放
要播放视频,请使用cd导航到终端中视频文件的位置,然后键入以下命令:
omxplayer example.mp4
这将全屏播放example.mp4。按Ctrl+C退出。
在Raspberry Pi 4上,已删除对MPEG2和VC-1编解码器的硬件支持,因此我们建议使用VLC应用程序,该应用程序在软件中支持这些格式。此外,VLC还支持H264和新的HEVC编解码器。
示例视频
你的树莓派上有一个视频。要播放它,请在终端窗口中输入以下命令:
omxplayer /opt/vc/src/hello_pi/hello_video/test.h264
在Raspberry Pi 4上,对H264文件使用以下命令:
omxplayer /opt/vc/src/hello_pi/hello_video/test.h264
对于H264,VC1,或MPEG2格式的视频使用以下命令:
vlc /opt/vc/src/hello_pi/hello_video/test.h264
当使用VLC时,您可以通过封装原始H264数据流(例如来自Raspberry Pi相机模块)来提高播放性能。使用ffmpeg很容易做到这一点。如果VLC全屏运行,播放也会得到改善;从用户界面选择全屏,或者可以将–fullscreen选项添加到vlc命令行。
此示例命令将video.h264转换为30 fps的容器化video.mp4:
ffmpeg -r 30 -i video.h264 -c:v copy video.mp4
播放时选项
播放过程中有许多可用选项,可通过按相应的键进行操作。并非所有文件都可以使用所有选项。可以使用omxplayer--keys
显示键绑定列表:
1 decrease speed
2 increase speed
< rewind
> fast forward
z show info
j previous audio stream
k next audio stream
i previous chapter
o next chapter
n previous subtitle stream
m next subtitle stream
s toggle subtitles
w show subtitles
x hide subtitles
d decrease subtitle delay (- 250 ms)
f increase subtitle delay (+ 250 ms)
q exit omxplayer
p / space pause/resume
- decrease volume
+ / = increase volume
left arrow seek -30 seconds
right arrow seek +30 seconds
down arrow seek -600 seconds
up arrow seek +600 seconds
后台播放
如果在后台运行而没有tty(用户输入),omxplayer将立即关闭,因此要成功运行,您需要使用–no-keys选项告诉omxplayer不需要任何用户输入。
omxplayer --no-keys example.mp3 &
在命令末尾添加&将在后台运行作业。然后可以使用jobs命令检查此后台作业的状态。默认情况下,该作业将在omxplayer完成播放时完成,但如果需要,可以使用kill命令随时停止。
$ jobs
[1]- Running omxplayer --no-keys example.mp3 &
$ kill %1
$
[1]- Terminated omxplayer --no-keys example.mp3 &
VLC
debian11系统中已经移除了OMXPlayer,使用VLC播放音视频。
USB网络摄像头
用户可以使用标准USB网络摄像头在Raspberry Pi上拍摄照片和视频,而不是使用Raspberrry Pi相机模块。
相机模块的质量和可配置性高度优于标准USB网络摄像头,就是说树莓派对于树莓派官方的摄像头支持的更加完善。
首先,安装fswebcam软件包:
sudo apt install fswebcam
如果您没有使用默认pi用户帐户,则需要将您的用户名添加到视频组,否则您将看到“权限被拒绝”错误。
sudo usermod -a -G video <username>
要检查用户是否已正确添加到组,请使用groups命令。
基础用法
输入命令fswebcam,后跟文件名,将使用网络摄像头拍摄照片,并保存到指定的文件名:
fswebcam image.jpg
此命令将显示以下信息:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd4
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image.jpg'.
本例中使用的网络摄像头的分辨率为1280 x 720,因此要指定拍摄图像的分辨率,请使用-r选项:
fswebcam -r 1280x720 image2.jpg
此命令将显示以下信息:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 1 extraneous bytes before marker 0xd5
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image2.jpg'.
照片现在以网络摄像头的全分辨率拍摄,并带有横幅。
移除横幅
添加–no-banner 选项:
fswebcam -r 1280x720 --no-banner image3.jpg
此命令将显示以下信息:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to 'image3.jpg'.
自动拍照
你可以编写一个Bash脚本,用网络摄像头拍照。下面的脚本将图像保存在/home/pi/webcam目录中,因此首先使用以下命令创建webcam子目录:
mkdir webcam
要创建脚本,请打开选择的编辑器并编写以下示例代码:
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
fswebcam -r 1280x720 --no-banner /home/pi/webcam/$DATE.jpg
此脚本将拍摄一张照片并用时间戳命名文件。假设我们将其保存为webcam.sh,我们将首先使文件可执行:
chmod +x webcam.sh
运行
./webcam.sh
运行后一般会看到这些输出:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to '/home/pi/webcam/2013-06-07_2338.jpg'.
定时拍照
可以使用cron来安排在给定的时间间隔拍摄照片,例如每分钟拍摄一次延时。
首先打开cron表进行编辑:
crontab -e
这将询问您要使用哪个编辑器,或在默认编辑器中打开。在编辑器中打开文件后,添加以下行以安排每分钟拍摄一张照片(参考上面的Bash脚本):
* * * * * /home/pi/webcam.sh 2>&1
保存并退出,将看到提示:
crontab: installing new crontab
确保脚本不会保存使用相同文件名拍摄的图片。否则会覆盖图片。