Using RaspiVid software with a RaspiCam results in a .h264 encoded video file.
Most media players require .h264 to be "packaged" into a suitable video container format like .mp4.
This very simple Gambas project uses the program MP4Box to convert or package a bunch of .h264 files into .mp4 files ready to be edited or played using popular applications.
Background
This time of the year we enjoy watching garden birds inside their nests via our 2 Raspberry Pi powered bird boxes. These systems stream video, and also "motion capture" low frame rate video clips. But when I need a video clip with higher quality, I use the RaspiVid software.
The system is set up to produce a 30s video file using RaspiVid every time I click on a button. These .h264 files then have to be transfered via wifi, packaged as MP4 and then viewed and/or edited.
H264 is a compression standard which results in reasonably good quality video, but compressed to occupy less "space". MP4 is a media container format, and typically includes separate streams for video and audio. In this case my resulting MP4 just contains the compressed video data from an H264 file.
MP4Box is a simple to use command-line media packager. To create a new MP4 file from an existing H264 file, you can use it like this:-
MP4Box -add myVideo.h264 myVideo.mp4
To save having to type this each time, I've finally got around to writing a Gambas program to do it the gui way.
The Gambas program
I typically have a bunch of .h264 files that I have downloaded from my two bird box systems, and saved to a common folder on my laptop. I want my program to select the folder and then list only the .h264 files in this folder.
Then I want to package/convert them all with one press of the Convert button.
And then finally make the choice of playing or editing a single .mp4 file, by left-clicking the required file, which loads either gnome-mplayer or Avidemux.
The code
The main form needs the following controls positioned carefully upon it:-
- Button
- DirChooser
- ListBox x2
- Frame
- RadioButton x2
Declare two constants:-
Const VIDEO_PLAYER As String = "gnome-mplayer" 'our chosen video player
Const VIDEO_EDITOR As String = "avidemux3_qt5" 'our chosen video editor
Set initial folder for DirChooser:-
Public Sub Form_Open()
DirCh.SelectedPath = User.Home & "/Videos"
End
Populate ListBox with any .h264 files when a directory is selected:-
Public Sub DirCh_Change()
Dim strFileName As String
btnConvert.Enabled = False
lstH264.Clear
For Each strFileName In Dir(DirCh.SelectedPath, "*.h264").Sort()
lstH264.Add(strFileName)
btnConvert.Enabled = True
Next
End
Batch convert all .mp4 files when button is pressed:-
Public Sub btnConvert_Click()
Dim strFileName As String
Dim strNameNoExt As String
lstH264.Clear
lstMP4.Clear
For Each strFileName In Dir(DirCh.SelectedPath, "*.h264").Sort()
lstH264.Add(strFileName)
strNameNoExt = Mid(strFileName, 1, InStr(strFileName, ".") - 1)
Exec ["MP4Box", "-add", DirCh.SelectedPath & "/" & strFileName, DirCh.SelectedPath & "/" & strNameNoExt & ".mp4"] Wait
Next
For Each strFileName In Dir(DirCh.SelectedPath, "*.mp4").Sort()
lstMP4.Add(strFileName)
Next
End
Open and Play or edit selected file when mouse is left-clicked over a file:-
Public Sub lstMP4_Click()
Dim strAction As String
If radPlay.Value = True Then
strAction = VIDEO_PLAYER
Else
strAction = VIDEO_EDITOR
Endif
If lstMP4.Text <> "" Then
Exec [strAction, DirCh.SelectedPath & "/" & lstMP4.Text]
Endif
End
That's it, couldn't be much simpler!
Just change the Constants if you want to launch other players or editors, and don't forget to tart-it-up a bit by adding Tooltip text.
No comments:
Post a Comment